             objc_setAssociatedObject(self, &easy_attributesReference, newValue, policy)
         }
     }
-
+    
+    /**
+ 
+     */
+    internal func apply(attributes attributes: [Attribute]) -> [NSLayoutConstraint] {
+        var layoutConstraints: [NSLayoutConstraint] = []
+        
+        for attribute in attributes {
+            //
+            attribute.createConstraints(for: self)
+            
+            //
+            let node = self.nodes[attribute.signature] ?? Node()
+            let createdConstraints = node.add(attribute: attribute)
+            layoutConstraints.appendContentsOf(createdConstraints)
+            
+            // Set node
+            self.nodes[attribute.signature] = node
+        }
+        
+        //
+        NSLayoutConstraint.activateConstraints(layoutConstraints)
+        
+        return layoutConstraints
+    }
+    
 }

        created using *EasyPeasy* for the current view. `Condition`
        closures will be evaluated again
     */
    public func easy_reload() { //TODO:
        
    }
    
    /**
        Clears all the constraints applied with EasyPeasy to the
        current `UIView`
     */
    public func easy_clear() { //TODO:
        
    }
    
}

/**
    Item protocol extension implementing some convenience properties
 */
internal extension Item {
    
    internal var nodes: [String:[Node]]? {
        get {
            if let nodes = objc_getAssociatedObject(self, &easy_attributesReference) as? [String:[Node]] {
                return nodes
            }
            return nil
        }
        
        set {

    
}

public extension Item {
    
    /**
