     }
 
     private func rulesContainSize(currentSize: SizeClassPair) -> [(UIView, SizeClassPair, LayoutParam)] {
-        return hierarchy2.filter({(_, size, _) in return currentSize.contains(size)})
+        return hierarchy.filter({(_, size, _) in return currentSize.contains(size)})
     }
     private func rulesContainedBySize(currentSize: SizeClassPair) -> [(UIView, SizeClassPair, LayoutParam)] {
-        return hierarchy2.filter({(_, size, _) in return size.contains(currentSize)})
+        return hierarchy.filter({(_, size, _) in return size.contains(currentSize)})
     }
     
-    private func makeConstraintsWithLayoutParam(param: LayoutParam, view:UIView, size:SizeClassPair) -> [NSLayoutConstraint] {
+    private func constraintsWithLayoutParam(param: LayoutParam, view:UIView, size:SizeClassPair) -> [NSLayoutConstraint] {
         var result:[NSLayoutConstraint] = []
 
         for key in param.keys {

            view.removeFromSuperview()
        }

        
        for (view, _, param) in rulesContainSize(targetSize) {
            if view.superview == nil {
                self.owner.addSubview(view)
            }
            let constraints:[NSLayoutConstraint] = makeConstraintsWithLayoutParam(param, view: view, size: targetSize)
            for constraint in constraints {
                if constraint.secondItem == nil {
                    view.addConstraint(constraint)

                    constant: param[key]!)
            } else {
                if (key == .Top && type == .Vertical) || (key == .Left && type == .Horizontal) {
                    let rule:Rule? = rulesContainedBySize(size).last
                    var previousView:UIView? = nil
                    if rule == nil || rule!.0 == view {
                        previousView = owner
