         
     }
     
+    public final func applyConstraintFromSiblingView(attribute attr1: NSLayoutAttribute, toAttribute attr2:NSLayoutAttribute, ofView otherSiblingView: View) -> NSLayoutConstraint {
+
+        let c = self.prepareConstraintFromSiblingView(attribute: attr1, toAttribute: attr2, ofView: otherSiblingView)
+        return self.superview! + c
+    }
+    
     /// MARK: - Access Applied Constraint By Attributes From a specific View
     public final func accessAppliedConstraintBy(attribute attr: NSLayoutAttribute,  relation: NSLayoutRelation = .Equal)->NSLayoutConstraint? {
-        let c = self.prepareConstraintToSuperview(attribute: attr, attribute: attr, relation: relation)
+        let c = self.prepareConstraintToSuperview(attribute: attr, relation: relation)
         let appliedConstraint = self.superview?.constraints.containsApplied(constraint: c)
         return appliedConstraint
     }

extension View {
    
    /// Generalized public constraint methods for views
    // For operator +<=,  +==,  +>=,
    public final func prepareConstraintToSuperview(attribute attr1: NSLayoutAttribute, attribute attr2:NSLayoutAttribute, relation: NSLayoutRelation = .Equal) -> NSLayoutConstraint! {
        assert(superview != nil, "You should have addSubView on any other its called's Superview \(self)");
        return View.prepareConstraint(self, attribute: attr1, secondView: superview, attribute:attr2, relation: relation)
    }
    
    // For operator +== , =<= , =>=
    // For operator +*==, +*>= , +*<=
    public final func prepareConstraintToSuperview(attribute attr1: NSLayoutAttribute,  relation: NSLayoutRelation = .Equal, multiplier:CGFloat = 1.0, constant:CGFloat = 0.0) -> NSLayoutConstraint! {
        assert(superview != nil, "You should have addSubView on any other its called's Superview \(self)");
        
        let preparePinConastrain : NSLayoutConstraint = View.prepareConstraint(self, attribute: attr1, secondView: superview, attribute:attr1, relation: relation, multiplier:multiplier, constant:constant)
        return preparePinConastrain
    }
    
    /// Prepare constraint of one sibling view to other sibling view and add it into its superview view.
    // For operator <+<=>,  <+==>, <+>=>
    // <+*<=>, <+*==>, <+*>=>
    public final func prepareConstraintFromSiblingView(attribute attr1: NSLayoutAttribute, toAttribute attr2:NSLayoutAttribute, ofView otherSiblingView: View, relation:NSLayoutRelation = .Equal, multiplier:CGFloat = 1.0, constant:CGFloat = 0.0 ) -> NSLayoutConstraint! {
        assert(((NSSet(array: [superview!,otherSiblingView.superview!])).count == 1), "All the sibling views must belong to same superview")
        

        
        let appliedConstraint = self.constraints.containsApplied(constraint: c)
        
        if (appliedConstraint != nil) {
            appliedConstraint!.constant = c.constant
            return appliedConstraint!
