     public func mapping(map: Map) {
         _id <- map[Default.UID_KEY]
         referenceName <- map[Default.REFERENCE_NAME_KEY]
-        if map.mappingType == MappingType.FromJSON{
-            Registry.register(self)//register on deserialization
-        }
-    }
-    
-    // MARK : Identifiable
-    
+    }
+    
+    // MARK: - Identifiable
+    
+    // This  id is always  created locally and used as primary index by MONGODB
+    private var _id:String=Default.NO_UID{
+        didSet{
+            if _id != Default.NO_UID {
+                Registry.register(self)
+            }else{
+                Bartleby.bprint("¡WARNING! multiple allocation of _ID ", file: #file, function: #function, line: #line)
+            }
+        }
+    }
+    
+    
+    
+    // The creation of a Unique Identifier is ressource intensive.
+    //We create the UID only if necessary.
+    private func _createUIDifNecessary(){
+        if _id == Default.NO_UID{
+            _id=Bartleby.createUID()
+        }
+    }
     
     final public var UID:String{
         get{


// Notice the @objc(Name)
// http://stackoverflow.com/a/24196632/341994

@objc(JObject) public class JObject : NSObject,NSCopying,Mappable,Persistent,Serializable,Identifiable,NSSecureCoding{
    
    
    // Key Mapping
    
    // The id is always  created locally
    // and used as primary index by MONGODB
    private var _id:String=Default.NO_UID
    
    private var _referenceName:String=Default.NO_NAME
    
    // The class name
    public var referenceName:String{
        get{
            if _referenceName == Default.NO_NAME{

    }
    
    
    // MARK: - Serializable
    
    
    public func serialize()->NSData {
