         return self
     }
     
-//    func snap(_ dict:Properties) -> Kinieta {
-//        
-//        let m = Transformation(self.view, for: dict)
-//        
-//        self.view.transform = m.cgAffineTransform
-//        
-//        return self
-//    }
-//    
-//    func wait(_ time:TimeInterval) -> Kinieta {
-//        
-//        
-//        return self
-//    }
+    func snap(_ dict: [String:Any]) -> Kinieta {
+        
+        
+        return self
+    }
+    
+    func wait(_ time:TimeInterval) -> Kinieta {
+        
+        
+        return self
+    }
     
     
-//    func group() -> Kinieta {
-//        
-//    }
-}
-
-extension UIView {
-    
-    public var kinieta: Kinieta {
-        
-        guard let instance = objc_getAssociatedObject(self, &Kinieta.associatedKey) as? Kinieta else {
-            let instance = Kinieta(self)
-            objc_setAssociatedObject(self, &Kinieta.associatedKey, instance, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
-            return instance
-        }
-        
-        return instance
+    func group() -> Kinieta {
         
     }
 }
+
+extension UIView: Kinieta {
+    
+    func move(_ dict: [String:Any]) -> Kinieta {
+        return KinietaInstance(self).move(dict)
+    }
+    func move(_ dict: [String:Any], _ time: TimeInterval) -> Kinieta {
+        return KinietaInstance(self).move(dict, time)
+    }
+    func snap(_ dict: [String:Any]) -> Kinieta {
+        return KinietaInstance(self).snap(dict)
+    }
+    
+    
+}


import UIKit

open class Kinieta {
    
    static var associatedKey = "KinietaAssociatedKey"
    enum State {

    
    // MARK: API
    
    static let defaultDuration: TimeInterval = 0.5
    func move(_ dict: [String:Any]) -> Kinieta {
        return move(dict, KinietaInstance.defaultDuration)
    }
    
    func move(_ dict: [String:Any], _ time: TimeInterval) -> Kinieta {
        
        let m = Transformation(self.view, for: dict)
        
