 	
 	public enum Sequential {
 		
+		public typealias SizeToFrame = (CGSize) -> CGRect
+		public typealias PreviousFrameAndSizeToFrame = (_ previousFrame: CGRect, _ boundSize: CGSize) -> CGRect
+		
 		case horizontallyEqualSizedAbsolute(initial: CGRect, margin: CGFloat)
 		case verticallyEqualSizedAbsolute(initial: CGRect, margin: CGFloat)
 		
 		case horizontallyEqualSizedRelative(initial: CGRect, margin: CGFloat)
 		case verticallyEqualSizedRelative(initial: CGRect, margin: CGFloat)
 		
-		case customByFrame(
-			initial: (CGSize) -> CGRect,
-			rest: (_ previousFrame: CGRect, _ boundSize: CGSize)
-			-> CGRect)
+		case customByFrame(initial: SizeToFrame, rest: PreviousFrameAndSizeToFrame)
 		
 	}
 	
 	public enum Matrical {
 		
-		case rowByRowEqualSizedAbsolute(initial: CGRect, colMargin: CGFloat, rowMargin: CGFloat)
-		case colByColEqualSizedAbsolute(initial: CGRect, colMargin: CGFloat, rowMargin: CGFloat)
-		
-		case rowByRowEqualSizedRelative(initial: CGRect, colMargin: CGFloat, rowMargin: CGFloat)
-		case colByColEqualSizedRelative(initial: CGRect, colMargin: CGFloat, rowMargin: CGFloat)
-		
-		case customByFrame(
-			initial: (CGSize) -> CGRect,
-			firstInRow: (_ previousColFrame: CGRect, _ boundSize: CGSize) -> CGRect,
-			firstInCol: (_ previousRowFrame: CGRect, _ boundSize: CGSize) -> CGRect,
-			rest: (_ previousColFrame: CGRect, _ previousRowFrame: CGRect, _ boundSize: CGSize)
-			-> CGRect)
+		public typealias SizeToFrame = (CGSize) -> CGRect
+		public typealias PreviousColFrameAndSizeToFrame = (_ previousColFrame: CGRect, _ boundSize: CGSize) -> CGRect
+		public typealias PreviousRowFrameAndSizeToFrame = (_ previousRowFrame: CGRect, _ boundSize: CGSize) -> CGRect
+		public typealias PreviousRowColFrameAndSizeToFrame = (_ previousRowFrame: CGRect, _ previousColFrame: CGRect, _ boundSize: CGSize) -> CGRect
+		
+		case horizontallyEqualSizedAbsolute(initial: CGRect, margin: CGVector)
+		case verticallyEqualSizedAbsolute(initial: CGRect, margin: CGVector)
+		
+		case horizontallyEqualSizedRelative(initial: CGRect, margin: CGVector)
+		case verticallyEqualSizedRelative(initial: CGRect, margin: CGVector)
+		
+		case customByFrame(initial: SizeToFrame, firstInCol: PreviousColFrameAndSizeToFrame, firstInRow: PreviousRowFrameAndSizeToFrame, rest: PreviousRowColFrameAndSizeToFrame)
 		
 	}
 	

		
		case offset(value: UIOffset, from: OffsetOrigin, size: CGSize)
		
		case customByFrame(frame: (CGSize) -> CGRect)
		case customByOriginSize(origin: (CGSize) -> CGPoint, size: (CGSize) -> CGSize)
		case customByXYWidthHeight(x: (CGSize) -> CGFloat, y: (CGSize) -> CGFloat, width: (CGSize) -> CGFloat, height: (CGSize) -> CGFloat)
		
		@available(*, deprecated: 0.6, message: "Use customByFrame, customByOriginSize or customByXYWidthHeight instead")
		case custom((CGSize) -> CGRect)

	
	public enum Individual {
		
		public typealias SizeToFrame = (CGSize) -> CGRect
		public typealias SizeToPoint = (CGSize) -> CGPoint
		public typealias SizeToSize = (CGSize) -> CGSize
		public typealias SizeToFloat = (CGSize) -> CGFloat
		
		case absolute(CGRect)
		case relative(CGRect)
		
