diff --git a/src/jio.storage/mappingstorage.js b/src/jio.storage/mappingstorage.js
index b9d8cca61208ec62fdfb8593549546cc2dab75ce..bb5e80e216ac36d6e4b9a75a0a6b2e6714576cd4 100644
--- a/src/jio.storage/mappingstorage.js
+++ b/src/jio.storage/mappingstorage.js
@@ -7,21 +7,25 @@
   function MappingStorage(spec) {
     this._mapping_dict = spec.mapping_dict || {};
     this._sub_storage = jIO.createJIO(spec.sub_storage);
-    this._map_all_property = spec.map_all_property || false;
-    this._mapping_dict_attachment = spec.mapping_dict_attachment || {};
+    this._map_all_property = spec.map_all_property !== undefined ?
+        spec.map_all_property : true;
+    this._attachment_mapping_dict = spec.attachment_mapping_dict || {};
     this._query = spec.query || {};
 
     if (this._query.query !== undefined) {
       this._query.query = QueryFactory.create(this._query.query);
     }
+    this._default_mapping = {};
     this._id_is_mapped = (this._mapping_dict.id !== undefined
             && this._mapping_dict.id.equal !== "id");
     var property, query_list = [];
 
-    // handle default_value.  
+    // handle default_value.
     for (property in this._mapping_dict) {
       if (this._mapping_dict.hasOwnProperty(property)) {
         if (this._mapping_dict[property].default_value !== undefined) {
+          this._default_mapping[property] =
+            this._mapping_dict[property].default_value;
           query_list.push(new SimpleQuery({
             key: property,
             value: this._mapping_dict[property].default_value,
@@ -47,7 +51,7 @@
   }
 
   function getAttachmentId(storage, sub_id, attachment_id, method) {
-    var mapping_dict = storage._mapping_dict_attachment;
+    var mapping_dict = storage._attachment_mapping_dict;
     return new RSVP.Queue()
       .push(function () {
         if (mapping_dict !== undefined
@@ -106,13 +110,19 @@
       });
   }
 
-  function unmapProperty(storage, property, doc, mapped_doc) {
-    if (storage._mapping_dict[property].equal !== undefined) {
-      doc[storage._mapping_dict[property].equal] = mapped_doc[property];
-      return storage._mapping_dict[property].equal;
+  function mapToSubProperty(storage, property, sub_doc, doc) {
+    if (storage._mapping_dict[property] !== undefined) {
+      if (storage._mapping_dict[property].equal !== undefined) {
+        sub_doc[storage._mapping_dict[property].equal] = doc[property];
+        return storage._mapping_dict[property].equal;
+      }
+      if (storage._mapping_dict[property].default_value !== undefined) {
+        sub_doc[property] = storage._mapping_dict[property].default_value;
+        return property;
+      }
     }
-    if (storage._mapping_dict[property].default_value !== undefined) {
-      doc[property] = storage._mapping_dict[property].default_value;
+    if (storage._map_all_property) {
+      sub_doc[property] = doc[property];
       return property;
     }
     throw new jIO.util.jIOError(
@@ -121,11 +131,11 @@
     );
   }
 
-  function mapProperty(storage, property, doc, mapped_doc) {
+  function mapToMainProperty(storage, property, sub_doc, doc) {
     if (storage._mapping_dict[property] !== undefined) {
       if (storage._mapping_dict[property].equal !== undefined) {
-        if (doc.hasOwnProperty(storage._mapping_dict[property].equal)) {
-          mapped_doc[property] = doc[storage._mapping_dict[property].equal];
+        if (sub_doc.hasOwnProperty(storage._mapping_dict[property].equal)) {
+          doc[property] = sub_doc[storage._mapping_dict[property].equal];
         }
         return storage._mapping_dict[property].equal;
       }
@@ -134,56 +144,53 @@
       }
     }
     if (storage._map_all_property) {
-      if (doc.hasOwnProperty(property)) {
-        mapped_doc[property] = doc[property];
+      if (sub_doc.hasOwnProperty(property)) {
+        doc[property] = sub_doc[property];
       }
       return property;
     }
     return false;
   }
 
-  function mapDocument(storage, doc, id_delete) {
-    var mapped_doc = {},
+  function mapToMainDocument(storage, sub_doc, delete_id_from_doc) {
+    var doc = {},
       property,
       property_list = [];
     for (property in storage._mapping_dict) {
       if (storage._mapping_dict.hasOwnProperty(property)) {
-        property_list.push(mapProperty(storage, property, doc, mapped_doc));
+        property_list.push(mapToMainProperty(storage, property, sub_doc, doc));
       }
     }
     if (storage._map_all_property) {
-      for (property in doc) {
-        if (doc.hasOwnProperty(property)) {
+      for (property in sub_doc) {
+        if (sub_doc.hasOwnProperty(property)) {
           if (property_list.indexOf(property) < 0) {
-            mapped_doc[property] = doc[property];
+            doc[property] = sub_doc[property];
           }
         }
       }
     }
-    if (id_delete) {
-      delete mapped_doc.id;
+    if (delete_id_from_doc) {
+      delete doc.id;
     }
-    return mapped_doc;
+    return doc;
   }
 
-  function unmapDocument(storage, mapped_doc) {
-    var doc = {}, property, property_list = [];
-    for (property in storage._mapping_dict) {
-      if (storage._mapping_dict.hasOwnProperty(property)) {
-        property_list.push(unmapProperty(storage, property, doc, mapped_doc));
+  function mapToSubstorageDocument(storage, doc) {
+    var sub_doc = {}, property;
+
+    for (property in doc) {
+      if (doc.hasOwnProperty(property)) {
+        mapToSubProperty(storage, property, sub_doc, doc);
       }
     }
-    if (storage._map_all_property) {
-      for (property in mapped_doc) {
-        if (mapped_doc.hasOwnProperty(property)) {
-          if (property_list.indexOf(property) < 0) {
-            doc[property] = mapped_doc[property];
-          }
-        }
+    for (property in storage._default_mapping) {
+      if (storage._default_mapping.hasOwnProperty(property)) {
+        sub_doc[property] = storage._default_mapping[property];
       }
     }
-    delete doc.id;
-    return doc;
+    delete sub_doc.id;
+    return sub_doc;
   }
 
   MappingStorage.prototype.get = function (id) {
@@ -192,8 +199,8 @@
       .push(function (sub_id) {
         return context._sub_storage.get(sub_id);
       })
-      .push(function (doc) {
-        return mapDocument(context, doc, true);
+      .push(function (sub_doc) {
+        return mapToMainDocument(context, sub_doc, true);
       })
       .push(undefined, function (error) {
         throw new jIO.util.jIOError("Cannot find document " + id
@@ -201,30 +208,31 @@
       });
   };
 
-  MappingStorage.prototype.post = function (doc_mapped) {
+  MappingStorage.prototype.post = function (doc) {
     if (!this._id_is_mapped) {
-      return this._sub_storage.post.apply(
-        this._sub_storage,
-        unmapDocument(this, doc_mapped)
-      );
+      return this._sub_storage.post(mapToSubstorageDocument(this, doc));
     }
+    throw new jIO.util.jIOError(
+      "post is not supported with id mapped",
+      400
+    );
   };
 
   MappingStorage.prototype.put = function (id, doc) {
     var context = this,
-      mapped_doc = unmapDocument(this, doc);
+      sub_doc = mapToSubstorageDocument(this, doc);
     return getSubStorageId(this, id)
       .push(function (sub_id) {
         if (context._id_is_mapped) {
-          mapped_doc[context._mapping_dict.id.equal] = id;
+          sub_doc[context._mapping_dict.id.equal] = id;
         }
         if (id === undefined) {
           throw new Error();
         }
-        return context._sub_storage.put(sub_id, mapped_doc);
+        return context._sub_storage.put(sub_id, sub_doc);
       })
       .push(undefined, function () {
-        return context._sub_storage.post(mapped_doc);
+        return context._sub_storage.post(sub_doc);
       })
       .push(function () {
         return id;
@@ -318,7 +326,7 @@
       })
       .push(function (result) {
         for (i = 0; i < result.length; i += 1) {
-          mapped_result.push(mapDocument(context, result[i], false));
+          mapped_result.push(mapToMainDocument(context, result[i], false));
         }
         return mapped_result;
       });
@@ -341,13 +349,13 @@
         one_query.query_list = query_list;
         return one_query;
       }
-      one_query.key = mapProperty(context, one_query.key, {}, {});
+      one_query.key = mapToMainProperty(context, one_query.key, {}, {});
       return one_query;
     }
 
     if (option.sort_on !== undefined) {
       for (i = 0; i < option.sort_on.length; i += 1) {
-        property = mapProperty(this, option.sort_on[i][0], {}, {});
+        property = mapToMainProperty(this, option.sort_on[i][0], {}, {});
         if (property && sort_on.indexOf(property) < 0) {
           select_list.push([property, option.sort_on[i][1]]);
         }
@@ -363,7 +371,7 @@
     }
     if (option.select_list !== undefined) {
       for (i = 0; i < option.select_list.length; i += 1) {
-        property = mapProperty(this, option.select_list[i], {}, {});
+        property = mapToMainProperty(this, option.select_list[i], {}, {});
         if (property && select_list.indexOf(property) < 0) {
           select_list.push(property);
         }
@@ -409,7 +417,7 @@
       .push(function (result) {
         for (i = 0; i < result.data.total_rows; i += 1) {
           result.data.rows[i].value =
-            mapDocument(context, result.data.rows[i].value, false);
+            mapToMainDocument(context, result.data.rows[i].value, false);
           if (result.data.rows[i].id !== undefined && context._id_is_mapped) {
             result.data.rows[i].id =
                 result.data.rows[i].value.id;
diff --git a/test/jio.storage/mappingstorage.tests.js b/test/jio.storage/mappingstorage.tests.js
index c0c1185abc2e335c3c2f07c87f1514d5d4dcaa7a..486f51d27253906e4de37d7663713139b17e68a9 100644
--- a/test/jio.storage/mappingstorage.tests.js
+++ b/test/jio.storage/mappingstorage.tests.js
@@ -37,7 +37,7 @@
     deepEqual(jio.__storage._mapping_dict, {});
     deepEqual(jio.__storage._mapping_dict_attachment, {});
     deepEqual(jio.__storage._query, {});
-    equal(jio.__storage._map_all_property, false);
+    equal(jio.__storage._map_all_property, true);
   });
 
   test("accept parameters", function () {
@@ -47,7 +47,7 @@
         type: "mappingstorage2713"
       },
       mapping_dict: { "bar": {"equal": "foo"}},
-      map_all_property: true,
+      map_all_property: false,
       query: {"query": 'foo: "bar"'},
       mapping_dict_attachment: {"foo": {"get": "bar"}}
     });
@@ -57,7 +57,7 @@
     equal(jio.__storage._query.query.value, "bar");
     equal(jio.__storage._query.query.type, "simple");
     deepEqual(jio.__storage._mapping_dict_attachment, {"foo": {"get": "bar"}});
-    equal(jio.__storage._map_all_property, true);
+    equal(jio.__storage._map_all_property, false);
   });
 
   /////////////////////////////////////////////////////////////////
@@ -82,17 +82,15 @@
       return {title: "foo"};
     };
 
+    start();
     jio.get("bar")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, {
           "title": "foo"
         }, "Check document");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -113,16 +111,14 @@
       return {otherTitle: "foo"};
     };
 
+    start();
     jio.get("bar")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, {
           "title": "foo"
         });
-      }).fail(function (error) {
+      }).push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -155,16 +151,14 @@
       return {"otherTitle": "foo"};
     };
 
+    start();
     jio.get("42")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, {
           "title": "foo"
         });
-      }).fail(function (error) {
+      }).push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -202,16 +196,14 @@
       return {"otherTitle": "foo"};
     };
 
+    start();
     jio.get("42")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, {
           "title": "foo"
         });
-      }).fail(function (error) {
+      }).push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -226,8 +218,7 @@
       },
       mapping_dict: {
         "id": {"equal": "otherId"}
-      },
-      map_all_property: true
+      }
     });
 
     Storage2713.prototype.hasCapacity = function () {
@@ -248,16 +239,14 @@
       return {"title": "foo"};
     };
 
+    start();
     jio.get("42")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, {
           "title": "foo"
         });
-      }).fail(function (error) {
+      }).push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -284,15 +273,13 @@
       return id;
     };
 
+    start();
     jio.put("bar", {"title": "foo"})
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "bar");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -313,15 +300,13 @@
       return id;
     };
 
+    start();
     jio.put("bar", {})
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "bar");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -354,15 +339,13 @@
       return [];
     };
 
