 	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 func addSetteeToParent() {
		
		if self.needsToAddSetteeToParent {
			self.parentView.addSubview(self.setteeView)
		}
		
	}

		self.layouts = [:]
		self.orders = [:]
		self.zIndices = [:]
		self.addingMethod = .none
	}
	
}
