docs: function addMaping(folder) {
  	Object.defineProperties(folder, {
  		// Return all enumerable properties
  		_subfiles: {
  			get: function () {
                  return filter(folder, {type: ['file','directory']}, 'keys');
              }
  		},
  		// Return properties with _type === 'file'
  		_files: {
  			get: function () {
                  return filter(folder, {type: 'file'}, 'keys');
  			}
  		},
  		// Return properties with _type === 'directory'
  		_folders: {
  			get: function () {
                  return filter(folder, {type: 'directory'}, 'keys');
  			}
  		},
          __filter: {
              value: function (opts, returnArray) {
                  if(!opts.recursive) {
                      return filter(folder, opts, returnArray);
                  }
                  opts.recursive = false;
                  if(!returnArray) {
                      return filter(folder, opts, returnArray);
                  }
                  return filterRecursive(folder, opts, returnArray);
              }
          },
          __clear: {
              value: function () {
                  folder._subfiles.forEach(function (key) {
                      delete folder[key];
                  });
              }
          },
  		// Function for starting mapping from current folder with opts
  		__map: {
  			value: function (opts, callback) {
  				if (typeof opts === 'function') {
  					callback = opts;
  					opts = {};
  				}
  
  				folder.__list(function (err, list) {
  					if (err) {
  						callback(err);
  						return;
  					}
  					mapObjects(folder, list, function (err, map) {
  						if (err) {
  							callback(err);
  							return;
  						}
  						var folders = transfer(folder, map, opts);
  						var count = folders.length;
  
  						if (!opts.recursive || count === 0) {
                              if(!opts.extend) {
                                  callback(null, folder);
                                  return;
                              }
  
                              extendComponents(folder, opts, callback);
  							return;
  						}
  
  						var sent = false;
  						folders.forEach(function (f) {
  							f.__map(opts, function (err, fMap) {
  								if (err) {
  									if (!sent) {
  										callback(err);
  										sent = true;
  									}
  									return;
  								}
                                  if (!opts.simple) {
                                      transfer(folder, fMap, opts);
                                  }
  								if (--count === 0) {
                                      if(!opts.extend) {
                                          callback(null, folder);
                                          return;
                                      }
                                      extendComponents(folder, opts, callback);
  								}
  							});
  						});
  					});
  				});
  			}
  		},
          __reMap: {
              value: function (callback) {
                  folder.__clear();
                  folder.__map(callback);
              }
          },
          __watchMap: {
              value: function (persistent, callback) {
                  if(typeof persistent === 'function') {
                      callback = persistent;
                      persistent = false;
                  }
                  folder.__watchList(persistent, function (err, list) {
                      if(err) {
                          callback(err);
                          return;
                      }
                      folder.__reMap(callback);
                  });
              }
          },
          __extend: {
              value: function (map) {
                  return utils.extend(folder, map, true);
              }
          }
  	});
  }