+    start();
     jio.put("42", {"title": "foo"})
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "42");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -387,17 +370,16 @@
       return id;
     };
 
+    start();
     jio.put("42", {"title": "foo", "smth": "bar", "smth2": "bar2"})
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "42");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
+
   /////////////////////////////////////////////////////////////////
   // mappingStorage.remove 
   /////////////////////////////////////////////////////////////////
@@ -417,15 +399,13 @@
       return id;
     };
 
+    start();
     jio.remove("bar", {"title": "foo"})
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "bar");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -457,17 +437,67 @@
       return "foo";
     };
 
+    start();
     jio.remove("42")
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "42");
-      }).fail(function (error) {
+      }).push(undefined, function (error) {
         ok(false, error);
+      });
+  });
+
+  /////////////////////////////////////////////////////////////////
+  // mappingStorage.remove 
+  /////////////////////////////////////////////////////////////////
+  module("mappingStorage.post");
+
+  test("post with mapped property", function () {
+    stop();
+    expect(2);
+    var jio = jIO.createJIO({
+      type: "mapping",
+      sub_storage: {
+        type: "mappingstorage2713"
+      },
+      mapping_dict: {"title": {"equal": "otherTitle"}}
+    });
+    Storage2713.prototype.post = function (doc) {
+      deepEqual(doc, {"otherTitle": "foo"}, "remove 2713 called");
+      return "42";
+    };
+
+    start();
+    jio.post({"title": "foo"})
+      .push(function (result) {
+        equal(result, "42");
       })
-      .always(function () {
-        start();
+      .push(undefined, function (error) {
+        ok(false, error);
       });
   });
 
+  test("post with id mapped", function () {
+    stop();
+    expect(2);
+    var jio = jIO.createJIO({
+      type: "mapping",
+      sub_storage: {
+        type: "mappingstorage2713"
+      },
+      mapping_dict: {"id": {"equal": "otherId"}}
+    });
+
+    Storage2713.prototype.post = function () {
+      return false;
+    };
+
+    start();
+    jio.post({"title": "foo"})
+      .push(undefined, function (error) {
+        equal(error.message, "post is not supported with id mapped");
+        equal(error.status_code, 400);
+      });
+  });
   /////////////////////////////////////////////////////////////////
   // mappingStorage.putAttachment
   /////////////////////////////////////////////////////////////////
@@ -490,15 +520,14 @@
       deepEqual(attachment, blob, "putAttachment 2713 called");
       return doc_id;
     };
+
+    start();
     jio.putAttachment("42", "2713", blob)
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "2713");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -521,15 +550,14 @@
       deepEqual(attachment, blob, "putAttachment 2713 called");
       return doc_id;
     };
