anchor.diff:  	MapDecorator options;
   	MapDecorator links;
   	Switch writable;
  +	Switch rootlocked;
   	Directory d;
   	dynamic dm;
     
  -	static create(n,m) => new GuardedDirectory(path:n,readonly:m);
  -	static use(n,m) => new GuardedDirectory.openDir(path:n,readonly:m);
  -	
  -	GuardedDirectory({String path, bool readonly: false}){
  -            this.options = new MapDecorator.from({'readonly':readonly, 'path':path});
  -            this.links = new MapDecorator();
  -            this.d = new Directory(this.options.get('path'));
  -            this.writable = Switch.create();
  -            if(!readonly) this.writable.switchOn();
  -	}
  -
  -	GuardedDirectory openDir({String path, bool readonly: false}){
  -            if(Valids.exist(path)){
  -              this.d = new Directory(path);
  -              if(Valids.not(this.d.existsSync())) throw new FileSystemException('$path does not exist!',path);
  -              this.options = new MapDecorator.from({'readonly':readonly, 'path':path});
  -              this.links = new MapDecorator();
  -              this.writable = Switch.create();
  -              if(!readonly) this.writable.switchOn();
  -            }
  -	}
  +	static create(n,m,[l]) => new GuardedDirectory(path:n,readonly:m,lockRoot:l);
  +	static use(n,m,[l]) => new GuardedDirectory.openDir(path:n,readonly:m, lockRoot:l);
  +	
  +	GuardedDirectory({String path, bool readonly: false,bool lockRoot: false}){
  +          if(!Valids.exist(path)) throw "path must be specified";
  +          this.d = new Directory(path);
  +          this._init(readonly,path,lockRoot);
  +	}
  +
  +	GuardedDirectory openDir({String path, bool readonly: false, bool lockRoot:false}){
  +          if(!Valids.exist(path)) throw "path must be specified";
  +          this.d = new Directory(path);
  +          if(Valids.not(this.d.existsSync())) throw new FileSystemException('$path does not exist!',path);
  +          this._init(readonly,path,lockRoot);
  +	}
  +
  +        void _init(readonly,path,lockRoot){
  +          this.options = new MapDecorator.from({'readonly':readonly, 'path':path,'lockRoot': lockRoot});
  +          this.links = new MapDecorator();
  +          this.writable = Switch.create();
  +          this.rootlocked = Switch.create();
  +          if(!readonly) this.writable.switchOn();
  +          if(lockRoot) this.rootlocked.switchOn();
  +        }
  +
  +        void checkLock(String path){
  +          if(this.rootlocked.on()){
  +            if(paths.isWithin(this.options.get('path'),path)) return true;
  +            throw new FileSystemException("Directory is locked and cant move out of current root directory!");
  +          }
  +        }
   
   	Future fsCheck(String path){
   		var real = paths.join(this.options.get('path'),path);
  
positive.code: 	}
  	 
    	sm.Streamable directoryListsAsString([bool rec,bool ff]){
      return this.directoryLists((o){ return o.path;},rec,ff); 
    	}
    
  	Future rename(String name){
  
negative.code:   GuardedDirectory dir;
  
    static Future pathExists(String path){
        if(FileSystemEntity.typeSync(path) == FileSystemEntityType.NOT_FOUND) return new Future.error(new FileSystemException('NOT FOUND!',path));
        return new Future.value(path);
    }
  
    static create(p,r,[l]) => new GuardedFS(p,r,l);
    static use(p,r,[l]) => new GuardedFS.useFs(p,r,l);
    
    GuardedFS(String path,bool readonly,bool lock){
      lock = Funcs.switchUnless(lock,false);
      this.dir = GuardedDirectory.create(path,readonly,lock);
    }
  
    GuardedFS useFs(String path,bool readonly,bool lock){
      lock = Funcs.switchUnless(lock,false);
      this.dir = GuardedDirectory.use(path,readonly,lock);
    }
  
    Future fsCheck(String path){
  