         )
     }
     
+    public func primitiveValue<V: ImportableAttributeType>(for property: (O) -> ValueContainer<O>.Required<V>) -> V {
+        
+        return V.cs_fromImportableNativeType(
+            self.rawObject.primitiveValue(forKey: property(O.meta).keyPath)! as! V.ImportableNativeType
+        )!
+    }
+    
+    public func setPrimitiveValue<V: ImportableAttributeType>(_ value: V, for property: (O) -> ValueContainer<O>.Required<V>) {
+        
+        self.rawObject.setPrimitiveValue(
+            value.cs_toImportableNativeType(),
+            forKey: property(O.meta).keyPath
+        )
+    }
+    
+    
+    // MARK: Value.Optional utilities
+    
+    public func value<V: ImportableAttributeType>(for property: (O) -> ValueContainer<O>.Optional<V>) -> V? {
+        
+        return (self.rawObject.value(forKey: property(O.meta).keyPath) as! V.ImportableNativeType?)
+            .flatMap(V.cs_fromImportableNativeType)
+    }
+    
     public func setValue<V: ImportableAttributeType>(_ value: V?, for property: (O) -> ValueContainer<O>.Optional<V>) {
         
         self.rawObject.setValue(
             value?.cs_toImportableNativeType(),
             forKey: property(O.meta).keyPath
         )
+    }
+    
+    public func primitiveValue<V: ImportableAttributeType>(for property: (O) -> ValueContainer<O>.Optional<V>) -> V? {
+        
+        return (self.rawObject.primitiveValue(forKey: property(O.meta).keyPath) as! V.ImportableNativeType?)
+            .flatMap(V.cs_fromImportableNativeType)
+    }
+    
+    public func setPrimitiveValue<V: ImportableAttributeType>(_ value: V?, for property: (O) -> ValueContainer<O>.Optional<V>) {
+        
+        self.rawObject.setPrimitiveValue(
+            value?.cs_toImportableNativeType(),
+            forKey: property(O.meta).keyPath
+        )
+    }
+    
+    
+    // MARK: Transformable.Required utilities
+    
+    public func value<V: NSCoding & NSCopying>(for property: (O) -> TransformableContainer<O>.Required<V>) -> V {
+        
+        return self.rawObject.value(forKey: property(O.meta).keyPath)! as! V
     }
     
     public func setValue<V: NSCoding & NSCopying>(_ value: V, for property: (O) -> TransformableContainer<O>.Required<V>) {

        )
    }
    
    public func setValue<V: NSCoding & NSCopying>(_ value: V?, for property: (O) -> TransformableContainer<O>.Optional<V>) {
        
        self.rawObject.setValue(

        )
    }
    
    public func primitiveValue<V: NSCoding & NSCopying>(for property: (O) -> TransformableContainer<O>.Optional<V>) -> V? {
        
        return self.rawObject.primitiveValue(forKey: property(O.meta).keyPath) as! V?
    }
    
    public func setPrimitiveValue<V: NSCoding & NSCopying>(_ value: V?, for property: (O) -> TransformableContainer<O>.Optional<V>) {
