 	public func addToParent() -> SubviewSetupWizard {
 		
 		var wizard = self
-		wizard.needsToAddSetteeToParent = true
-		return wizard
-		
-	}
-	
-}
+		wizard.addingMethod = .add
+		return wizard
+		
+	}
+	
+	public func insertToParent(at index: Int) -> SubviewSetupWizard {
+		
+		var wizard = self
+		wizard.addingMethod = .insertAt({ index })
+		return wizard
+		
+	}
+	
+	public func insertToParent(at index: @escaping () -> Int?) -> SubviewSetupWizard {
+		
+		var wizard = self
+		wizard.addingMethod = .insertAt(index)
+		return wizard
+		
+	}
+	
+	public func insertToParent(above view: UIView) -> SubviewSetupWizard {
+		
+		var wizard = self
+		wizard.addingMethod = .insertAbove({ [weak view] in view })
+		return wizard
+		
+	}
+	
+	public func insertToParent(above view: @escaping () -> UIView?) -> SubviewSetupWizard {
+		
+		var wizard = self
+		wizard.addingMethod = .insertAbove(view)
+		return wizard
+		
+	}
+	
+	public func insertToParent(below view: UIView) -> SubviewSetupWizard {
+		
+		var wizard = self
+		wizard.addingMethod = .insertBelow({ [weak view] in view })
+		return wizard
+		
+	}
+	
+	public func insertToParent(below view: @escaping () -> UIView?) -> SubviewSetupWizard {
+		
+		var wizard = self
+		wizard.addingMethod = .insertBelow(view)
+		return wizard
+		
+	}
+	
+}

	private var orders: ConditionOrder
	private var zIndices: ConditionZIndex
	
	private var needsToAddSetteeToParent: Bool
	
	init(parent: ParentView, settee: UIView) {
		self.parentView = parent

	
	private func addSetteeToParent() {
		
		switch self.addingMethod {
		case .none:
			break
			
		case .add:
			self.parentView.addSubview(self.setteeView)
			
		case .insertAt(let index):
			if let index = index() {
				self.parentView.insertSubview(self.setteeView, at: index)
			} else {
				self.parentView.addSubview(self.setteeView)
			}
			
		case .insertAbove(let view):
			if let view = view() {
				self.parentView.insertSubview(self.setteeView, aboveSubview: view)
			} else {
				self.parentView.addSubview(self.setteeView)
			}
			
		case .insertBelow(let view):
			if let view = view() {
				self.parentView.insertSubview(self.setteeView, belowSubview: view)
			} else {
				self.parentView.addSubview(self.setteeView)
			}
		}
		
	}
