 
 extension LayoutPosition {
 	
+	public static func makeAbsolute(initialFrame: LayoutFrame, margin: CGFloat, direction: LayoutPosition.Sequential.Direction) -> LayoutPosition {
+		switch direction {
+		case .horizontal:
+			return .sequential(.horizontallyEqualSizedAbsolute(initial: initialFrame, margin: margin))
+			
+		case .vertical:
+			return .sequential(.verticallyEqualSizedAbsolute(initial: initialFrame, margin: margin))
+		}
+	}
+	
 	public static func makeAbsolute(initialFrame: CGRect, margin: CGFloat, direction: LayoutPosition.Sequential.Direction) -> LayoutPosition {
-		switch direction {
-		case .horizontal:
-			return .sequential(.horizontallyEqualSizedAbsolute(initial: initialFrame, margin: margin))
-			
-		case .vertical:
-			return .sequential(.verticallyEqualSizedAbsolute(initial: initialFrame, margin: margin))
+		let layoutFrame = LayoutFrame(reference: .topLeft, origin: initialFrame.origin, size: initialFrame.size)
+		return makeAbsolute(initialFrame: layoutFrame, margin: margin, direction: direction)
+	}
+	
+	public static func makeRelative(initialFrame: LayoutFrame, margin: CGFloat, direction: LayoutPosition.Sequential.Direction) -> LayoutPosition {
+		switch direction {
+		case .horizontal:
+			return .sequential(.horizontallyEqualSizedRelative(initial: initialFrame, margin: margin))
+			
+		case .vertical:
+			return .sequential(.verticallyEqualSizedRelative(initial: initialFrame, margin: margin))
 		}
 	}
 	
 	public static func makeRelative(initialFrame: CGRect, margin: CGFloat, direction: LayoutPosition.Sequential.Direction) -> LayoutPosition {
-		switch direction {
-		case .horizontal:
-			return .sequential(.horizontallyEqualSizedRelative(initial: initialFrame, margin: margin))
-			
-		case .vertical:
-			return .sequential(.verticallyEqualSizedRelative(initial: initialFrame, margin: margin))
-		}
+		let layoutFrame = LayoutFrame(reference: .topLeft, origin: initialFrame.origin, size: initialFrame.size)
+		return makeRelative(initialFrame: layoutFrame, margin: margin, direction: direction)
 	}
 	
 	public static func makeCustom(initialFrame: @escaping Sequential.SizeToFrame, restFrame: @escaping Sequential.PreviousFrameAndSizeToFrame) -> LayoutPosition {


public enum LayoutPosition {
	
	public enum OffsetOrigin {
		
		case topLeft

	
	public enum Sequential {
		
		public typealias SizeToFrame = (CGSize) -> LayoutFrame
		public typealias PreviousFrameAndSizeToFrame = (_ previousFrame: CGRect, _ boundSize: CGSize) -> LayoutFrame
		
		public typealias FitSizeBoundSizeToFrame = (_ fitSize: CGSize, _ boundSize: CGSize) -> LayoutFrame
		public typealias PreviousFrameFitSizeAndSizeToFrame = (_ previousFrame: CGRect, _ fitSize: CGSize, _ boundSize: CGSize) -> LayoutFrame
		
		case horizontallyEqualSizedAbsolute(initial: LayoutFrame, margin: CGFloat)
		case verticallyEqualSizedAbsolute(initial: LayoutFrame, margin: CGFloat)
		
		case horizontallyEqualSizedRelative(initial: LayoutFrame, margin: CGFloat)
		case verticallyEqualSizedRelative(initial: LayoutFrame, margin: CGFloat)
		
		case customByFrame(initial: SizeToFrame, rest: PreviousFrameAndSizeToFrame)
		