+
+    start();
     jio.putAttachment("42", "2713", blob)
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "2713");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -564,15 +592,13 @@
       return [{"id": "13"}];
     };
 
+    start();
     jio.putAttachment("42", "2713", blob)
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "2713");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -596,15 +622,14 @@
       equal(attachment, "2713", "getAttachment 2713 called");
       return blob;
     };
+
+    start();
     jio.getAttachment("42", "2713")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, blob);
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -626,15 +651,14 @@
       equal(doc_id, "42", "getAttachment 2713 called");
       return blob;
     };
+
+    start();
     jio.getAttachment("42", "2713")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, blob);
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -668,15 +692,13 @@
       return [{"id": "13"}];
     };
 
+    start();
     jio.getAttachment("42", "2713")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, blob);
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -688,32 +710,34 @@
   test("removeAttachment use sub_storage one's", function () {
     stop();
     expect(3);
+
     var jio = jIO.createJIO({
       type: "mapping",
       sub_storage: {
         type: "mappingstorage2713"
       }
     });
+
     Storage2713.prototype.removeAttachment = function (doc_id, attachment) {
       equal(doc_id, "42", "removeAttachment 2713 called");
       equal(attachment, "2713", "getAttachment 2713 called");
       return doc_id;
     };
+
+    start();
     jio.removeAttachment("42", "2713")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, "2713");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
   test("removeAttachment use UriTemplate", function () {
     stop();
     expect(3);
+
     var jio = jIO.createJIO({
       type: "mapping",
       sub_storage: {
@@ -722,26 +746,27 @@
       mapping_dict_attachment: {"2713":
         {"remove": {"uri_template": "www.2713/{id}.bar"}}}
     });
+
     Storage2713.prototype.removeAttachment = function (doc_id, attachment) {
       equal(doc_id, "42", "removeAttachment 2713 called");
       equal(attachment, "www.2713/42.bar", "removeAttachment 2713 called");
       return doc_id;
     };
+
+    start();
     jio.removeAttachment("42", "2713")
-      .then(function (result) {
+      .push(function (result) {
         deepEqual(result, "2713");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
   test("removeAttachment with UriTemplate and id mapped", function () {
     stop();
     expect(4);
+
     var jio = jIO.createJIO({
       type: "mapping",
       sub_storage: {
@@ -768,15 +793,13 @@
       return [{"id": "13"}];
     };
 
+    start();
     jio.removeAttachment("42", "2713")
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "2713");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -802,6 +825,7 @@
       map_all_property: true
     });
 
+    start();
     jio.put("42",
       {
         "title": "foo",
@@ -834,9 +858,6 @@
       })
       .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -862,6 +883,7 @@
       }
     });
 
+    start();
     jio.put("42",
       {
         "title": "foo",
@@ -894,9 +916,6 @@
       })
       .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -921,6 +940,7 @@
       }
     });
 
+    start();
     jio.put("42",
       {
         "title": "foo",
@@ -946,9 +966,6 @@
       })
       .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
 
@@ -974,6 +991,7 @@
       map_all_property: true
     });
 
+    start();
     jio.put("42",
       {
         "title": "foo",
@@ -1002,9 +1020,60 @@
       })
       .push(undefined, function (error) {
         ok(false, error);
+      });
+  });
+
+  test("allDocs id and prop mapped and query", function () {
+    stop();
+    expect(1);
+
+    var jio = jIO.createJIO({
+      type: "mapping",
+      query: {"query": 'otherId: "42"'},
+      mapping_dict: {
+        "id": {"equal": "otherId"},
+        "title": {"equal": "otherTitle"}
+      },
+      sub_storage: {
+        type: "query",
+        sub_storage: {
+          type: "uuid",
+          sub_storage: {
+            type: "memory"
+          }
+        }
+      }
+    });
+
+    start();
+    jio.put("42",
+      {
+        "title": "foo",
+        "smth": "bar"
+      })
+        .push(function () {
+        return jio.allDocs({
+          query: 'title: "foo"',
+          select_list: ["title"]
+        });
+      })
+        .push(function (result) {
+        deepEqual(result,
+          {
+            "data": {
+              "rows": [
+                {
+                  "id": "42",
+                  "value": {"title": "foo"},
+                  "doc": {}
+                }
+              ],
+              "total_rows": 1
+            }
+          }, "allDocs check");
       })
-      .always(function () {
-        start();
+      .push(undefined, function (error) {
+        ok(false, error);
       });
   });
 
@@ -1067,6 +1136,7 @@
       ];
     };
 
+    start();
     jio.bulk([{
       method: "get",
       parameter_list: ["id1"]
@@ -1089,8 +1159,8 @@
           "bulk test"
         );
       })
-      .always(function () {
-        start();
+      .push(undefined, function (error) {
+        ok(false, error);
       });
   });
 
@@ -1116,15 +1186,14 @@
       return "foobar";
     };
 
+    start();
     jio.repair(["foo", "bar"])
-      .then(function (result) {
+      .push(function (result) {
         equal(result, "foobar", "Check repair");
       })
-      .fail(function (error) {
+      .push(undefined, function (error) {
         ok(false, error);
-      })
-      .always(function () {
-        start();
       });
   });
+
 }(jIO, QUnit, Blob));
\ No newline at end of file