diff --git a/C4/Core/C4Color.swift b/C4/Core/Color.swift
similarity index 59%
rename from C4/Core/C4Color.swift
rename to C4/Core/Color.swift
index 94bb2b4a..29718804 100644
--- a/C4/Core/C4Color.swift
+++ b/C4/Core/Color.swift
@@ -20,67 +20,67 @@
 import UIKit
 import CoreGraphics
 
-/// A C4Color object whose RGB value is 0, 0, 0 and whose alpha value is 1.0.
-public let black     = C4Color(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.33, 0.33, 0.33 and whose alpha value is 1.0.
-public let darkGray  = C4Color(red: 1.0/3.0, green: 1.0/3.0, blue: 1.0/3.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.66, 0.66, 0.66 and whose alpha value is 1.0.
-public let lightGray = C4Color(red: 2.0/3.0, green: 2.0/3.0, blue: 2.0/3.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 1.0, 1.0, 1.0 and whose alpha value is 1.0.
-public let white     = C4Color(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.5, 0.5, 0.5 and whose alpha value is 1.0.
-public let gray      = C4Color(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
-/// A C4Color object whose RGB value is 1.0, 0.0, 0.0 and whose alpha value is 1.0.
-public let red       = C4Color(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.0, 1.0, 0.0 and whose alpha value is 1.0.
-public let green     = C4Color(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.0, 0.0, 1.0 and whose alpha value is 1.0.
-public let blue      = C4Color(red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.0, 1.0, 1.0 and whose alpha value is 1.0.
-public let cyan      = C4Color(red: 0.0, green: 1.0, blue: 1.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 1.0, 1.0, 0.0 and whose alpha value is 1.0.
-public let yellow    = C4Color(red: 1.0, green: 1.0, blue: 0.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 1.0, 0.0, 1.0 and whose alpha value is 1.0.
-public let magenta   = C4Color(red: 1.0, green: 0.0, blue: 1.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 1.0, 0.5, 0.0 and whose alpha value is 1.0.
-public let orange    = C4Color(red: 1.0, green: 0.5, blue: 0.0, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.5, 0.0, 0.5 and whose alpha value is 1.0.
-public let purple    = C4Color(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.6, 0.4, 0.2 and whose alpha value is 1.0.
-public let brown     = C4Color(red: 0.6, green: 0.4, blue: 0.2, alpha: 1.0)
-/// A C4Color object whose RGB value is 0.0, 0.0, 0.0 and whose alpha value is 0.0.
-public let clear     = C4Color(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
+/// A Color object whose RGB value is 0, 0, 0 and whose alpha value is 1.0.
+public let black     = Color(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
+/// A Color object whose RGB value is 0.33, 0.33, 0.33 and whose alpha value is 1.0.
+public let darkGray  = Color(red: 1.0/3.0, green: 1.0/3.0, blue: 1.0/3.0, alpha: 1.0)
+/// A Color object whose RGB value is 0.66, 0.66, 0.66 and whose alpha value is 1.0.
+public let lightGray = Color(red: 2.0/3.0, green: 2.0/3.0, blue: 2.0/3.0, alpha: 1.0)
+/// A Color object whose RGB value is 1.0, 1.0, 1.0 and whose alpha value is 1.0.
+public let white     = Color(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
+/// A Color object whose RGB value is 0.5, 0.5, 0.5 and whose alpha value is 1.0.
+public let gray      = Color(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
+/// A Color object whose RGB value is 1.0, 0.0, 0.0 and whose alpha value is 1.0.
+public let red       = Color(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
+/// A Color object whose RGB value is 0.0, 1.0, 0.0 and whose alpha value is 1.0.
+public let green     = Color(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0)
+/// A Color object whose RGB value is 0.0, 0.0, 1.0 and whose alpha value is 1.0.
+public let blue      = Color(red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0)
+/// A Color object whose RGB value is 0.0, 1.0, 1.0 and whose alpha value is 1.0.
+public let cyan      = Color(red: 0.0, green: 1.0, blue: 1.0, alpha: 1.0)
+/// A Color object whose RGB value is 1.0, 1.0, 0.0 and whose alpha value is 1.0.
+public let yellow    = Color(red: 1.0, green: 1.0, blue: 0.0, alpha: 1.0)
+/// A Color object whose RGB value is 1.0, 0.0, 1.0 and whose alpha value is 1.0.
+public let magenta   = Color(red: 1.0, green: 0.0, blue: 1.0, alpha: 1.0)
+/// A Color object whose RGB value is 1.0, 0.5, 0.0 and whose alpha value is 1.0.
+public let orange    = Color(red: 1.0, green: 0.5, blue: 0.0, alpha: 1.0)
+/// A Color object whose RGB value is 0.5, 0.0, 0.5 and whose alpha value is 1.0.
+public let purple    = Color(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)
+/// A Color object whose RGB value is 0.6, 0.4, 0.2 and whose alpha value is 1.0.
+public let brown     = Color(red: 0.6, green: 0.4, blue: 0.2, alpha: 1.0)
+/// A Color object whose RGB value is 0.0, 0.0, 0.0 and whose alpha value is 0.0.
+public let clear     = Color(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
 
-///A C4Color object whose RGB value is 1.0, 0.0, 0.475 and whose alpha value is 1.0.
-public let C4Pink    = C4Color(red: 1.0, green: 0.0, blue: 0.475, alpha: 1.0)
-///A C4Color object whose RGB value is 0.098, 0.271, 1.0 and whose alpha value is 1.0.
-public let C4Blue    = C4Color(red: 0.098, green: 0.271, blue: 1.0, alpha: 1.0)
-///A C4Color object whose RGB value is 0.0, 0.0, 0.541 and whose alpha value is 1.0.
-public let C4Purple  = C4Color(red: 0.0, green: 0.0, blue: 0.541, alpha: 1.0)
-///A C4Color object whose RGB value is 0.98, 0.98, 0.98 and whose alpha value is 1.0.
-public let C4Grey    = C4Color(red: 0.98, green: 0.98, blue: 0.98, alpha: 1.0)
+///A Color object whose RGB value is 1.0, 0.0, 0.475 and whose alpha value is 1.0.
+public let C4Pink    = Color(red: 1.0, green: 0.0, blue: 0.475, alpha: 1.0)
+///A Color object whose RGB value is 0.098, 0.271, 1.0 and whose alpha value is 1.0.
+public let C4Blue    = Color(red: 0.098, green: 0.271, blue: 1.0, alpha: 1.0)
+///A Color object whose RGB value is 0.0, 0.0, 0.541 and whose alpha value is 1.0.
+public let C4Purple  = Color(red: 0.0, green: 0.0, blue: 0.541, alpha: 1.0)
+///A Color object whose RGB value is 0.98, 0.98, 0.98 and whose alpha value is 1.0.
+public let C4Grey    = Color(red: 0.98, green: 0.98, blue: 0.98, alpha: 1.0)
 
-/// This document describes the C4Color object which represents color and sometimes opacity (alpha value). You can use C4Color
-/// objects to store color data, and pass them between various C4 objects such as C4Shape, C4Image, etc.
+/// This document describes the Color object which represents color and sometimes opacity (alpha value). You can use Color
+/// objects to store color data, and pass them between various C4 objects such as Shape, Image, etc.
 ///
-/// C4Color internally wraps a CGColorSpaceRef called colorSpace, as well as a CGColorRef. From these two objects C4Color is able to
-/// properly maintain color data and convert it to / from other color objects such as UIColor, CIColor, C4Color, etc.
-public class C4Color {
+/// Color internally wraps a CGColorSpaceRef called colorSpace, as well as a CGColorRef. From these two objects Color is able to
+/// properly maintain color data and convert it to / from other color objects such as UIColor, CIColor, Color, etc.
+public class Color {
     internal var colorSpace: CGColorSpaceRef
     internal var internalColor: CGColorRef
 
     /// Initializes and returns a new color object. Defaults to black with 0 opacity (i.e. clear).
     /// ````
-    /// let c = C4Color()
+    /// let c = Color()
     /// ````
     public init() {
         colorSpace = CGColorSpaceCreateDeviceRGB()!
         internalColor = CGColorCreate(colorSpace, [0, 0, 0, 0])!
     }
 
-    /// Initializes and returns a new C4Color object based on specified color values.
+    /// Initializes and returns a new Color object based on specified color values.
     /// ````
-    /// let c = C4Color(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
+    /// let c = Color(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
     /// ````
     /// - parameter red:   The red value for the new color [0.0 ... 1.0]
     /// - parameter green: The green value for the new color [0.0 ... 1.0]
@@ -91,37 +91,37 @@ public class C4Color {
         internalColor = CGColorCreate(colorSpace, [CGFloat(red), CGFloat(green), CGFloat(blue), CGFloat(alpha)])!
     }
 
-    /// Initializes and returns a new C4Color object based on a provided CGColor object.
+    /// Initializes and returns a new Color object based on a provided CGColor object.
     /// ````
-    /// let c = C4Color(UIColor.redColor().CGColor)
+    /// let c = Color(UIColor.redColor().CGColor)
     /// ````
-    /// - parameter color: A CGColor object that will be used to create a new C4Color.
+    /// - parameter color: A CGColor object that will be used to create a new Color.
     public init(_ color: CGColorRef) {
         colorSpace = CGColorSpaceCreateDeviceRGB()!
         internalColor = color
     }
 
-    /// Initializes and returns a new C4Color object based on a provided UIColor object.
+    /// Initializes and returns a new Color object based on a provided UIColor object.
     /// ````
-    /// let c = C4Color(UIColor.redColor())
+    /// let c = Color(UIColor.redColor())
     /// ````
-    /// - parameter color: A UIColor object whose components will be extrated to create a new C4Color.
+    /// - parameter color: A UIColor object whose components will be extrated to create a new Color.
     public convenience init(_ color: UIColor) {
         self.init(color.CGColor)
     }
 
-    ///  Initializes and returns a new C4Color object made up of a repeating pattern based on a specified C4Image.
+    ///  Initializes and returns a new Color object made up of a repeating pattern based on a specified Image.
     ///  ````
-    ///  let p = C4Color("pattern")
+    ///  let p = Color("pattern")
     ///  ````
     ///  - parameter pattern: a String, the name of an image to use as a pattern.
     public convenience init(_ pattern: String) {
         self.init(UIColor(patternImage: UIImage(named: pattern)!))
     }
 
-    /// Initializes and returns a new C4Color object based on specified color values.
+    /// Initializes and returns a new Color object based on specified color values.
     /// ````
-    /// let c = C4Color(red: 255, green: 0, blue: 0, alpha: 255)
+    /// let c = Color(red: 255, green: 0, blue: 0, alpha: 255)
     /// ````
     /// - parameter red:   The red value for the new color [0 ... 255]
     /// - parameter green: The green value for the new color [0 ... 255]
@@ -131,10 +131,10 @@ public class C4Color {
         self.init(red: Double(red) / 255.0, green: Double(green) / 255.0, blue: Double(blue) / 255.0, alpha: alpha)
     }
 
-    /// Initializes and returns a new C4Color object based on a specified hex value.
+    /// Initializes and returns a new Color object based on a specified hex value.
     /// Remember to precede with `0x` and include the alpha component at the end (i.e. 7th + 8th characters)
     /// ````
-    /// let c = C4Color(0xFF0000FF)
+    /// let c = Color(0xFF0000FF)
     /// ````
     /// - parameter hexValue: A color value expressed in hexadecimal.
     public convenience init(_ hexValue: UInt32) {
@@ -170,7 +170,7 @@ public class C4Color {
 
     /// The value of the red component of the current color, [0.0 ... 1.0]
     /// ````
-    /// let c = C4Color()
+    /// let c = Color()
     /// let redVal = c.red
     /// ````
     /// - returns: Double value in the range [0.0 ... 1.0]
@@ -185,7 +185,7 @@ public class C4Color {
 
     /// The value of the green component of the current color
     /// ````
-    /// let c = C4Color()
+    /// let c = Color()
     ///  let greenVal = c.green
     /// ````
     /// - returns: Double value in the range [0.0 ... 1.0]
@@ -200,7 +200,7 @@ public class C4Color {
 
     /// The value of the blue component of the current color
     /// ````
-    /// let c = C4Color()
+    /// let c = Color()
     /// let blueVal = c.blue
     /// ````
     /// - returns: Double value in the range [0.0 ... 1.0]
@@ -215,7 +215,7 @@ public class C4Color {
 
     /// The value of the alpha component of the current color.
     /// ````
-    /// let c = C4Color()
+    /// let c = Color()
     /// let alphaVal = c.alpha
     /// ````
     /// - returns: Double value in the range [0.0 ... 1.0]
@@ -230,7 +230,7 @@ public class C4Color {
 
     /// A CGColor representation of the current color.
     /// ````
-    /// let c = C4Color()
+    /// let c = Color()
     /// let cg = c.CGColor
     /// ````
     /// - returns: CGColorRef object that matches the color's `internalColor` property
@@ -246,25 +246,25 @@ public class C4Color {
     /// ````
     /// - parameter alpha: The opacity value of the new UIColor object.
     /// - returns: A new color with a modified alpha component.
-    public func colorWithAlpha(alpha: Double) -> C4Color {
-        return C4Color(red: red, green: green, blue: blue, alpha: alpha)
+    public func colorWithAlpha(alpha: Double) -> Color {
+        return Color(red: red, green: green, blue: blue, alpha: alpha)
     }
 }
 
 // MARK: - Casting to UIColor and CIColor
 
 public extension UIColor {
-    /// Initializes a UIColor object from a C4Color object.
+    /// Initializes a UIColor object from a Color object.
     /// - parameter color: The C4 color object.
-    public convenience init?(_ color: C4Color) {
+    public convenience init?(_ color: Color) {
         self.init(CGColor: color.CGColor)
     }
 }
 
 public extension CIColor {
-    /// Initializes a CIColor object from a C4Color object.
+    /// Initializes a CIColor object from a Color object.
     /// - parameter color: The C4 color object.
-    public convenience init(_ color: C4Color) {
+    public convenience init(_ color: Color) {
         self.init(CGColor: color.CGColor)
     }
 }
diff --git a/C4/Core/C4EventSource.swift b/C4/Core/EventSource.swift
similarity index 98%
rename from C4/Core/C4EventSource.swift
rename to C4/Core/EventSource.swift
index e0ead4eb..5399ef8b 100644
--- a/C4/Core/C4EventSource.swift
+++ b/C4/Core/EventSource.swift
@@ -20,7 +20,7 @@
 import Foundation
 
 ///This protocol defines 3 required methods for objects to post and listen for notifications, as well as cancel.
-public protocol C4EventSource {
+public protocol EventSource {
 
     /// Posts a new notification originating from the receiver.
     ///
@@ -45,7 +45,7 @@ public protocol C4EventSource {
 }
 
 /// This extension allows any NSObject to post and listen for events in the same way as C4 objects.
-extension NSObject : C4EventSource {
+extension NSObject : EventSource {
     /// Posts a new notification originating from the receiver.
     ///
     /// ````
diff --git a/C4/Core/C4Foundation.swift b/C4/Core/Foundation.swift
similarity index 96%
rename from C4/Core/C4Foundation.swift
rename to C4/Core/Foundation.swift
index a9d3265a..94d723c6 100644
--- a/C4/Core/C4Foundation.swift
+++ b/C4/Core/Foundation.swift
@@ -61,11 +61,11 @@ public func CGRectMakeFromPoints(points: [CGPoint]) -> CGRect {
 ///
 /// - parameter delay:  The amount of time in seconds to wait before executing the block of code.
 /// - parameter action: A block of code to perform after the delay.
-public func delay(delay: Double, action: ()->()) {
+public func wait(seconds: Double, action: ()->()) {
     dispatch_after(
         dispatch_time(
             DISPATCH_TIME_NOW,
-            Int64(delay * Double(NSEC_PER_SEC))
+            Int64(seconds * Double(NSEC_PER_SEC))
         ),
         dispatch_get_main_queue(), action)
 }
diff --git a/C4/Core/C4Math.swift b/C4/Core/Math.swift
similarity index 100%
rename from C4/Core/C4Math.swift
rename to C4/Core/Math.swift
diff --git a/C4/Core/C4Path.swift b/C4/Core/Path.swift
similarity index 81%
rename from C4/Core/C4Path.swift
rename to C4/Core/Path.swift
index 56a75afa..29f13044 100644
--- a/C4/Core/C4Path.swift
+++ b/C4/Core/Path.swift
@@ -34,18 +34,18 @@ public enum FillRule {
 }
 
 
-/// A C4Path is a sequence of geometric segments which can be straight lines or curves.
+/// A Path is a sequence of geometric segments which can be straight lines or curves.
 @IBDesignable
-public class C4Path: Equatable {
+public class Path: Equatable {
     internal var internalPath: CGMutablePathRef = CGPathCreateMutable()
 
-    ///  Initializes an empty C4Path.
+    ///  Initializes an empty Path.
     public init() {
         internalPath = CGPathCreateMutable()
         CGPathMoveToPoint(internalPath, nil, 0, 0)
     }
 
-    ///  Initializes a new C4Path from an existing CGPathRef.
+    ///  Initializes a new Path from an existing CGPathRef.
     ///
     ///  - parameter path: a previously initialized CGPathRef
     public init(path: CGPathRef) {
@@ -62,8 +62,8 @@ public class C4Path: Equatable {
     /// in the path, *not* including control points for Bézier cubic and quadratic curves. If the path is empty, then
     /// return `CGRectNull`.
     /// - returns: A rectangle that represents the path bounding box of the specified path
-    public func boundingBox() -> C4Rect {
-        return C4Rect(CGPathGetPathBoundingBox(internalPath))
+    public func boundingBox() -> Rect {
+        return Rect(CGPathGetPathBoundingBox(internalPath))
     }
 
     /// Return true if `point` is contained in `path`; false otherwise. A point is contained in a path if it is inside the
@@ -73,14 +73,14 @@ public class C4Path: Equatable {
     /// - parameter point: The point to test.
     /// - parameter fillRule: The fill rule to use when testing for containment.
     /// - returns: `true` if `point` is inside the path, `false` otherwise.
-    public func containsPoint(point: C4Point, fillRule: FillRule = .NonZero) -> Bool {
+    public func containsPoint(point: Point, fillRule: FillRule = .NonZero) -> Bool {
         return CGPathContainsPoint(internalPath, nil, CGPoint(point), fillRule == .EvenOdd)
     }
 
     /// Create a copy of the path
     /// - returns: A new copy of the specified path.
-    public func copy() -> C4Path {
-        return C4Path(path: CGPathCreateMutableCopy(internalPath)!)
+    public func copy() -> Path {
+        return Path(path: CGPathCreateMutableCopy(internalPath)!)
     }
 
     /// A CGPathRef representation of the receiver's path.
@@ -95,16 +95,16 @@ public class C4Path: Equatable {
 /// - parameter left: the first path to compare
 /// - parameter right: the second path to compare
 /// - returns: a boolean, `true` if the patrhs are equal, otherwise `false`
-public func == (left: C4Path, right: C4Path) -> Bool {
+public func == (left: Path, right: Path) -> Bool {
     return CGPathEqualToPath(left.internalPath, right.internalPath)
 }
 
-extension C4Path {
+extension Path {
 
     /// Return the current point of the current subpath.
-    public var currentPoint: C4Point {
+    public var currentPoint: Point {
         get {
-            return C4Point(CGPathGetCurrentPoint(internalPath))
+            return Point(CGPathGetCurrentPoint(internalPath))
         }
         set(point) {
             moveToPoint(point)
@@ -112,31 +112,31 @@ extension C4Path {
     }
 
     /// Move the current point of the current subpath.
-    /// - parameter point: A C4Point
-    public func moveToPoint(point: C4Point) {
+    /// - parameter point: A Point
+    public func moveToPoint(point: Point) {
         CGPathMoveToPoint(internalPath, nil, CGFloat(point.x), CGFloat(point.y))
     }
 
     /// Append a straight-line segment fron the current point to `point` and move the current point to `point`.
-    /// - parameter point: A C4Point
-    public func addLineToPoint(point: C4Point) {
+    /// - parameter point: A Point
+    public func addLineToPoint(point: Point) {
         CGPathAddLineToPoint(internalPath, nil, CGFloat(point.x), CGFloat(point.y))
     }
 
     /// Append a quadratic curve from the current point to `point` with control point `control` and move the current
     /// point to `point`.
-    /// - parameter control: A C4Point used to shape the curve
-    /// - parameter point: A C4Point
-    public func addQuadCurveToPoint(control control: C4Point, point: C4Point) {
+    /// - parameter control: A Point used to shape the curve
+    /// - parameter point: A Point
+    public func addQuadCurveToPoint(control control: Point, point: Point) {
         CGPathAddQuadCurveToPoint(internalPath, nil, CGFloat(control.x), CGFloat(control.y), CGFloat(point.x), CGFloat(point.y))
     }
 
     /// Append a cubic Bézier curve from the current point to `point` with control points `control1` and `control2`
     /// and move the current point to `point`.
-    /// - parameter control1: A C4Point used to shape the curve
-    /// - parameter control2: A C4Point used to shape the curve
-    /// - parameter point: A C4Point
-    public func addCurveToPoint(control1: C4Point, control2: C4Point, point: C4Point) {
+    /// - parameter control1: A Point used to shape the curve
+    /// - parameter control2: A Point used to shape the curve
+    /// - parameter point: A Point
+    public func addCurveToPoint(control1: Point, control2: Point, point: Point) {
         CGPathAddCurveToPoint(internalPath, nil, CGFloat(control1.x), CGFloat(control1.y), CGFloat(control2.x), CGFloat(control2.y), CGFloat(point.x), CGFloat(point.y))
     }
 
@@ -146,8 +146,8 @@ extension C4Path {
     }
 
     /// Add a rectangle to the path.
-    /// - parameter rect: a C4Rect to add to the path
-    public func addRect(rect: C4Rect) {
+    /// - parameter rect: a Rect to add to the path
+    public func addRect(rect: Rect) {
         CGPathAddRect(internalPath, nil, CGRect(rect))
     }
 
@@ -155,10 +155,10 @@ extension C4Path {
     /// of one-quarter of an ellipse with axes equal to `cornerWidth` and `cornerHeight`. The rounded rectangle forms a
     /// complete subpath of the path --- that is, it begins with a "move to" and ends with a "close subpath" --- oriented
     /// in the clockwise direction.
-    /// - parameter rect: a C4Rect to add to the path
+    /// - parameter rect: a Rect to add to the path
     /// - parameter cornerWidth: the width of the shape's rounded corners
     /// - parameter cornerHeight: the width of the shape's rounded corners
-    public func addRoundedRect(rect: C4Rect, cornerWidth: Double, cornerHeight: Double) {
+    public func addRoundedRect(rect: Rect, cornerWidth: Double, cornerHeight: Double) {
         CGPathAddRoundedRect(internalPath, nil, CGRect(rect), CGFloat(cornerWidth), CGFloat(cornerHeight))
     }
 
@@ -167,8 +167,8 @@ extension C4Path {
     /// one-half the width (equivalently, one-half the height) of `rect`. If `rect` is rectangular, then the major- and
     /// minor-axes will be the width and height of `rect`. The ellipse forms a complete subpath --- that is, it begins with
     /// a "move to" and ends with a "close subpath" --- oriented in the clockwise direction.
-    /// - parameter rect: a C4Rect into which an ellipse will be created and added to the path
-    public func addEllipse(rect: C4Rect) {
+    /// - parameter rect: a Rect into which an ellipse will be created and added to the path
+    public func addEllipse(rect: Rect) {
         CGPathAddEllipseInRect(internalPath, nil, CGRect(rect))
     }
 
@@ -181,7 +181,7 @@ extension C4Path {
     ///                         x-axis.
     /// - parameter delta:      The angle between `startAngle` and the second endpoint of the arc, in radians. If `delta' is positive,
     ///                         then the arc is drawn counter-clockwise; if negative, clockwise.
-    public func addRelativeArc(center: C4Point, radius: Double, startAngle: Double, delta: Double) {
+    public func addRelativeArc(center: Point, radius: Double, startAngle: Double, delta: Double) {
         CGPathAddRelativeArc(internalPath, nil, CGFloat(center.x), CGFloat(center.y), CGFloat(radius), CGFloat(startAngle), CGFloat(delta))
     }
 
@@ -202,7 +202,7 @@ extension C4Path {
     /// - parameter startAngle: The angle to the first endpoint of the arc in radians.
     /// - parameter endAngle:   The angle to the second endpoint of the arc.
     /// - parameter clockwise:  If true the arc is drawn clockwise.
-    public func addArc(center: C4Point, radius: Double, startAngle: Double, endAngle: Double, clockwise: Bool) {
+    public func addArc(center: Point, radius: Double, startAngle: Double, endAngle: Double, clockwise: Bool) {
         CGPathAddArc(internalPath, nil, CGFloat(center.x), CGFloat(center.y), CGFloat(radius), CGFloat(startAngle), CGFloat(endAngle), clockwise)
     }
 
@@ -212,21 +212,21 @@ extension C4Path {
     /// - parameter point1: the begin point of the arc
     /// - parameter point2: the end point of the arc
     /// - parameter radius: the radius of the arc
-    public func addArcToPoint(point1: C4Point, point2: C4Point, radius: Double) {
+    public func addArcToPoint(point1: Point, point2: Point, radius: Double) {
         CGPathAddArcToPoint(internalPath, nil, CGFloat(point1.x), CGFloat(point1.y), CGFloat(point2.x), CGFloat(point2.y), CGFloat(radius))
     }
 
     /// Append a path.
     ///
-    /// - parameter path:      A new C4Path that is added to the end of the receiver.
-    public func addPath(path: C4Path) {
+    /// - parameter path:      A new Path that is added to the end of the receiver.
+    public func addPath(path: Path) {
         CGPathAddPath(internalPath, nil, path.internalPath)
     }
 
     /// Transform a path.
     ///
-    /// - parameter transform: A C4Transform to be applied to the receiver.
-    public func transform(transform: C4Transform) {
+    /// - parameter transform: A Transform to be applied to the receiver.
+    public func transform(transform: Transform) {
         var t = transform.affineTransform
         internalPath = CGPathCreateMutableCopyByTransformingPath(internalPath, &t)!
     }
diff --git a/C4/Core/C4Point.swift b/C4/Core/Point.swift
similarity index 70%
rename from C4/Core/C4Point.swift
rename to C4/Core/Point.swift
index a45a9744..6bb8cda9 100644
--- a/C4/Core/C4Point.swift
+++ b/C4/Core/Point.swift
@@ -20,7 +20,7 @@
 import CoreGraphics
 
 ///A structure that contains a point in a two-dimensional coordinate system.
-public struct C4Point: Equatable, CustomStringConvertible {
+public struct Point: Equatable, CustomStringConvertible {
 
     ///The x value of the coordinate.
     public var x: Double = 0
@@ -31,7 +31,7 @@ public struct C4Point: Equatable, CustomStringConvertible {
     ///  Initializes a new point with the coordinates {0,0}
     ///
     ///  ````
-    ///  let p = C4Point()
+    ///  let p = Point()
     ///  ````
     public init() {
     }
@@ -39,7 +39,7 @@ public struct C4Point: Equatable, CustomStringConvertible {
     ///  Initializes a new point with the specified coordinates {x,y}
     ///
     ///  ````
-    ///  let p = C4Point(10.5,10.5)
+    ///  let p = Point(10.5,10.5)
     ///  ````
     ///
     ///  - parameter x: a Double value
@@ -52,14 +52,14 @@ public struct C4Point: Equatable, CustomStringConvertible {
     ///  Initializes a new point with the specified coordinates {x,y}, converting integer values to doubles
     ///
     ///  ````
-    ///  let p = C4Point(10,10)
+    ///  let p = Point(10,10)
     ///  ````
     public init(_ x: Int, _ y: Int) {
         self.x = Double(x)
         self.y = Double(y)
     }
 
-    ///  Initializes a C4Point initialized with a CGPoint.
+    ///  Initializes a Point initialized with a CGPoint.
     ///
     ///  - parameter point: a previously initialized CGPoint
     public init(_ point: CGPoint) {
@@ -75,14 +75,14 @@ public struct C4Point: Equatable, CustomStringConvertible {
     ///  Transforms the point.
     ///
     ///  ````
-    ///  var p = C4Point(10,10)
-    ///  let v = C4Vector(x: 0, y: 0, z: 1)
-    ///  let t = C4Transform.makeRotation(M_PI, axis: v)
+    ///  var p = Point(10,10)
+    ///  let v = Vector(x: 0, y: 0, z: 1)
+    ///  let t = Transform.makeRotation(M_PI, axis: v)
     ///  p.transform(t) // -> {-10.0, -10.0}
     ///  ````
     ///
-    ///  - parameter t: A C4Transform to apply to the point
-    public mutating func transform(t: C4Transform) {
+    ///  - parameter t: A Transform to apply to the point
+    public mutating func transform(t: Transform) {
         x = x * t[0, 0] + y * t[0, 1] + t[3, 0]
         y = x * t[1, 0] + y * t[1, 1] + t[3, 1]
     }
@@ -90,7 +90,7 @@ public struct C4Point: Equatable, CustomStringConvertible {
     ///  A string representation of the point.
     ///
     ///  ````
-    ///  let p = C4Point()
+    ///  let p = Point()
     ///  println(p)
     ///  ````
     ///
@@ -104,50 +104,50 @@ public struct C4Point: Equatable, CustomStringConvertible {
 
 ///  Translate a point by the given vector.
 ///
-///  - parameter lhs: a C4Point to translate
-///  - parameter rhs: a C4Vector whose values will be applied to the point
-public func += (inout lhs: C4Point, rhs: C4Vector) {
+///  - parameter lhs: a Point to translate
+///  - parameter rhs: a Vector whose values will be applied to the point
+public func += (inout lhs: Point, rhs: Vector) {
     lhs.x += rhs.x
     lhs.y += rhs.y
 }
 
 ///  Translate a point by the negative of the given vector
 ///
-///  - parameter lhs: a C4Point to translate
-///  - parameter rhs: a C4Vector whose values will be applied to the point
-public func -= (inout lhs: C4Point, rhs: C4Vector) {
+///  - parameter lhs: a Point to translate
+///  - parameter rhs: a Vector whose values will be applied to the point
+public func -= (inout lhs: Point, rhs: Vector) {
     lhs.x -= rhs.x
     lhs.y -= rhs.y
 }
 
 ///  Calculate the vector between two points
 ///
-///  - parameter lhs: a C4Point
-///  - parameter rhs: a C4Point
+///  - parameter lhs: a Point
+///  - parameter rhs: a Point
 ///
-///  - returns: a C4Vector whose value is the left-hand side _minus_ the right-hand side
-public func - (lhs: C4Point, rhs: C4Point) -> C4Vector {
-    return C4Vector(x: lhs.x - rhs.x, y: lhs.y - rhs.y)
+///  - returns: a Vector whose value is the left-hand side _minus_ the right-hand side
+public func - (lhs: Point, rhs: Point) -> Vector {
+    return Vector(x: lhs.x - rhs.x, y: lhs.y - rhs.y)
 }
 
 ///  Translate a point by the given vector.
 ///
-///  - parameter lhs: a C4Point to translate
-///  - parameter rhs: a C4Vector whose values will be applied to the point
+///  - parameter lhs: a Point to translate
+///  - parameter rhs: a Vector whose values will be applied to the point
 ///
 ///  - returns: A new point whose coordinates have been translated by the values from the vector (e.g. point.x = lhs.x + rhs.x)
-public func + (lhs: C4Point, rhs: C4Vector) -> C4Point {
-    return C4Point(lhs.x + rhs.x, lhs.y + rhs.y)
+public func + (lhs: Point, rhs: Vector) -> Point {
+    return Point(lhs.x + rhs.x, lhs.y + rhs.y)
 }
 
 ///  Translate a point by the negative of the vector.
 ///
-///  - parameter lhs: a C4Point to translate
-///  - parameter rhs: a C4Vector whose values will be applied to the point
+///  - parameter lhs: a Point to translate
+///  - parameter rhs: a Vector whose values will be applied to the point
 ///
 ///  - returns: A new point whose coordinates have been translated by the negative vector (e.g. point.x = lhs.x - rhs.x)
-public func - (lhs: C4Point, rhs: C4Vector) -> C4Point {
-    return C4Point(lhs.x - rhs.x, lhs.y - rhs.y)
+public func - (lhs: Point, rhs: Vector) -> Point {
+    return Point(lhs.x - rhs.x, lhs.y - rhs.y)
 }
 
 ///  Calculates the distance between two points.
@@ -156,7 +156,7 @@ public func - (lhs: C4Point, rhs: C4Vector) -> C4Point {
 ///  - parameter rhs: right-hand point
 ///
 ///  - returns: The linear distance between two points
-public func distance(lhs: C4Point, rhs: C4Point) -> Double {
+public func distance(lhs: Point, rhs: Point) -> Double {
     let dx = rhs.x - lhs.x
     let dy = rhs.y - lhs.y
     return sqrt(dx*dx + dy*dy)
@@ -164,11 +164,11 @@ public func distance(lhs: C4Point, rhs: C4Point) -> Double {
 
 ///  Checks to see if two points are equal.
 ///
-///  - parameter lhs: a C4Point
-///  - parameter rhs: a C4Point
+///  - parameter lhs: a Point
+///  - parameter rhs: a Point
 ///
 ///  - returns: true if the two structs have identical coordinates
-public func == (lhs: C4Point, rhs: C4Point) -> Bool {
+public func == (lhs: Point, rhs: Point) -> Bool {
     return lhs.x == rhs.x && lhs.y == rhs.y
 }
 
@@ -183,13 +183,13 @@ public func == (lhs: C4Point, rhs: C4Point) -> Bool {
 ///  - parameter param: a Double value (between 0.0 and 1.0) used to calculate the point between a and b
 ///
 ///  - returns: an interpolated point
-public func lerp(a a: C4Point, b: C4Point, param: Double) -> C4Point {
+public func lerp(a a: Point, b: Point, param: Double) -> Point {
     return a + (b - a) * param
 }
 
 public extension CGPoint {
-    ///Initializes a CGPoint from a C4Point
-    public init(_ point: C4Point) {
+    ///Initializes a CGPoint from a Point
+    public init(_ point: Point) {
         x = CGFloat(point.x)
         y = CGFloat(point.y)
     }
diff --git a/C4/Core/C4Rect.swift b/C4/Core/Rect.swift
similarity index 68%
rename from C4/Core/C4Rect.swift
rename to C4/Core/Rect.swift
index 26db56bd..6a199fb9 100644
--- a/C4/Core/C4Rect.swift
+++ b/C4/Core/Rect.swift
@@ -21,12 +21,12 @@ import Foundation
 import CoreGraphics
 
 ///  A structure that contains the location and dimensions of a rectangle.
-public struct C4Rect: Equatable, CustomStringConvertible {
+public struct Rect: Equatable, CustomStringConvertible {
     /// The origin (top-left) of the rect.
-    public var origin: C4Point
+    public var origin: Point
 
     /// The size (width / height) of the rect.
-    public var size: C4Size
+    public var size: Size
 
     /// The width of the rect.
     public var width: Double {
@@ -46,56 +46,56 @@ public struct C4Rect: Equatable, CustomStringConvertible {
         }
     }
 
-    /// Initializes a new C4Rect with the origin {0,0} and the size {0,0}
+    /// Initializes a new Rect with the origin {0,0} and the size {0,0}
     /// ````
-    /// let r = C4Rect()
+    /// let r = Rect()
     /// ````
     public init() {
         self.init(0, 0, 0, 0)
     }
 
-    /// Initializes a new C4Rect with the origin {x,y} and the size {w,h}
+    /// Initializes a new Rect with the origin {x,y} and the size {w,h}
     /// ````
-    /// let r = C4Rect(0.0,0.0,10.0,10.0)
+    /// let r = Rect(0.0,0.0,10.0,10.0)
     /// ````
     public init(_ x: Double, _ y: Double, _ w: Double, _ h: Double) {
-        origin = C4Point(x, y)
-        size = C4Size(w, h)
+        origin = Point(x, y)
+        size = Size(w, h)
     }
 
-    /// Initializes a new C4Rect with the origin {x,y} and the size {w,h}, converting values from Int to Double
+    /// Initializes a new Rect with the origin {x,y} and the size {w,h}, converting values from Int to Double
     /// ````
-    /// let r = C4Rect(0,0,10,10)
+    /// let r = Rect(0,0,10,10)
     /// ````
     public init(_ x: Int, _ y: Int, _ w: Int, _ h: Int) {
-        origin = C4Point(x, y)
-        size = C4Size(w, h)
+        origin = Point(x, y)
+        size = Size(w, h)
     }
 
-    /// Initializes a new C4Rect with the origin {o.x,o.y} and the size {s.w,s.h}
+    /// Initializes a new Rect with the origin {o.x,o.y} and the size {s.w,s.h}
     /// ````
-    /// let p = C4Point()
-    /// let s = C4Size()
-    /// let r = C4Rect(p,s)
+    /// let p = Point()
+    /// let s = Size()
+    /// let r = Rect(p,s)
     /// ````
-    public init(_ o: C4Point, _ s: C4Size) {
+    public init(_ o: Point, _ s: Size) {
         origin = o
         size = s
     }
 
-    /// Initializes a C4Rect from a CGRect
+    /// Initializes a Rect from a CGRect
     public init(_ rect: CGRect) {
-        origin = C4Point(rect.origin)
-        size = C4Size(rect.size)
+        origin = Point(rect.origin)
+        size = Size(rect.size)
     }
 
     /// Initializes a rectangle that contains all of the specified coordinates in an array.
     /// ````
-    /// let pts = [C4Point(), C4Point(0,5), C4Point(10,10), C4Point(9,8)]
-    /// let r = C4Rect(pts) //-> {{0.0, 0.0}, {10.0, 10.0}}
+    /// let pts = [Point(), Point(0,5), Point(10,10), Point(9,8)]
+    /// let r = Rect(pts) //-> {{0.0, 0.0}, {10.0, 10.0}}
     /// ````
-    /// - parameter points: An array of C4Point coordinates
-    public init(_ points: [C4Point]) {
+    /// - parameter points: An array of Point coordinates
+    public init(_ points: [Point]) {
         let count = points.count
         assert(count >= 2, "To create a Polygon you need to specify an array of at least 2 points")
         var cgPoints = [CGPoint]()
@@ -103,19 +103,19 @@ public struct C4Rect: Equatable, CustomStringConvertible {
             cgPoints.append(CGPoint(points[i]))
         }
         let r = CGRectMakeFromPoints(cgPoints)
-        let f = C4Rect(r)
+        let f = Rect(r)
         self.init(f.origin, f.size)
     }
 
     /// Initializes a rectangle that contains the specified coordinates in a tuple.
     /// ````
-    /// let pts = (C4Point(), C4Point(0,5))
-    /// let r = C4Rect(pts)
+    /// let pts = (Point(), Point(0,5))
+    /// let r = Rect(pts)
     /// ````
-    /// - parameter points: An tuple of C4Point coordinates
-    public init(_ points: (C4Point, C4Point)) {
+    /// - parameter points: An tuple of Point coordinates
+    public init(_ points: (Point, Point)) {
         let r = CGRectMakeFromPoints([CGPoint(points.0), CGPoint(points.1)])
-        let f = C4Rect(r)
+        let f = Rect(r)
         self.init(f.origin, f.size)
     }
 
@@ -123,15 +123,15 @@ public struct C4Rect: Equatable, CustomStringConvertible {
 
     /// Returns whether two rectangles intersect.
     /// ````
-    /// let r1 = C4Rect(0,0,10,10)
-    /// let r2 = C4Rect(5,5,10,10)
-    /// let r3 = C4Rect(10,10,10,10)
+    /// let r1 = Rect(0,0,10,10)
+    /// let r2 = Rect(5,5,10,10)
+    /// let r3 = Rect(10,10,10,10)
     /// r1.intersects(r2) //-> true
     /// r1.intersects(r3) //-> false
     /// ````
     /// - parameter rect: The rectangle to examine.
     /// - returns:	true if the two specified rectangles intersect; otherwise, false.
-    public func intersects(rect: C4Rect) -> Bool {
+    public func intersects(rect: Rect) -> Bool {
         return CGRectIntersectsRect(CGRect(self), CGRect(rect))
     }
 
@@ -139,12 +139,12 @@ public struct C4Rect: Equatable, CustomStringConvertible {
 
     /// The center point of the receiver.
     /// ````
-    /// let r = C4Rect(0,0,10,10)
+    /// let r = Rect(0,0,10,10)
     /// r.center //-> {5,5}
     /// ````
-    public var center: C4Point {
+    public var center: Point {
         get {
-            return C4Point(origin.x + size.width/2, origin.y + size.height/2)
+            return Point(origin.x + size.width/2, origin.y + size.height/2)
         }
         set {
             origin.x = newValue.x - size.width/2
@@ -154,18 +154,18 @@ public struct C4Rect: Equatable, CustomStringConvertible {
 
     /// The bottom-right point of the receiver.
     /// ````
-    /// let r = C4Rect(5,5,10,10)
+    /// let r = Rect(5,5,10,10)
     /// r.max //-> {15,15}
     /// ````
-    public var max: C4Point {
+    public var max: Point {
         get {
-            return C4Point(origin.x + size.width, origin.y + size.height)
+            return Point(origin.x + size.width, origin.y + size.height)
         }
     }
 
     /// Checks to see if the receiver has zero size and position
     /// ````
-    /// let r = C4Point()
+    /// let r = Point()
     /// r.isZero() //-> true
     /// ````
     /// - returns: true if origin = {0,0} and size = {0,0}
@@ -177,29 +177,29 @@ public struct C4Rect: Equatable, CustomStringConvertible {
 
     /// Returns whether a rectangle contains a specified point.
     /// ````
-    /// let r1 = C4Rect(0,0,10,10)
-    /// let r2 = C4Rect(5,5,10,10)
-    /// let p = C4Rect(2,2,2,2)
+    /// let r1 = Rect(0,0,10,10)
+    /// let r2 = Rect(5,5,10,10)
+    /// let p = Rect(2,2,2,2)
     /// r1.contains(p) //-> true
     /// r2.contains(p) //-> false
     /// ````
     /// - parameter point:	The point to examine.
     /// - returns: true if the rectangle is not null or empty and the point is located within the rectangle; otherwise, false.
-    public func contains(point: C4Point) -> Bool {
+    public func contains(point: Point) -> Bool {
         return CGRectContainsPoint(CGRect(self), CGPoint(point))
     }
 
     /// Returns whether the first rectangle contains the second rectangle.
     /// ````
-    /// let r1 = C4Rect(0,0,10,10)
-    /// let r2 = C4Rect(5,5,10,10)
-    /// let r3 = C4Rect(2,2,2,2)
+    /// let r1 = Rect(0,0,10,10)
+    /// let r2 = Rect(5,5,10,10)
+    /// let r3 = Rect(2,2,2,2)
     /// r1.contains(r2) //-> false
     /// r1.contains(r3) //-> true
     /// ````
     /// - parameter rect:	The rectangle to examine for containment.
     /// - returns: `true` if the rectangle is contained in this rectangle; otherwise, `false`.
-    public func contains(rect: C4Rect) -> Bool {
+    public func contains(rect: Rect) -> Bool {
         return CGRectContainsRect(CGRect(self), CGRect(rect))
     }
 
@@ -217,14 +217,14 @@ public struct C4Rect: Equatable, CustomStringConvertible {
 /// Checks to see if two C4Rects share identical origin and size
 ///
 /// ````
-/// let r1 = C4Rect(0,0,10,10)
-/// let r2 = C4Rect(0,0,10,10.5)
+/// let r1 = Rect(0,0,10,10)
+/// let r2 = Rect(0,0,10,10.5)
 /// println(r1 == r2) //-> false
 /// ````
 /// - parameter lhs: The first rectangle to compare
 /// - parameter rhs: The second rectangle to compare
 /// - returns: A bool, `true` if the rects are identical, otherwise `false`.
-public func == (lhs: C4Rect, rhs: C4Rect) -> Bool {
+public func == (lhs: Rect, rhs: Rect) -> Bool {
     return lhs.origin == rhs.origin && lhs.size == rhs.size
 }
 
@@ -233,8 +233,8 @@ public func == (lhs: C4Rect, rhs: C4Rect) -> Bool {
 /// Returns the intersection of two rectangles.
 ///
 /// ````
-/// let r1 = C4Rect(0,0,10,10)
-/// let r2 = C4Rect(5,5,10,10)
+/// let r1 = Rect(0,0,10,10)
+/// let r2 = Rect(5,5,10,10)
 /// intersection(r1,r2) //-> {5,5,5,5}
 /// ````
 ///
@@ -242,70 +242,70 @@ public func == (lhs: C4Rect, rhs: C4Rect) -> Bool {
 /// - parameter rect2:	The second source rectangle.
 ///
 /// - returns: A rectangle that represents the intersection of the two specified rectangles.
-public func intersection(rect1: C4Rect, rect2: C4Rect) -> C4Rect {
-    return C4Rect(CGRectIntersection(CGRect(rect1), CGRect(rect2)))
+public func intersection(rect1: Rect, rect2: Rect) -> Rect {
+    return Rect(CGRectIntersection(CGRect(rect1), CGRect(rect2)))
 }
 
 /// Returns the smallest rectangle that contains the two source rectangles.
 ///
 /// ````
-/// let r1 = C4Rect(0,0,10,10)
-/// let r2 = C4Rect(5,5,10,10)
+/// let r1 = Rect(0,0,10,10)
+/// let r2 = Rect(5,5,10,10)
 /// intersection(r1,r2) //-> {0,0,15,15}
 /// ````
 ///
 /// - parameter rect1:	The first source rectangle.
 /// - parameter rect2:	The second source rectangle.
 /// - returns:	The smallest rectangle that completely contains both of the source rectangles.
-public func union(rect1: C4Rect, rect2: C4Rect) -> C4Rect {
-    return C4Rect(CGRectUnion(CGRect(rect1), CGRect(rect2)))
+public func union(rect1: Rect, rect2: Rect) -> Rect {
+    return Rect(CGRectUnion(CGRect(rect1), CGRect(rect2)))
 }
 
 /// Returns the smallest rectangle that results from converting the source rectangle values to integers.
 ///
 /// ````
-/// let r = C4Rect(0.1, 0.9, 9.1, 9.9)
+/// let r = Rect(0.1, 0.9, 9.1, 9.9)
 /// integral(r) //-> {0, 0, 10, 10}
 /// ````
 ///
 /// - parameter r:	The source rectangle.
 /// - returns: A rectangle with the smallest integer values for its origin and size that contains the source rectangle.
-public func integral(r: C4Rect) -> C4Rect {
-    return C4Rect(CGRectIntegral(CGRect(r)))
+public func integral(r: Rect) -> Rect {
+    return Rect(CGRectIntegral(CGRect(r)))
 }
 
 /// Returns a rectangle with a positive width and height.
 ///
 /// ````
-/// let r = C4Rect(0, 0, -10, -10)
+/// let r = Rect(0, 0, -10, -10)
 /// standardize(r) //-> {-10, -10, 10, 10}
 /// ````
 ///
 /// - parameter r:	The source rectangle.
 /// - returns:	A rectangle that represents the source rectangle, but with positive width and height values.
-public func standardize(r: C4Rect) -> C4Rect {
-    return C4Rect(CGRectStandardize(CGRect(r)))
+public func standardize(r: Rect) -> Rect {
+    return Rect(CGRectStandardize(CGRect(r)))
 }
 
 /// Returns a rectangle that is smaller or larger than the source rectangle, with the same center point.
 ///
 /// ````
-/// let r = C4Rect(0,0,10,10)
+/// let r = Rect(0,0,10,10)
 /// inset(r, 1, 1) //-> {1,1,8,8}
 /// ````
 ///
-/// - parameter r:	The source C4Rect structure.
+/// - parameter r:	The source Rect structure.
 /// - parameter dx:	The x-coordinate value to use for adjusting the source rectangle.
 /// - parameter dy:	The y-coordinate value to use for adjusting the source rectangle.
 /// - returns:	A rectangle.
-public func inset(r: C4Rect, dx: Double, dy: Double) -> C4Rect {
-    return C4Rect(CGRectInset(CGRect(r), CGFloat(dx), CGFloat(dy)))
+public func inset(r: Rect, dx: Double, dy: Double) -> Rect {
+    return Rect(CGRectInset(CGRect(r), CGFloat(dx), CGFloat(dy)))
 }
 
 // MARK: - Casting to CGRect
 public extension CGRect {
-    /// Initializes a CGRect from a C4Rect
-    public init(_ rect: C4Rect) {
+    /// Initializes a CGRect from a Rect
+    public init(_ rect: Rect) {
         origin = CGPoint(rect.origin)
         size = CGSize(rect.size)
     }
diff --git a/C4/Core/C4Size.swift b/C4/Core/Size.swift
similarity index 78%
rename from C4/Core/C4Size.swift
rename to C4/Core/Size.swift
index e8a0dfeb..3f00812b 100644
--- a/C4/Core/C4Size.swift
+++ b/C4/Core/Size.swift
@@ -21,44 +21,44 @@ import Foundation
 import CoreGraphics
 
 /// A structure that contains width and height values. Values stored as Double, otherwise synonymous with CGSize.
-public struct C4Size: Equatable, Comparable, CustomStringConvertible {
+public struct Size: Equatable, Comparable, CustomStringConvertible {
     ///The width of the size.
     public var width: Double
 
     ///The height of the size.
     public var height: Double
 
-    /// Initializes a new C4Size with the dimensions {0,0}
+    /// Initializes a new Size with the dimensions {0,0}
     ///
     /// ````
-    /// let s = C4Size()
+    /// let s = Size()
     /// ````
     public init() {
         width = 0
         height = 0
     }
 
-    /// Initializes a new C4Size with the dimensions {width,height}
+    /// Initializes a new Size with the dimensions {width,height}
     ///
     /// ````
-    /// let s = C4Size(5.2,5.2)
+    /// let s = Size(5.2,5.2)
     /// ````
     public init(_ width: Double, _ height: Double) {
         self.width = width
         self.height = height
     }
 
-    /// Initializes a new C4Size with the dimensions {width,height}, converting Int values to Double
+    /// Initializes a new Size with the dimensions {width,height}, converting Int values to Double
     ///
     /// ````
-    /// let s = C4Size(5,5)
+    /// let s = Size(5,5)
     /// ````
     public init(_ width: Int, _ height: Int) {
         self.width = Double(width)
         self.height = Double(height)
     }
 
-    /// Initializes a new C4Size from a CGSize.
+    /// Initializes a new Size from a CGSize.
     ///
     ///
     public init(_ size: CGSize) {
@@ -69,7 +69,7 @@ public struct C4Size: Equatable, Comparable, CustomStringConvertible {
     /// Returns true if the dimensions of the receiver are {0,0}
     ///
     /// ````
-    /// let s = C4Size()
+    /// let s = Size()
     /// s.isZero() //-> true
     /// ````
     public func isZero() -> Bool {
@@ -86,26 +86,26 @@ public struct C4Size: Equatable, Comparable, CustomStringConvertible {
     }
 }
 
-/// Returns true if the two source C4Size structs share identical dimensions
+/// Returns true if the two source Size structs share identical dimensions
 ///
 /// ````
-/// let s1 = C4Size()
-/// let s2 = C4Size(1,1)
+/// let s1 = Size()
+/// let s2 = Size(1,1)
 /// s1 == s2 //-> false
 /// ````
 /// - parameter lhs: The first size to compare
 /// - parameter rhs: The second size to compare
 /// - returns: A boolean, `true` if the sizes are equal, otherwise `false`
-public func == (lhs: C4Size, rhs: C4Size) -> Bool {
+public func == (lhs: Size, rhs: Size) -> Bool {
     return lhs.width == rhs.width && lhs.height == rhs.height
 }
 
 /// Returns true if the left-hand size is bigger than the right-hand size
 ///
 /// ````
-/// let s1 = C4Size(3,4)
-/// let s2 = C4Size(4,3)
-/// let s3 = C4Size(2,2)
+/// let s1 = Size(3,4)
+/// let s2 = Size(4,3)
+/// let s3 = Size(2,2)
 ///
 /// s1 > s2 //-> false
 /// s2 > s3 //-> true
@@ -113,16 +113,16 @@ public func == (lhs: C4Size, rhs: C4Size) -> Bool {
 /// - parameter lhs: The first size to compare
 /// - parameter rhs: The second size to compare
 /// - returns: A boolean, `true` if the area of lhs is greater than that of rhs
-public func > (lhs: C4Size, rhs: C4Size) -> Bool {
+public func > (lhs: Size, rhs: Size) -> Bool {
     return lhs.width * lhs.height > rhs.width * rhs.height
 }
 
 /// Returns true if the left-hand size is smaller than the right-hand size
 ///
 /// ````
-/// let s1 = C4Size(3,4)
-/// let s2 = C4Size(4,3)
-/// let s3 = C4Size(2,2)
+/// let s1 = Size(3,4)
+/// let s2 = Size(4,3)
+/// let s3 = Size(2,2)
 ///
 /// s1 < s2 //-> false
 /// s2 < s3 //-> false
@@ -130,16 +130,16 @@ public func > (lhs: C4Size, rhs: C4Size) -> Bool {
 /// - parameter lhs: The first size to compare
 /// - parameter rhs: The second size to compare
 /// - returns: A boolean, `true` if the area of lhs is less than that of rhs
-public func < (lhs: C4Size, rhs: C4Size) -> Bool {
+public func < (lhs: Size, rhs: Size) -> Bool {
     return lhs.width * lhs.height < rhs.width * rhs.height
 }
 
 /// Returns true if the left-hand size is greater than or equal to the right-hand size
 ///
 /// ````
-/// let s1 = C4Size(3,4)
-/// let s2 = C4Size(4,3)
-/// let s3 = C4Size(2,2)
+/// let s1 = Size(3,4)
+/// let s2 = Size(4,3)
+/// let s3 = Size(2,2)
 ///
 /// s1 => s2 //-> true
 /// s2 => s3 //-> true
@@ -147,16 +147,16 @@ public func < (lhs: C4Size, rhs: C4Size) -> Bool {
 /// - parameter lhs: The first size to compare
 /// - parameter rhs: The second size to compare
 /// - returns: A boolean, `true` if the area of lhs is greater than or equal to that of rhs
-public func >= (lhs: C4Size, rhs: C4Size) -> Bool {
+public func >= (lhs: Size, rhs: Size) -> Bool {
     return lhs.width * lhs.height >= rhs.width * rhs.height
 }
 
 /// Returns true if the left-hand size is smaller than or equal to the right-hand size
 ///
 /// ````
-/// let s1 = C4Size(3,4)
-/// let s2 = C4Size(4,3)
-/// let s3 = C4Size(2,2)
+/// let s1 = Size(3,4)
+/// let s2 = Size(4,3)
+/// let s3 = Size(2,2)
 ///
 /// s1 <= s2 //-> true
 /// s2 <= s3 //-> false
@@ -164,14 +164,14 @@ public func >= (lhs: C4Size, rhs: C4Size) -> Bool {
 /// - parameter lhs: The first size to compare
 /// - parameter rhs: The second size to compare
 /// - returns: A boolean, `true` if the area of lhs is less than or equal to that of rhs
-public func <= (lhs: C4Size, rhs: C4Size) -> Bool {
+public func <= (lhs: Size, rhs: Size) -> Bool {
     return lhs.width * lhs.height <= rhs.width * rhs.height
 }
 
 // MARK: - Casting to CGSize
 public extension CGSize {
-    /// Initializes a new CGSize from a C4Size
-    public init(_ size: C4Size) {
+    /// Initializes a new CGSize from a Size
+    public init(_ size: Size) {
         width = CGFloat(size.width)
         height = CGFloat(size.height)
     }
diff --git a/C4/Core/C4Transform.swift b/C4/Core/Transform.swift
similarity index 80%
rename from C4/Core/C4Transform.swift
rename to C4/Core/Transform.swift
index ea363d9b..f26c027e 100644
--- a/C4/Core/C4Transform.swift
+++ b/C4/Core/Transform.swift
@@ -24,7 +24,7 @@ import QuartzCore
 ///  A structure for holding a transform matrix.
 ///
 ///  Transform can translate, rotate, scale.
-public struct C4Transform: Equatable {
+public struct Transform: Equatable {
     private var matrix = [Double](count: 16, repeatedValue: 0)
 
     public subscript(row: Int, col: Int) -> Double {
@@ -40,7 +40,7 @@ public struct C4Transform: Equatable {
         }
     }
 
-    ///  Initializes a C4Transform. Defaults to an identity transform.
+    ///  Initializes a Transform. Defaults to an identity transform.
     public init() {
         self[0, 0] = 1
         self[1, 1] = 1
@@ -87,10 +87,10 @@ public struct C4Transform: Equatable {
     }
 
     /// The translation component of the tranform.
-    /// - returns: A `C4Vector` that represents the translation of the transform, where x = [0,3], y = [1,3]
-    public var translation: C4Vector {
+    /// - returns: A `Vector` that represents the translation of the transform, where x = [0,3], y = [1,3]
+    public var translation: Vector {
         get {
-            return C4Vector(x: self[3, 0], y: self[3, 1])
+            return Vector(x: self[3, 0], y: self[3, 1])
         }
         set {
             self[3, 0] = newValue.x
@@ -100,13 +100,13 @@ public struct C4Transform: Equatable {
 
     /// Creates a transform that represents a translation in 2d (x,y)
     /// ````
-    /// let v = C4Vector(x: 1, y: 1)
-    /// let t = C4Transform.makeTranslation(v)
+    /// let v = Vector(x: 1, y: 1)
+    /// let t = Transform.makeTranslation(v)
     /// ````
-    /// - parameter translation: A `C4Vector` that represents the translation to apply.
-    /// - returns: A `C4Transform` that can be used to apply a translation to a receiver.
-    public static func makeTranslation(translation: C4Vector) -> C4Transform {
-        var t = C4Transform()
+    /// - parameter translation: A `Vector` that represents the translation to apply.
+    /// - returns: A `Transform` that can be used to apply a translation to a receiver.
+    public static func makeTranslation(translation: Vector) -> Transform {
+        var t = Transform()
         t[3, 0] = translation.x
         t[3, 1] = translation.y
         return t
@@ -114,14 +114,14 @@ public struct C4Transform: Equatable {
 
     /// Creates a transform that represents a scale in 3d (x, y, z). The `z` component is optional.
     /// ````
-    /// let t = C4Transform.makeScale(2.0, 2.0)
+    /// let t = Transform.makeScale(2.0, 2.0)
     /// ````
     /// - parameter sx: The amount to scale in the `x` axis
     /// - parameter sy: The amount to scale in the `y` axis
     /// - parameter sz: The amount to scale in the `z` axis
-    /// - returns: A `C4Transform` that can be used to scale a receiver.
-    public static func makeScale(sx: Double, _ sy: Double, _ sz: Double = 1) -> C4Transform {
-        var t = C4Transform()
+    /// - returns: A `Transform` that can be used to scale a receiver.
+    public static func makeScale(sx: Double, _ sy: Double, _ sz: Double = 1) -> Transform {
+        var t = Transform()
         t[0, 0] = sx
         t[1, 1] = sy
         t[2, 2] = sz
@@ -130,14 +130,14 @@ public struct C4Transform: Equatable {
 
     /// Creates a transform that represents a rotation. The `axis` component is optional.
     /// ````
-    /// let t = C4Transform.makeRotation(M_PI)
+    /// let t = Transform.makeRotation(M_PI)
     /// ````
     /// - parameter angle: The angle, in radians, to rotate
     /// - parameter axis: The axis around which to rotate, defaults to the z axis {0,0,1}
-    /// - returns: A `C4Transform` that can be used to rotate a receiver.
-    public static func makeRotation(angle: Double, axis: C4Vector = C4Vector(x: 0, y: 0, z : 1)) -> C4Transform {
+    /// - returns: A `Transform` that can be used to rotate a receiver.
+    public static func makeRotation(angle: Double, axis: Vector = Vector(x: 0, y: 0, z : 1)) -> Transform {
         if axis.isZero() {
-            return C4Transform()
+            return Transform()
         }
 
         let unitAxis = axis.unitVector()!
@@ -148,7 +148,7 @@ public struct C4Transform: Equatable {
         let ca = cos(angle)
         let sa = sin(angle)
 
-        var t = C4Transform()
+        var t = Transform()
         t[0, 0] = ux * ux * (1 - ca) + ca
         t[0, 1] = ux * uy * (1 - ca) - uz * sa
         t[0, 2] = ux * uz * (1 - ca) + uy * sa
@@ -163,38 +163,38 @@ public struct C4Transform: Equatable {
 
     /// Applies a translation to the receiver.
     /// ````
-    /// let v = C4Vector(x: 1, y: 1)
-    /// let t = C4Transform()
+    /// let v = Vector(x: 1, y: 1)
+    /// let t = Transform()
     /// t.translate(v)
     /// ````
-    /// - parameter translation: A `C4Vector` that represents the translation to apply.
-    public mutating func translate(translation: C4Vector) {
-        let t = C4Transform.makeTranslation(translation)
+    /// - parameter translation: A `Vector` that represents the translation to apply.
+    public mutating func translate(translation: Vector) {
+        let t = Transform.makeTranslation(translation)
         self = concat(self, t2: t)
     }
 
     /// Applies a scale to the receiver. The `z` variable is optional.
     /// ````
-    /// let t = C4Transform()
+    /// let t = Transform()
     /// t.scale(2.0, 2.0)
     /// ````
     /// - parameter sx: The amount to scale in the `x` axis
     /// - parameter sy: The amount to scale in the `y` axis
     /// - parameter sz: The amount to scale in the `z` axis
     public mutating func scale(sx: Double, _ sy: Double, _ sz: Double = 1) {
-        let s = C4Transform.makeScale(sx, sy, sz)
+        let s = Transform.makeScale(sx, sy, sz)
         self = concat(self, t2: s)
     }
 
     /// Applies a rotation. The `axis` component is optional.
     /// ````
-    /// let t = C4Transform()
+    /// let t = Transform()
     /// t.rotate(M_PI)
     /// ````
     /// - parameter angle: The angle, in radians, to rotate
     /// - parameter axis: The axis around which to rotate, defaults to the z axis {0,0,1}
-    public mutating func rotate(angle: Double, axis: C4Vector = C4Vector(x: 0, y: 0, z: 1)) {
-        let r = C4Transform.makeRotation(angle, axis: axis)
+    public mutating func rotate(angle: Double, axis: Vector = Vector(x: 0, y: 0, z: 1)) {
+        let r = Transform.makeRotation(angle, axis: axis)
         self = concat(self, t2: r)
     }
 
@@ -235,11 +235,11 @@ public struct C4Transform: Equatable {
     }
 }
 
-/// Returns true if the two source C4Transform structs share identical dimensions
+/// Returns true if the two source Transform structs share identical dimensions
 /// - parameter lhs: The first transform to compare
 /// - parameter rhs: The second transform to compare
 /// - returns: A boolean, `true` if the both transforms are equal
-public func == (lhs: C4Transform, rhs: C4Transform) -> Bool {
+public func == (lhs: Transform, rhs: Transform) -> Bool {
     var equal = true
     for col in 0...3 {
         for row in 0...3 {
@@ -253,8 +253,8 @@ public func == (lhs: C4Transform, rhs: C4Transform) -> Bool {
 /// - parameter lhs: The first transform to multiply
 /// - parameter rhs: The second transform to multiply
 /// - returns: A new transform that is the result of multiplying `lhs` and `rhs`
-public func * (lhs: C4Transform, rhs: C4Transform) -> C4Transform {
-    var t = C4Transform()
+public func * (lhs: Transform, rhs: Transform) -> Transform {
+    var t = Transform()
     for col in 0...3 {
         for row in 0...3 {
             t[row, col] = lhs[row, 0] * rhs[0, col] + lhs[row, 1] * rhs[1, col] + lhs[row, 2] * rhs[2, col] + lhs[row, 3] * rhs[3, col]
@@ -267,8 +267,8 @@ public func * (lhs: C4Transform, rhs: C4Transform) -> C4Transform {
 /// - parameter t: The transform to scale
 /// - parameter s: A scalar value to apply to the transform
 /// - returns: A new trasform whose values are the scalar multiple of `t`
-public func * (t: C4Transform, s: Double) -> C4Transform {
-    var r = C4Transform()
+public func * (t: Transform, s: Double) -> Transform {
+    var r = Transform()
     for col in 0...3 {
         for row in 0...3 {
             r[row, col] = t[row, col] * s
@@ -282,7 +282,7 @@ public func * (t: C4Transform, s: Double) -> C4Transform {
 /// - parameter s: A scalar value to apply to the transform
 /// - parameter t: The transform to scale
 /// - returns: A new trasform whose values are the scalar multiple of `t`
-public func * (s: Double, t: C4Transform) -> C4Transform {
+public func * (s: Double, t: Transform) -> Transform {
     return t * s
 }
 
@@ -291,14 +291,14 @@ public func * (s: Double, t: C4Transform) -> C4Transform {
 /// - parameter t1: The first transform to contatenate
 /// - parameter t2: The second transform to contatenate
 /// - returns: A new transform that is the contcatenation of `t1` and `t2`
-public func concat(t1: C4Transform, t2: C4Transform) -> C4Transform {
+public func concat(t1: Transform, t2: Transform) -> Transform {
     return t2 * t1
 }
 
 /// Calculates the inverse of a transfomation.
 /// - parameter t: The transform to invert
 /// - returns: A new transform that is the inverse of `t`
-public func inverse(t: C4Transform) -> C4Transform? {
+public func inverse(t: Transform) -> Transform? {
     var N: __CLPK_integer = 4
     var error: __CLPK_integer = 0
     var pivot = [__CLPK_integer](count: 4, repeatedValue: 0)
@@ -317,7 +317,7 @@ public func inverse(t: C4Transform) -> C4Transform? {
         return nil
     }
 
-    var r = C4Transform()
+    var r = Transform()
     r.matrix = matrix
     return r
 }
diff --git a/C4/Core/C4Vector.swift b/C4/Core/Vector.swift
similarity index 69%
rename from C4/Core/C4Vector.swift
rename to C4/Core/Vector.swift
index 1bc4e381..134c91d8 100644
--- a/C4/Core/C4Vector.swift
+++ b/C4/Core/Vector.swift
@@ -19,8 +19,8 @@
 
 import CoreGraphics
 
-///  The C4Vector class is used for coordinate values and direction vectors.
-public struct C4Vector: Equatable, CustomStringConvertible {
+///  The Vector class is used for coordinate values and direction vectors.
+public struct Vector: Equatable, CustomStringConvertible {
     /// The x-value of the vector.
     public var x: Double = 0
     /// The y-value of the vector.
@@ -30,15 +30,15 @@ public struct C4Vector: Equatable, CustomStringConvertible {
 
     /// Creates a vector with default values {0,0,0,}
     /// ````
-    /// let v = C4Vector()
+    /// let v = Vector()
     /// ````
     public init() {
     }
 
     /// Create a vector with a cartesian representation: an x and a y coordinates. The `z` variable is optional.
     /// ````
-    /// let v = C4Vector(x: 1.0, y: 1.0, z: 1.0)
-    /// let v = C4Vector(x: 1.0, y: 1.0)
+    /// let v = Vector(x: 1.0, y: 1.0, z: 1.0)
+    /// let v = Vector(x: 1.0, y: 1.0)
     /// ````
     /// - parameter x: the x-value of the new vector
     /// - parameter y: the y-value of the new vector
@@ -51,7 +51,7 @@ public struct C4Vector: Equatable, CustomStringConvertible {
 
     /// Create a vector with a cartesian representation: an x and a y coordinates.
     /// ````
-    /// let v = C4Vector(x: 1, y: 1, z: 1)
+    /// let v = Vector(x: 1, y: 1, z: 1)
     /// ````
     /// - parameter x: the x-value of the new vector
     /// - parameter y: the y-value of the new vector
@@ -67,7 +67,7 @@ public struct C4Vector: Equatable, CustomStringConvertible {
     /// ````
     /// let m = sqrt(2.0)
     /// let h = M_PI_4
-    /// let v = C4Vector(magnitude: m, heading: h)
+    /// let v = Vector(magnitude: m, heading: h)
     /// v //-> {1,1,0}
     /// ````
     /// - parameter magnitude: the magnitude of the new vector
@@ -79,7 +79,7 @@ public struct C4Vector: Equatable, CustomStringConvertible {
         self.z = z
     }
 
-    ///  Initializes a C4Vector from a CGPoint
+    ///  Initializes a Vector from a CGPoint
     ///  - parameter point: a previously initialized CGPoint
     public init(_ point: CGPoint) {
         x = Double(point.x)
@@ -87,9 +87,9 @@ public struct C4Vector: Equatable, CustomStringConvertible {
         z = 0
     }
 
-    ///  Initializes a C4Vector from a C4Point
-    ///  - parameter point: a previously initialized C4Point
-    public init(_ point: C4Point) {
+    ///  Initializes a Vector from a Point
+    ///  - parameter point: a previously initialized Point
+    public init(_ point: Point) {
         x = point.x
         y = point.y
         z = 0
@@ -97,7 +97,7 @@ public struct C4Vector: Equatable, CustomStringConvertible {
 
     /// The polar representation magnitude of the vector.
     /// ````
-    /// let v = C4Vector(x: 2.0, y: 1.0, z: 0.0)
+    /// let v = Vector(x: 2.0, y: 1.0, z: 0.0)
     /// v.magnitude //-> √2
     /// ````
     public var magnitude: Double {
@@ -112,7 +112,7 @@ public struct C4Vector: Equatable, CustomStringConvertible {
 
     /// The polar representation heading angle of the vector, in radians.
     /// ````
-    /// let v = C4Vector(1,1,0)
+    /// let v = Vector(1,1,0)
     /// v.heading //-> M_PI_4
     /// ````
     public var heading: Double {
@@ -127,27 +127,27 @@ public struct C4Vector: Equatable, CustomStringConvertible {
 
     /// The angle between two vectors, based on {0,0}
     /// ````
-    /// let v1 = C4Vector(x: 1, y: 1, z: 0)
-    /// let v2 = C4Vector(x: -1, y: 1, z: 0)
+    /// let v1 = Vector(x: 1, y: 1, z: 0)
+    /// let v2 = Vector(x: -1, y: 1, z: 0)
     /// v1.angleTo(v2) //-> M_PI_2
     /// ````
     /// - parameter vec: The vector used to calcuate the angle to the receiver
     /// - returns: The angle, measured in radians, between the receiver and `vec`
-    public func angleTo(vec: C4Vector) -> Double {
+    public func angleTo(vec: Vector) -> Double {
         return acos(self ⋅ vec / (self.magnitude * vec.magnitude))
     }
 
     /// The angle between two vectors, based on a provided point
     /// ````
-    /// let v1 = C4Vector(x: 1, y: 1, z: 0)
-    /// let v2 = C4Vector(x: -1, y: 1, z: 0)
-    /// let b = C4Vector(x: 0, y: 1, z: 0)
+    /// let v1 = Vector(x: 1, y: 1, z: 0)
+    /// let v2 = Vector(x: -1, y: 1, z: 0)
+    /// let b = Vector(x: 0, y: 1, z: 0)
     /// v1.angleTo(v2, basedOn: b) //-> PI
     /// ````
     /// - parameter vec: The vector used to calcuate the angle to the receiver
     /// - parameter basedOn: A second vector used to calcuate the angle to the receiver
     /// - returns: The angle, measured in radians, between the receiver and `vec`
-    public func angleTo(vec: C4Vector, basedOn: C4Vector) -> Double {
+    public func angleTo(vec: Vector, basedOn: Vector) -> Double {
         var vecA = self
         var vecB = vec
 
@@ -159,32 +159,32 @@ public struct C4Vector: Equatable, CustomStringConvertible {
 
     /// Return the dot product. **You should use the ⋅ operator instead.**
     /// ````
-    /// let v1 = C4Vector(x: 1, y: 1, z: 0)
-    /// let v2 = C4Vector(x: -1, y: 1, z: 0)
+    /// let v1 = Vector(x: 1, y: 1, z: 0)
+    /// let v2 = Vector(x: -1, y: 1, z: 0)
     /// v1.dot(v2) //-> 0.0
     /// ````
     /// - parameter vec: The vector used to calcuate the dot product
     /// - returns: The dot product of the receiver and `vec`
-    public func dot(vec: C4Vector) -> Double {
+    public func dot(vec: Vector) -> Double {
         return x * vec.x + y * vec.y + z * vec.z
     }
 
     /// Return a vector with the same heading but a magnitude of 1.
     /// ````
-    /// let v1 = C4Vector(x: 1, y: 1, z: 0)
+    /// let v1 = Vector(x: 1, y: 1, z: 0)
     /// v1.unitVector() //-> {M_PI_4,M_PI_4,0}
     /// ````
     /// - returns: A new vector that is the unit vector of the receiver
-    public func unitVector() -> C4Vector? {
+    public func unitVector() -> Vector? {
         guard self.magnitude != 0.0 else {
             return nil
         }
-        return C4Vector(x: x / self.magnitude, y: y / self.magnitude, z: z / self.magnitude)
+        return Vector(x: x / self.magnitude, y: y / self.magnitude, z: z / self.magnitude)
     }
 
     /// Return `true` if the vector is zero.
     /// ````
-    /// let v = C4Vector()
+    /// let v = Vector()
     /// v.isZero() //-> true
     /// ````
     /// - returns: A boolean, `true` if all values are 0, `false` otherwise
@@ -194,12 +194,12 @@ public struct C4Vector: Equatable, CustomStringConvertible {
 
     /// Transform the vector.
     /// ````
-    /// var v = C4Vector(x: 1, y: 1, z:0)
-    /// let t = C4Transform.makeRotation(M_PI, axis: C4Vector(x: 0, y:0, z:1))
+    /// var v = Vector(x: 1, y: 1, z:0)
+    /// let t = Transform.makeRotation(M_PI, axis: Vector(x: 0, y:0, z:1))
     /// v.transform(t) //-> {-1, -1, 0}
     /// ````
-    /// - parameter t: A C4Transform to apply to the receiver
-    public mutating func transform(t: C4Transform) {
+    /// - parameter t: A Transform to apply to the receiver
+    public mutating func transform(t: Transform) {
         x = x * t[0, 0] + y * t[0, 1] + z * t[0, 2]
         y = x * t[1, 0] + y * t[1, 1] + z * t[1, 2]
         z = x * t[2, 0] + y * t[2, 1] + z * t[2, 2]
@@ -215,27 +215,27 @@ public struct C4Vector: Equatable, CustomStringConvertible {
 /// Returns true if the coordinates of both vectors are identical
 ///
 /// ````
-/// let v1 = C4Vector(x: 1, y: 1)
-/// let v2 = C4Vector(x: 1, y: 0)
+/// let v1 = Vector(x: 1, y: 1)
+/// let v2 = Vector(x: 1, y: 0)
 /// v1 == v2 //-> false
 /// ````
-/// - parameter lhs: A C4Vector
-/// - parameter rhs: A C4Vector
+/// - parameter lhs: A Vector
+/// - parameter rhs: A Vector
 /// - returns: A boolean, `true` if the vectors are equal, `false` otherwise
-public func == (lhs: C4Vector, rhs: C4Vector) -> Bool {
+public func == (lhs: Vector, rhs: Vector) -> Bool {
     return lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z
 }
 
 /// Transforms the left-hand vector by adding the values of the right-hand vector
 ///
 /// ````
-/// let v1 = C4Vector(x: 1, y: 1)
-/// let v2 = C4Vector(x: 1, y: 0)
+/// let v1 = Vector(x: 1, y: 1)
+/// let v2 = Vector(x: 1, y: 0)
 /// v1 += v2 //-> v1 = {2,1,0}
 /// ````
-/// - parameter lhs: A C4Vector to which the values of `rhs` will be added
-/// - parameter rhs: A C4Vector
-public func += (inout lhs: C4Vector, rhs: C4Vector) {
+/// - parameter lhs: A Vector to which the values of `rhs` will be added
+/// - parameter rhs: A Vector
+public func += (inout lhs: Vector, rhs: Vector) {
     lhs.x += rhs.x
     lhs.y += rhs.y
     lhs.z += rhs.z
@@ -244,13 +244,13 @@ public func += (inout lhs: C4Vector, rhs: C4Vector) {
 /// Transforms the left-hand vector by subtracting the values of the right-hand vector
 ///
 /// ````
-/// let v1 = C4Vector(x: 1, y: 1)
-/// let v2 = C4Vector(x: 1, y: 0)
+/// let v1 = Vector(x: 1, y: 1)
+/// let v2 = Vector(x: 1, y: 0)
 /// v1 += v2 //-> v1 = {0,1,0}
 /// ````
-/// - parameter lhs: A C4Vector to which the values of `rhs` will be subtracted
-/// - parameter rhs: A C4Vector
-public func -= (inout lhs: C4Vector, rhs: C4Vector) {
+/// - parameter lhs: A Vector to which the values of `rhs` will be subtracted
+/// - parameter rhs: A Vector
+public func -= (inout lhs: Vector, rhs: Vector) {
     lhs.x -= rhs.x
     lhs.y -= rhs.y
     lhs.z -= rhs.z
@@ -259,12 +259,12 @@ public func -= (inout lhs: C4Vector, rhs: C4Vector) {
 /// Transforms the left-hand vector by multiplying each by the values of the right-hand vector
 ///
 /// ````
-/// let v1 = C4Vector(x: 1, y: 1)
+/// let v1 = Vector(x: 1, y: 1)
 /// v *= 2.0 //-> v1 = {2,2,0}
 /// ````
-/// - parameter lhs: A C4Vector whose values will be multiplied by `rhs`
+/// - parameter lhs: A Vector whose values will be multiplied by `rhs`
 /// - parameter rhs: A scalar value
-public func *= (inout lhs: C4Vector, rhs: Double) {
+public func *= (inout lhs: Vector, rhs: Double) {
     lhs.x *= rhs
     lhs.y *= rhs
     lhs.z *= rhs
@@ -273,12 +273,12 @@ public func *= (inout lhs: C4Vector, rhs: Double) {
 /// Transforms the left-hand vector by dividing each by the values of the right-hand vector
 ///
 /// ````
-/// let v1 = C4Vector(x: 1, y: 1)
+/// let v1 = Vector(x: 1, y: 1)
 /// v /= 2.0 //-> v = {0.5,0.5,0.0}
 /// ````
-/// - parameter lhs: A C4Vector whose values will be divided by `rhs`
+/// - parameter lhs: A Vector whose values will be divided by `rhs`
 /// - parameter rhs: A scalar value
-public func /= (inout lhs: C4Vector, rhs: Double) {
+public func /= (inout lhs: Vector, rhs: Double) {
     lhs.x /= rhs
     lhs.y /= rhs
     lhs.z /= rhs
@@ -287,29 +287,29 @@ public func /= (inout lhs: C4Vector, rhs: Double) {
 /// Returns a new vector whose coordinates are the sum of both input vectors
 ///
 /// ````
-/// let v1 = C4Vector(x: 1, y: 1)
-/// let v2 = C4Vector(x: 1, y: 0)
+/// let v1 = Vector(x: 1, y: 1)
+/// let v2 = Vector(x: 1, y: 0)
 /// v1+v2 //-> {2,1,0}
 /// ````
-/// - parameter lhs: A C4Vector
-/// - parameter rhs: A C4Vector
+/// - parameter lhs: A Vector
+/// - parameter rhs: A Vector
 /// - returns: A new vector whose values are the sum of `lhs` and `rhs`
-public func + (lhs: C4Vector, rhs: C4Vector) -> C4Vector {
-    return C4Vector(x: lhs.x + rhs.x, y: lhs.y + rhs.y, z: lhs.z + rhs.z)
+public func + (lhs: Vector, rhs: Vector) -> Vector {
+    return Vector(x: lhs.x + rhs.x, y: lhs.y + rhs.y, z: lhs.z + rhs.z)
 }
 
 /// Returns a new vector whose coordinates are the subtraction of the right-hand vector from the left-hand vector
 ///
 /// ````
-/// var v1 = C4Vector(x: 1, y: 1)
-/// var v2 = C4Vector(x: 1, y: 1)
+/// var v1 = Vector(x: 1, y: 1)
+/// var v2 = Vector(x: 1, y: 1)
 /// v1-v2 //-> {0,0,0}
 /// ````
-/// - parameter lhs: A C4Vector
-/// - parameter rhs: A C4Vector
+/// - parameter lhs: A Vector
+/// - parameter rhs: A Vector
 /// - returns: A new vector whose values are the difference of `lhs` and `rhs`
-public func - (lhs: C4Vector, rhs: C4Vector) -> C4Vector {
-    return C4Vector(x: lhs.x - rhs.x, y: lhs.y - rhs.y, z: lhs.z - rhs.z)
+public func - (lhs: Vector, rhs: Vector) -> Vector {
+    return Vector(x: lhs.x - rhs.x, y: lhs.y - rhs.y, z: lhs.z - rhs.z)
 }
 
 infix operator ⋅ { associativity left precedence 150 }
@@ -317,68 +317,68 @@ infix operator ⋅ { associativity left precedence 150 }
 /// Returns a new vector that is the dot product of the both input vectors. **Use this instead of v.dot(v)**
 ///
 /// ````
-/// let v1 = C4Vector(x: 1, y: 1)
-/// let v2 = C4Vector(x: -1, y: 1)
+/// let v1 = Vector(x: 1, y: 1)
+/// let v2 = Vector(x: -1, y: 1)
 /// v1 ⋅ v2 //-> 0.0
 /// ````
-/// - parameter lhs: A C4Vector
-/// - parameter rhs: A C4Vector
+/// - parameter lhs: A Vector
+/// - parameter rhs: A Vector
 /// - returns: The dot product of `lhs` and `rhs`
-public func ⋅ (lhs: C4Vector, rhs: C4Vector) -> Double {
+public func ⋅ (lhs: Vector, rhs: Vector) -> Double {
     return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z
 }
 
 /// Returns a new vector whose coordinates are the division of the left-hand vector coordinates by those of the right-hand vector
 ///
 /// ````
-/// var v1 = C4Vector(x: 1, y: 1)
+/// var v1 = Vector(x: 1, y: 1)
 /// var v2 = v1 / 2.0
 /// v2 //-> {0.5,0.5,0}
 /// ````
-/// - parameter lhs: A C4Vector
+/// - parameter lhs: A Vector
 /// - parameter rhs: A scalar
 /// - returns: A new vector whose values are those of `lhs` divided by `rhs`
-public func / (lhs: C4Vector, rhs: Double) -> C4Vector {
-    return C4Vector(x: lhs.x / rhs, y: lhs.y / rhs, z: lhs.z / rhs)
+public func / (lhs: Vector, rhs: Double) -> Vector {
+    return Vector(x: lhs.x / rhs, y: lhs.y / rhs, z: lhs.z / rhs)
 }
 
 /// Returns a new vector whose coordinates are the multiplication of the left-hand vector coordinates by those of the right-hand
 /// vector
 ///
 /// ````
-/// var v1 = C4Vector(x: 1, y: 1)
+/// var v1 = Vector(x: 1, y: 1)
 /// var v2 = v2 * 2.0
 /// v2 //-> {2,2,0}
 /// ````
-/// - parameter lhs: A C4Vector
+/// - parameter lhs: A Vector
 /// - parameter rhs: A scalar
 /// - returns: A new vector whose values are those of `lhs` multiplied by `rhs`
-public func * (lhs: C4Vector, rhs: Double) -> C4Vector {
-    return C4Vector(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
+public func * (lhs: Vector, rhs: Double) -> Vector {
+    return Vector(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
 }
 
 /// Returns a new vector whose coordinates are the multiplication of the right-hand vector coordinates by the left-hand scalar
 ///
 /// ````
-/// var v1 = C4Vector(x: 1, y: 1)
+/// var v1 = Vector(x: 1, y: 1)
 /// var v2 = 2.0 * v2
 /// v2 //-> {2,2,0}
 /// - parameter lhs: A scalar
-/// - parameter rhs: A C4Vector
+/// - parameter rhs: A Vector
 /// - returns: A new vector whose values are those of `lhs` divided by `rhs`
-public func * (lhs: Double, rhs: C4Vector) -> C4Vector {
-    return C4Vector(x: rhs.x * lhs, y: rhs.y * lhs, z: rhs.z * lhs)
+public func * (lhs: Double, rhs: Vector) -> Vector {
+    return Vector(x: rhs.x * lhs, y: rhs.y * lhs, z: rhs.z * lhs)
 }
 
 /// Returns a new vector whose coordinates are the negative values of the receiver
 ///
 /// ````
-/// var v1 = C4Vector(x: 1, y: 1)
+/// var v1 = Vector(x: 1, y: 1)
 /// var v2 = -v1
 /// v2 //-> {-1,-1}
 /// ````
-/// - parameter vector: A C4Vector
+/// - parameter vector: A Vector
 /// - returns: A new vector whose values are the negative of `vector`
-public prefix func - (vector: C4Vector) -> C4Vector {
-    return C4Vector(x: -vector.x, y: -vector.y, z: -vector.z)
+public prefix func - (vector: Vector) -> Vector {
+    return Vector(x: -vector.x, y: -vector.y, z: -vector.z)
 }
diff --git a/C4/UI/C4Animation.swift b/C4/UI/Animation.swift
similarity index 87%
rename from C4/UI/C4Animation.swift
rename to C4/UI/Animation.swift
index d5f0a89f..212a025e 100644
--- a/C4/UI/C4Animation.swift
+++ b/C4/UI/Animation.swift
@@ -19,11 +19,11 @@
 
 import Foundation
 
-private let C4AnimationCompletedEvent = "C4AnimationCompleted"
-private let C4AnimationCancelledEvent = "C4AnimationCancelled"
+private let AnimationCompletedEvent = "C4AnimationCompleted"
+private let AnimationCancelledEvent = "C4AnimationCancelled"
 
 /// Defines an object that handles the creation of animations for specific actions and keys.
-public class C4Animation {
+public class Animation {
     ///  Specifies the supported animation curves.
     ///
     ///  ````
@@ -70,8 +70,8 @@ public class C4Animation {
     private var cancelObservers: [AnyObject] = []
 
 
-    static var stack = [C4Animation]()
-    static var currentAnimation: C4Animation? {
+    static var stack = [Animation]()
+    static var currentAnimation: Animation? {
         return stack.last
     }
 
@@ -102,7 +102,7 @@ public class C4Animation {
     ///  - returns: the observer object.
     public func addCompletionObserver(action: () -> Void) -> AnyObject {
         let nc = NSNotificationCenter.defaultCenter()
-        let observer = nc.addObserverForName(C4AnimationCompletedEvent, object: self, queue: NSOperationQueue.currentQueue(), usingBlock: { notification in
+        let observer = nc.addObserverForName(AnimationCompletedEvent, object: self, queue: NSOperationQueue.currentQueue(), usingBlock: { notification in
             action()
         })
         completionObservers.append(observer)
@@ -114,7 +114,7 @@ public class C4Animation {
     ///  - parameter observer: the observer object to remove.
     public func removeCompletionObserver(observer: AnyObject) {
         let nc = NSNotificationCenter.defaultCenter()
-        nc.removeObserver(observer, name: C4AnimationCompletedEvent, object: self)
+        nc.removeObserver(observer, name: AnimationCompletedEvent, object: self)
     }
 
     ///  Posts a completion event.
@@ -122,7 +122,7 @@ public class C4Animation {
     ///  This method is triggered when an animation completes. This can be used in place of `addCompletionObserver` for objects outside the scope of the context in which the animation is created.
     public func postCompletedEvent() {
         dispatch_async(dispatch_get_main_queue()) {
-            NSNotificationCenter.defaultCenter().postNotificationName(C4AnimationCompletedEvent, object: self)
+            NSNotificationCenter.defaultCenter().postNotificationName(AnimationCompletedEvent, object: self)
         }
     }
 
@@ -135,7 +135,7 @@ public class C4Animation {
     ///  - returns: the observer object.
     public func addCancelObserver(action: () -> Void) -> AnyObject {
         let nc = NSNotificationCenter.defaultCenter()
-        let observer = nc.addObserverForName(C4AnimationCancelledEvent, object: self, queue: NSOperationQueue.currentQueue(), usingBlock: { notification in
+        let observer = nc.addObserverForName(AnimationCancelledEvent, object: self, queue: NSOperationQueue.currentQueue(), usingBlock: { notification in
             action()
         })
         cancelObservers.append(observer)
@@ -147,7 +147,7 @@ public class C4Animation {
     ///  - parameter observer: the cancel observer object to remove.
     public func removeCancelObserver(observer: AnyObject) {
         let nc = NSNotificationCenter.defaultCenter()
-        nc.removeObserver(observer, name: C4AnimationCancelledEvent, object: self)
+        nc.removeObserver(observer, name: AnimationCancelledEvent, object: self)
     }
 
     ///  Posts a cancellation event.
@@ -155,7 +155,7 @@ public class C4Animation {
     ///  This method is triggered when an animation is canceled. This can be used in place of `addCancelObserver` for objects outside the scope of the context in which the animation is created.
     public func postCancelledEvent() {
         dispatch_async(dispatch_get_main_queue()) {
-            NSNotificationCenter.defaultCenter().postNotificationName(C4AnimationCancelledEvent, object: self)
+            NSNotificationCenter.defaultCenter().postNotificationName(AnimationCancelledEvent, object: self)
         }
     }
 }
diff --git a/C4/UI/C4Arc.swift b/C4/UI/Arc.swift
similarity index 81%
rename from C4/UI/C4Arc.swift
rename to C4/UI/Arc.swift
index f40ccd6e..125bef6f 100644
--- a/C4/UI/C4Arc.swift
+++ b/C4/UI/Arc.swift
@@ -20,27 +20,27 @@
 import QuartzCore
 import UIKit
 
-///  C4Arc is a concrete subclass of C4Shape that has a special initialzer that creates an arc whose shape is defined by rotating around a specified point.
-public class C4Arc: C4Shape {
+///  Arc is a concrete subclass of Shape that has a special initialzer that creates an arc whose shape is defined by rotating around a specified point.
+public class Arc: Shape {
 
     /// Creates an arc, whose edge is always drawn on the shorter circumference.
     ///
     /// ````
-    /// let a = C4Arc(center: canvas.center,radius: 50, start: M_PI, end: 2*M_PI)
+    /// let a = Arc(center: canvas.center,radius: 50, start: M_PI, end: 2*M_PI)
     /// ````
     ///
     /// - parameter center: The center-point of the arc
     /// - parameter radius: The radius of the arc
     /// - parameter start:  The angle (in radians) that determines the starting point of the arc, measured from the x-axis in the current user space.
     /// - parameter end:    The angle (in radians) that determines the ending point of the arc, measured from the x-axis in the current user space.
-    public convenience init(center: C4Point, radius: Double, start: Double, end: Double) {
+    public convenience init(center: Point, radius: Double, start: Double, end: Double) {
         self.init(center: center, radius: radius, start: start, end: end, clockwise: end>start ? true : false)
     }
 
     ///     Creates an arc, whose edge is drawn based on the input for `clockwise`.
     ///
     /// ````
-    /// let a = C4Arc(center: canvas.center,radius: 50, start: M_PI, end: 2*M_PI, clockwise: clockwise: false)
+    /// let a = Arc(center: canvas.center,radius: 50, start: M_PI, end: 2*M_PI, clockwise: clockwise: false)
     /// ````
     ///
     /// - parameter center:    The center-point of the arc
@@ -48,12 +48,12 @@ public class C4Arc: C4Shape {
     /// - parameter start:     The angle (in radians) that determines the starting point of the arc, measured from the x-axis in the current user space.
     /// - parameter end:       The angle (in radians) that determines the ending point of the arc, measured from the x-axis in the current user space.    ///
     /// - parameter clockwise: If true, the arc draws clockwise from start to end (counter clockwise if false)
-    public init(center: C4Point, radius: Double, start: Double, end: Double, clockwise: Bool) {
+    public init(center: Point, radius: Double, start: Double, end: Double, clockwise: Bool) {
         super.init()
 
         let arc = CGPathCreateMutable()
         CGPathAddArc(arc, nil, CGFloat(center.x), CGFloat(center.y), CGFloat(radius), CGFloat(start), CGFloat(end), !clockwise)
-        path = C4Path(path: arc)
+        path = Path(path: arc)
         adjustToFitPath()
     }
 }
diff --git a/C4/UI/C4AudioPlayer.swift b/C4/UI/AudioPlayer.swift
similarity index 93%
rename from C4/UI/C4AudioPlayer.swift
rename to C4/UI/AudioPlayer.swift
index 4c6de164..9553338c 100644
--- a/C4/UI/C4AudioPlayer.swift
+++ b/C4/UI/AudioPlayer.swift
@@ -20,7 +20,7 @@
 import UIKit
 import AVFoundation
 
-/// C4AudioPlayer provides playback of audio data from a file or memory.
+/// AudioPlayer provides playback of audio data from a file or memory.
 ///
 ///  Using an audio player you can:
 ///
@@ -37,22 +37,30 @@ import AVFoundation
 ///  Seek to a particular point in a sound file, which supports such application features as fast forward and rewind
 ///
 ///  Obtain data you can use for playback-level metering
-public class C4AudioPlayer: NSObject, AVAudioPlayerDelegate {
+public class AudioPlayer: NSObject, AVAudioPlayerDelegate {
     internal var player: AVAudioPlayer!
 
     /// Initializes a new audio player from a given file name
     /// ````
-    /// let ap = C4AudioPlayer("audioTrackFileName")
+    /// let ap = AudioPlayer("audioTrackFileName")
     /// ````
     public init?(_ name: String) {
-        self.player = nil
+        do {
+            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
+            try AVAudioSession.sharedInstance().setActive(true)
+        } catch {
+            print("Couldn't set up AVAudioSession")
+        }
+
         super.init()
 
         guard let url = NSBundle.mainBundle().URLForResource(name, withExtension:nil) else {
+            print("Could not retrieve url for \(name)")
             return nil
         }
 
         guard let player = try? AVAudioPlayer(contentsOfURL: url) else {
+            print("Could not create player from contents of : \(url)")
             return nil
         }
 
@@ -139,7 +147,7 @@ public class C4AudioPlayer: NSObject, AVAudioPlayerDelegate {
     /// To set an audio player’s playback rate, you must first enable rate adjustment as described in the enableRate property
     /// description.
     /// ````
-    /// let ap = C4AudioPlayer("audioTrackFileName")
+    /// let ap = AudioPlayer("audioTrackFileName")
     /// ap.enableRate = true
     /// ap.rate = 0.5
     /// ap.play()
@@ -174,7 +182,7 @@ public class C4AudioPlayer: NSObject, AVAudioPlayerDelegate {
     /// The default value for the meteringEnabled property is off (Boolean false). Before using metering for an audio player, you need to enable it by setting this
     /// property to true. If player is an audio player instance variable of your controller class, you enable metering as shown here:
     /// ````
-    /// let ap = C4AudioPlayer("audioTrackFileName")
+    /// let ap = AudioPlayer("audioTrackFileName")
     /// ap.meteringEnabled = true
     /// ````
     public var meteringEnabled: Bool {
@@ -204,7 +212,7 @@ public class C4AudioPlayer: NSObject, AVAudioPlayerDelegate {
     ///                                      selector: "update",
     ///                                      userInfo: nil,
     ///                                       repeats: true)
-    /// let ap = C4AudioPlayer("audioTrackFileName")
+    /// let ap = AudioPlayer("audioTrackFileName")
     /// ap.meteringEnabled = true
     /// func update() {
     ///     ap.updateMeters()
diff --git a/C4/UI/C4CanvasController.swift b/C4/UI/CanvasController.swift
similarity index 74%
rename from C4/UI/C4CanvasController.swift
rename to C4/UI/CanvasController.swift
index 06591792..585c34fc 100644
--- a/C4/UI/C4CanvasController.swift
+++ b/C4/UI/CanvasController.swift
@@ -19,8 +19,8 @@
 
 import UIKit
 
-/// The C4CanvasController class provides the infrastructure for managing the views of your iOS apps. A canvas controller manages a set of views that make up a portion of your app’s user interface. It is responsible for loading and disposing of those views, for managing interactions with those views, and for coordinating responses with any appropriate data objects. Canvas controllers also coordinate their efforts with other controller objects—including other view controllers—and help manage your app’s overall interface.
-public class C4CanvasController: UIViewController {
+/// The CanvasController class provides the infrastructure for managing the views of your iOS apps. A canvas controller manages a set of views that make up a portion of your app’s user interface. It is responsible for loading and disposing of those views, for managing interactions with those views, and for coordinating responses with any appropriate data objects. Canvas controllers also coordinate their efforts with other controller objects—including other view controllers—and help manage your app’s overall interface.
+public class CanvasController: UIViewController {
 
     /// Called after the controller'€™s view is loaded into memory.
     ///
@@ -29,9 +29,9 @@ public class C4CanvasController: UIViewController {
     /// You should **not** override this method, instead use **setup()**.
     public override func viewDidLoad() {
         canvas.backgroundColor = C4Grey
-        C4ShapeLayer.disableActions = true
+        ShapeLayer.disableActions = true
         self.setup()
-        C4ShapeLayer.disableActions = false
+        ShapeLayer.disableActions = false
     }
 
     /// Called during the controller's `viewDidLoad()` method.
diff --git a/C4/UI/C4Circle.swift b/C4/UI/Circle.swift
similarity index 77%
rename from C4/UI/C4Circle.swift
rename to C4/UI/Circle.swift
index bf650910..4e56ac44 100644
--- a/C4/UI/C4Circle.swift
+++ b/C4/UI/Circle.swift
@@ -20,20 +20,23 @@
 import Foundation
 import CoreGraphics
 
-///C4Circle is a concrete subclass of C4Ellipse that has a special initialzer that creates a uniform ellipse.
-public class C4Circle: C4Ellipse {
+///Circle is a concrete subclass of Ellipse that has a special initialzer that creates a uniform ellipse.
+public class Circle: Ellipse {
 
+    public override init() {
+        super.init()
+    }
     /// Creates a circle.
     ///
     /// ````
-    /// let c = C4Circle(center: canvas.center, radius: 50)
+    /// let c = Circle(center: canvas.center, radius: 50)
     /// canvas.add(c)
     /// ````
     ///
     /// - parameter center: The center-point of the circle
     /// - parameter radius: The radius of the circle
-    convenience public init(center: C4Point, radius: Double) {
-        let frame = C4Rect(center.x-radius, center.y-radius, radius * 2, radius * 2)
+    convenience public init(center: Point, radius: Double) {
+        let frame = Rect(center.x-radius, center.y-radius, radius * 2, radius * 2)
         self.init(frame: frame)
     }
 }
diff --git a/C4/UI/C4Curve.swift b/C4/UI/Curve.swift
similarity index 81%
rename from C4/UI/C4Curve.swift
rename to C4/UI/Curve.swift
index 9c46fd08..b577c30c 100644
--- a/C4/UI/C4Curve.swift
+++ b/C4/UI/Curve.swift
@@ -20,27 +20,27 @@
 import QuartzCore
 import UIKit
 
-///  C4Curve is a concrete subclass of C4Shape that has a special initialzer that creates an bezier whose shape is defined by its end points and two control points.
-public class C4Curve: C4Shape {
+///  Curve is a concrete subclass of Shape that has a special initialzer that creates an bezier whose shape is defined by its end points and two control points.
+public class Curve: Shape {
 
     /// The beginning and end points of the receiver. Animatable.
-    public var endPoints = (C4Point(), C4Point()) {
+    public var endPoints = (Point(), Point()) {
         didSet {
             updatePath()
         }
     }
 
     /// The control points of the receiver. Animatable.
-    public var controlPoints = (C4Point(), C4Point()) {
+    public var controlPoints = (Point(), Point()) {
         didSet {
             updatePath()
         }
     }
 
     /// The center of the curve's view.
-    public override var center: C4Point {
+    public override var center: Point {
         get {
-            return C4Point(view.center)
+            return Point(view.center)
         }
         set {
             let diff = newValue - center
@@ -54,9 +54,9 @@ public class C4Curve: C4Shape {
     }
 
     /// The origin of the curve's view.
-    public override var origin: C4Point {
+    public override var origin: Point {
         get {
-            return C4Point(view.frame.origin)
+            return Point(view.frame.origin)
         }
         set {
             let diff = newValue - origin
@@ -72,14 +72,14 @@ public class C4Curve: C4Shape {
     /// Creates a bezier curve.
     ///
     /// ````
-    /// let crv = C4Curve(a: C4Point(), b: C4Point(0,50), c: C4Point(100,50), d: C4Point(100,0))
+    /// let crv = Curve(a: Point(), b: Point(0,50), c: Point(100,50), d: Point(100,0))
     /// ````
     ///
     /// - parameter begin:    The beginning point of the curve.
     /// - parameter control0: The first control point used to define the shape of the curve.
     /// - parameter control1: The second control point used to define the shape of the curve.
     /// - parameter end:      The end point of the curve.
-    convenience public init(begin: C4Point, control0: C4Point, control1: C4Point, end: C4Point) {
+    convenience public init(begin: Point, control0: Point, control1: Point, end: Point) {
         self.init()
         endPoints = (begin, end)
         controlPoints = (control0, control1)
@@ -107,8 +107,8 @@ public class C4Curve: C4Shape {
             CGFloat(controlPoints.1.x), CGFloat(controlPoints.1.y),
             CGFloat(endPoints.1.x), CGFloat(endPoints.1.y))
 
-        self.frame = C4Rect(CGPathGetBoundingBox(curve))
-        self.path = C4Path(path: curve)
+        self.frame = Rect(CGPathGetBoundingBox(curve))
+        self.path = Path(path: curve)
         adjustToFitPath()
     }
 }
diff --git a/C4/UI/C4Ellipse.swift b/C4/UI/Ellipse.swift
similarity index 82%
rename from C4/UI/C4Ellipse.swift
rename to C4/UI/Ellipse.swift
index a0a8338a..51ac4f24 100644
--- a/C4/UI/C4Ellipse.swift
+++ b/C4/UI/Ellipse.swift
@@ -20,25 +20,25 @@
 import Foundation
 import CoreGraphics
 
-///  C4Ellipse is a concrete subclass of C4Shape that has a special initialzer that creates an ellipse whose shape is defined by the object's frame.
-public class C4Ellipse: C4Shape {
+///  Ellipse is a concrete subclass of Shape that has a special initialzer that creates an ellipse whose shape is defined by the object's frame.
+public class Ellipse: Shape {
 
     /// Creates an ellipse.
     ///
     /// ````
-    /// let r = C4Rect(0,0,100,200)
-    /// let e = C4Ellipse(frame: r)
+    /// let r = Rect(0,0,100,200)
+    /// let e = Ellipse(frame: r)
     /// ````
     ///
     /// - parameter frame: The frame within which to draw an ellipse that touches each of the four sides of the frame.
-    convenience public init(frame: C4Rect) {
+    convenience public init(frame: Rect) {
         self.init()
         view.frame = CGRect(frame)
         updatePath()
     }
 
     override func updatePath() {
-        let newPath = C4Path()
+        let newPath = Path()
         newPath.addEllipse(bounds)
         path = newPath
     }
diff --git a/C4/UI/C4Filter.swift b/C4/UI/Filter.swift
similarity index 89%
rename from C4/UI/C4Filter.swift
rename to C4/UI/Filter.swift
index f7b47066..d2f379f2 100644
--- a/C4/UI/C4Filter.swift
+++ b/C4/UI/Filter.swift
@@ -19,14 +19,14 @@
 
 import CoreImage
 
-///  The C4Filter protocol declares a variable and a method that are required by C4Filter object so it can properly interface with Core Image.
-public protocol C4Filter {
+///  The Filter protocol declares a variable and a method that are required by Filter object so it can properly interface with Core Image.
+public protocol Filter {
     /// The name of the Core Image filter (e.g. "CIBloom")
     var filterName: String { get }
 
     ///  Creates a Core Image filter using specified input image.
     ///
-    ///  This method is used internally by C4Image when applying filters to its layer's contents.
+    ///  This method is used internally by Image when applying filters to its layer's contents.
     ///
     ///  ````
     ///  public func createCoreImageFilter(inputImage: CIImage) -> CIFilter {
diff --git a/C4/UI/Filters/C4Bloom.swift b/C4/UI/Filters/Bloom.swift
similarity index 98%
rename from C4/UI/Filters/C4Bloom.swift
rename to C4/UI/Filters/Bloom.swift
index e5b287a5..0f7a68e9 100644
--- a/C4/UI/Filters/C4Bloom.swift
+++ b/C4/UI/Filters/Bloom.swift
@@ -20,7 +20,7 @@
 import CoreImage
 
 ///Softens edges and applies a pleasant glow to an image.
-public struct C4Bloom: C4Filter {
+public struct Bloom: Filter {
     ///The name of the corresponding CIFilter
     public let filterName = "CIBloom"
     ///A Double value whose attribute type is CIAttributeTypeDistance and whose display name is Radius. Default value: 10.0
diff --git a/C4/UI/Filters/C4Checkerboard.swift b/C4/UI/Filters/Checkerboard.swift
similarity index 91%
rename from C4/UI/Filters/C4Checkerboard.swift
rename to C4/UI/Filters/Checkerboard.swift
index 5cf71980..a8626b2e 100644
--- a/C4/UI/Filters/C4Checkerboard.swift
+++ b/C4/UI/Filters/Checkerboard.swift
@@ -22,17 +22,17 @@ import CoreImage
 ///  Generates a checkerboard pattern
 ///
 ///  ````
-///  let image = C4Image(frame: canvas.frame)
-///  image.generate(C4Checkerboard())
+///  let image = Image(frame: canvas.frame)
+///  image.generate(Checkerboard())
 ///  canvas.add(image)
 ///  ````
-public struct C4Checkerboard: C4Generator {
+public struct Checkerboard: Generator {
     ///The name of the Core Image filter.
     public let filterName = "CICheckerboardGenerator"
     ///The colors of the checkerboard. Defaults to: [C4Pink, C4Blue]
-    public var colors: [C4Color] = [C4Pink, C4Blue]
+    public var colors: [Color] = [C4Pink, C4Blue]
     ///The center of the pattern. Defaults to {0,0}
-    public var center: C4Point = C4Point()
+    public var center: Point = Point()
     ///The sharpness of the pattern's edges. Defaults to 1.0
     public var sharpness: Double = 1
     ///The width of the pattern's segments. Defaults to 5.0
diff --git a/C4/UI/Filters/C4ColorBurn.swift b/C4/UI/Filters/ColorBurn.swift
similarity index 93%
rename from C4/UI/Filters/C4ColorBurn.swift
rename to C4/UI/Filters/ColorBurn.swift
index 126fdb19..05b2e445 100644
--- a/C4/UI/Filters/C4ColorBurn.swift
+++ b/C4/UI/Filters/ColorBurn.swift
@@ -23,17 +23,17 @@ import CoreImage
 ///
 ///  The following example uses an image to burn itself.
 ///  ````
-///  let logo = C4Image("logo")
-///  var colorburn = C4ColorBurn()
+///  let logo = Image("logo")
+///  var colorburn = ColorBurn()
 ///  colorburn.background = logo
 ///  logo.apply(colorburn)
 ///  canvas.add(logo)
 ///  ````
-public struct C4ColorBurn: C4Filter {
+public struct ColorBurn: Filter {
     /// The name of the Core Image filter.
     public let filterName = "CIColorBurnBlendMode"
     /// The background image to use for the burn.
-    public var background: C4Image = C4Image()
+    public var background: Image = Image()
     ///Initializes a new filter
     public init() {}
 
diff --git a/C4/UI/Filters/C4DotScreen.swift b/C4/UI/Filters/DotScreen.swift
similarity index 94%
rename from C4/UI/Filters/C4DotScreen.swift
rename to C4/UI/Filters/DotScreen.swift
index ffaf932c..0b0226e2 100644
--- a/C4/UI/Filters/C4DotScreen.swift
+++ b/C4/UI/Filters/DotScreen.swift
@@ -22,15 +22,15 @@ import CoreImage
 ///  Simulates the dot patterns of a halftone screen.
 ///
 ///  ````
-///  let logo = C4Image("logo")
-///  logo.apply(C4DotScreen())
+///  let logo = Image("logo")
+///  logo.apply(DotScreen())
 ///  canvas.add(logo)
 ///  ````
-public struct C4DotScreen: C4Filter {
+public struct DotScreen: Filter {
     /// The name of the Core Image filter.
     public let filterName = "CIDotScreen"
     /// The center of the pattern. Defaults to {0,0}
-    public var center: C4Point = C4Point()
+    public var center: Point = Point()
     /// The width of the dots. Defaults to 2.0
     public var width: Double = 2.0
     /// The angle of the pattern. Defaults to 0.0
diff --git a/C4/UI/Filters/C4GaussianBlur.swift b/C4/UI/Filters/GaussianBlur.swift
similarity index 95%
rename from C4/UI/Filters/C4GaussianBlur.swift
rename to C4/UI/Filters/GaussianBlur.swift
index 4dea7514..585f6fd5 100644
--- a/C4/UI/Filters/C4GaussianBlur.swift
+++ b/C4/UI/Filters/GaussianBlur.swift
@@ -22,11 +22,11 @@ import CoreImage
 ///  Spreads source pixels by an amount specified by a Gaussian distribution.
 ///
 ///  ````
-///  let logo = C4Image("logo")
-///  logo.apply(C4GaussianBlur())
+///  let logo = Image("logo")
+///  logo.apply(GaussianBlur())
 ///  canvas.add(logo)
 ///  ````
-public struct C4GaussianBlur: C4Filter {
+public struct GaussianBlur: Filter {
     /// The name of the Core Image filter.
     public let filterName = "CIGaussianBlur"
 
diff --git a/C4/UI/Filters/C4HueAdjust.swift b/C4/UI/Filters/HueAdjust.swift
similarity index 98%
rename from C4/UI/Filters/C4HueAdjust.swift
rename to C4/UI/Filters/HueAdjust.swift
index 1b8fb83a..d0120948 100644
--- a/C4/UI/Filters/C4HueAdjust.swift
+++ b/C4/UI/Filters/HueAdjust.swift
@@ -20,7 +20,7 @@
 import CoreImage
 
 /// Changes the overall hue, or tint, of the source pixels.
-public struct C4Hue: C4Filter {
+public struct Hue: Filter {
     ///The name of the Core Image filter
     public let filterName = "CIHueAdjust"
     ///The angle to apply to the hue filter. Default value: 1.0
diff --git a/C4/UI/Filters/C4LinearGradient.swift b/C4/UI/Filters/LinearGradient.swift
similarity index 86%
rename from C4/UI/Filters/C4LinearGradient.swift
rename to C4/UI/Filters/LinearGradient.swift
index 513272e3..ea790f4c 100644
--- a/C4/UI/Filters/C4LinearGradient.swift
+++ b/C4/UI/Filters/LinearGradient.swift
@@ -22,19 +22,19 @@ import CoreImage
 ///  Generates a gradient that varies along a linear axis between two defined endpoints.
 ///
 ///  ````
-///  let logo = C4Image(frame: canvas.frame)
-///  var gradient = C4LinearGradient()
+///  let logo = Image(frame: canvas.frame)
+///  var gradient = LinearGradient()
 ///  gradient.points = [logo.origin,logo.frame.max]
 ///  logo.generate(gradient)
 ///  canvas.add(logo)
 ///  ````
-public struct C4LinearGradient: C4Generator {
+public struct LinearGradient: Generator {
     /// The name of the Core Image filter.
     public let filterName = "CISmoothLinearGradient"
     /// The colors of the filter. Defaults to `[C4Pink, C4Blue]`
-    public var colors: [C4Color] = [C4Pink, C4Blue]
-    /// The endpoints of the filter. Defaults to `[C4Point(), C4Point(100, 100)]`
-    public var points: [C4Point] = [C4Point(), C4Point(100, 100)]
+    public var colors: [Color] = [C4Pink, C4Blue]
+    /// The endpoints of the filter. Defaults to `[Point(), Point(100, 100)]`
+    public var points: [Point] = [Point(), Point(100, 100)]
 
     ///Initializes a new filter
     public init() {}
diff --git a/C4/UI/Filters/C4Sepia.swift b/C4/UI/Filters/Sepia.swift
similarity index 95%
rename from C4/UI/Filters/C4Sepia.swift
rename to C4/UI/Filters/Sepia.swift
index a5850793..39bfe9ca 100644
--- a/C4/UI/Filters/C4Sepia.swift
+++ b/C4/UI/Filters/Sepia.swift
@@ -22,11 +22,11 @@ import CoreImage
 ///  Maps the colors of an image to various shades of brown.
 ///
 ///  ````
-///  let logo = C4Image("logo")
-///  logo.apply(C4Sepia())
+///  let logo = Image("logo")
+///  logo.apply(Sepia())
 ///  canvas.add(logo)
 ///  ````
-public struct C4Sepia: C4Filter {
+public struct Sepia: Filter {
     /// The name of the Core Image filter.
     public let filterName = "CISepiaTone"
     /// The intensity of the filter. Defaults to 1.0
diff --git a/C4/UI/Filters/C4Sharpen.swift b/C4/UI/Filters/Sharpen.swift
similarity index 98%
rename from C4/UI/Filters/C4Sharpen.swift
rename to C4/UI/Filters/Sharpen.swift
index 08960f61..1028438d 100644
--- a/C4/UI/Filters/C4Sharpen.swift
+++ b/C4/UI/Filters/Sharpen.swift
@@ -20,7 +20,7 @@
 import CoreImage
 
 ///Increases image detail by sharpening.
-public struct C4Sharpen: C4Filter {
+public struct Sharpen: Filter {
     /// The name of the Core Image filter (e.g. "CIBloom")
     public let filterName = "CISharpenLuminance"
     /// A Double value by which to sharpen the image. Default value: 0.4
diff --git a/C4/UI/Filters/C4Twirl.swift b/C4/UI/Filters/Twirl.swift
similarity index 94%
rename from C4/UI/Filters/C4Twirl.swift
rename to C4/UI/Filters/Twirl.swift
index a2fe03ab..bb3d60f1 100644
--- a/C4/UI/Filters/C4Twirl.swift
+++ b/C4/UI/Filters/Twirl.swift
@@ -22,15 +22,15 @@ import CoreImage
 ///  Rotates pixels around a point to give a twirling effect.
 ///
 ///  ````
-///  let logo = C4Image("logo")
-///  logo.apply(C4Twirl())
+///  let logo = Image("logo")
+///  logo.apply(Twirl())
 ///  canvas.add(logo)
 ///  ````
-public struct C4Twirl: C4Filter {
+public struct Twirl: Filter {
     /// The name of the Core Image filter.
     public let filterName = "CITwirlDistortion"
     /// The center of the twirl effet. Defaults to {0,0}
-    public var center: C4Point = C4Point()
+    public var center: Point = Point()
     /// The radius of the twirl effect. Defaults to 100.o
     public var radius: Double = 100.0
     /// The angle of the twirl effect. Defaults to 𝞹
diff --git a/C4/UI/C4Font.swift b/C4/UI/Font.swift
similarity index 84%
rename from C4/UI/C4Font.swift
rename to C4/UI/Font.swift
index 8c8d4772..8990fbbb 100644
--- a/C4/UI/C4Font.swift
+++ b/C4/UI/Font.swift
@@ -20,8 +20,8 @@
 import QuartzCore
 import UIKit
 
-/// C4Font objects represent fonts to an application, providing access to characteristics of the font and assistance in laying out glyphs relative to one another.
-public class C4Font: NSObject {
+/// Font objects represent fonts to an application, providing access to characteristics of the font and assistance in laying out glyphs relative to one another.
+public class Font: NSObject {
     internal var internalFont: UIFont!
 
     /// The UIFont representation of the receiver.
@@ -32,9 +32,9 @@ public class C4Font: NSObject {
         return internalFont
     }
 
-    /// Initializes a new C4Font using the specified font name and size.
+    /// Initializes a new Font using the specified font name and size.
     /// ````
-    /// let f = C4Font("Helvetica", 20)
+    /// let f = Font("Helvetica", 20)
     /// ````
     /// - parameter name: The name of the font.
     /// - parameter size: The point-size of the font.
@@ -46,19 +46,19 @@ public class C4Font: NSObject {
         internalFont = font
     }
 
-    /// Initializes a new C4Font using the specified font name and default size of 12.0 pt.
+    /// Initializes a new Font using the specified font name and default size of 12.0 pt.
     /// ````
-    /// let f = C4Font("Helvetica")
+    /// let f = Font("Helvetica")
     /// ````
     /// - parameter name: The name of the font
     public convenience init?(name: String) {
         self.init(name: name, size: 12.0)
     }
 
-    /// Initializes a new C4Font using a specified UIFont.
+    /// Initializes a new Font using a specified UIFont.
     /// ````
     /// if let uif = UIFont(name: "Helvetica", size: 24) {
-    ///     let f = C4Font(font: uif)
+    ///     let f = Font(font: uif)
     /// }
     /// ````
     /// - parameter font: A UIFont
@@ -74,7 +74,7 @@ public class C4Font: NSObject {
 
     /// Returns an array of font names available in a particular font family.
     /// ````
-    /// for n in C4Font.fontNames("Avenir Next") {
+    /// for n in Font.fontNames("Avenir Next") {
     ///     println(n)
     /// }
     /// ````
@@ -86,44 +86,44 @@ public class C4Font: NSObject {
 
     /// Returns the font object used for standard interface items in the specified size.
     /// ````
-    /// let f = C4Font.systemFont(20)
+    /// let f = Font.systemFont(20)
     /// ````
     /// - parameter size:	The size (in points) to which the font is scaled.
     /// - returns:	A font object of the specified size.
-    public class func systemFont(size: Double) -> C4Font {
-        return C4Font(font: UIFont.systemFontOfSize(CGFloat(size)))
+    public class func systemFont(size: Double) -> Font {
+        return Font(font: UIFont.systemFontOfSize(CGFloat(size)))
     }
 
     /// Returns the font object used for standard interface items that are rendered in boldface type in the specified size.
     /// ````
-    /// let f = C4Font.boldSystemFont(20)
+    /// let f = Font.boldSystemFont(20)
     /// ````
     /// - parameter size:	The size (in points) to which the font is scaled.
     /// - returns:	A font object of the specified size.
-    public class func boldSystemFont(size: Double) -> C4Font {
-        return C4Font(font: UIFont.boldSystemFontOfSize(CGFloat(size)))
+    public class func boldSystemFont(size: Double) -> Font {
+        return Font(font: UIFont.boldSystemFontOfSize(CGFloat(size)))
     }
 
     /// Returns the font object used for standard interface items that are rendered in italic type in the specified size.
     /// ````
-    /// let f = C4Font.italicSystemFont(20)
+    /// let f = Font.italicSystemFont(20)
     /// ````
     /// - parameter size:	The size (in points) to which the font is scaled.
     /// - returns: A font object of the specified size.
-    public class func italicSystemFont(size: Double) -> C4Font {
-        return C4Font(font: UIFont.italicSystemFontOfSize(CGFloat(size)))
+    public class func italicSystemFont(size: Double) -> Font {
+        return Font(font: UIFont.italicSystemFontOfSize(CGFloat(size)))
     }
 
 
     /// Returns a font object that is the same as the receiver but which has the specified size instead.
     /// ````
-    /// let f = C4Font(name: "Avenir Next")
+    /// let f = Font(name: "Avenir Next")
     /// let f2 = f.font(20)
     /// ````
     /// - parameter size:	The desired size (in points) of the new font object.
     /// - returns:	A font object of the specified size.
-    public func font(size: Double) -> C4Font {
-        return C4Font(font: internalFont!.fontWithSize(CGFloat(size)))
+    public func font(size: Double) -> Font {
+        return Font(font: internalFont!.fontWithSize(CGFloat(size)))
     }
 
     /// The font family name. (read-only)
@@ -137,7 +137,7 @@ public class C4Font: NSObject {
     /// The font name is a name such as HelveticaBold that incorporates the family name and any specific style information for
     /// the font. The value in this property is intended for an application’s internal usage only and should not be displayed.
     /// ````
-    /// let f = C4Font(name: "Avenir Next")
+    /// let f = Font(name: "Avenir Next")
     /// let n = f.fontName
     /// ````
     public var fontName: String {
diff --git a/C4/UI/C4Generator.swift b/C4/UI/Generator.swift
similarity index 89%
rename from C4/UI/C4Generator.swift
rename to C4/UI/Generator.swift
index 214ec9a7..c22a76b4 100644
--- a/C4/UI/C4Generator.swift
+++ b/C4/UI/Generator.swift
@@ -19,14 +19,14 @@
 
 import CoreImage
 
-///  The C4Generator protocol declares a variable and a method that are required by C4Generator object so it can properly interface with Core Image.
-public protocol C4Generator {
+///  The Generator protocol declares a variable and a method that are required by Generator object so it can properly interface with Core Image.
+public protocol Generator {
     /// The name of the Core Image filter (e.g. "CICheckerboardGenerator")
     var filterName: String { get }
 
     ///  Creates a Core Image filter using specified input image.
     ///
-    ///  This method is used internally by C4Image when applying filters to its layer's contents.
+    ///  This method is used internally by Image when applying filters to its layer's contents.
     ///
     ///  ````
     ///  public func createCoreImageFilter(inputImage: CIImage) -> CIFilter {
diff --git a/C4/UI/C4Gradient.swift b/C4/UI/Gradient.swift
similarity index 73%
rename from C4/UI/C4Gradient.swift
rename to C4/UI/Gradient.swift
index 7ec2755d..dfbf409e 100644
--- a/C4/UI/C4Gradient.swift
+++ b/C4/UI/Gradient.swift
@@ -19,20 +19,20 @@
 
 import UIKit
 
-///The C4Gradient class draws a color gradient over its background color, filling the shape of the view (including rounded corners).
-public class C4Gradient: C4View {
+///The Gradient class draws a color gradient over its background color, filling the shape of the view (including rounded corners).
+public class Gradient: View {
     class GradientView: UIView {
-        var gradientLayer: C4GradientLayer {
-            return self.layer as! C4GradientLayer // swiftlint:disable:this force_cast
+        var gradientLayer: GradientLayer {
+            return self.layer as! GradientLayer // swiftlint:disable:this force_cast
         }
 
         override class func layerClass() -> AnyClass {
-            return C4GradientLayer.self
+            return GradientLayer.self
         }
     }
 
     ///The background layer of the receiver.
-    public var gradientLayer: C4GradientLayer {
+    public var gradientLayer: GradientLayer {
         return gradientView.gradientLayer
     }
 
@@ -40,13 +40,13 @@ public class C4Gradient: C4View {
         return view as! GradientView // swiftlint:disable:this force_cast
     }
 
-    ///An array of C4Color objects defining the color of each gradient stop. Animatable.
-    public var colors: [C4Color] {
+    ///An array of Color objects defining the color of each gradient stop. Animatable.
+    public var colors: [Color] {
         get {
             if let cgcolors = gradientLayer.colors as? [CGColorRef] {
-                var array = [C4Color]()
+                var array = [Color]()
                 for c in cgcolors {
-                    array.append(C4Color(c))
+                    array.append(Color(c))
                 }
                 return array
             }
@@ -82,9 +82,9 @@ public class C4Gradient: C4View {
     ///The start point of the gradient when drawn in the layer’s coordinate space. Animatable.
     ///
     ///Defaults to the top-left corner of the frame {0.0,0.0}
-    public var startPoint: C4Point {
+    public var startPoint: Point {
         get {
-            return C4Point(gradientLayer.startPoint)
+            return Point(gradientLayer.startPoint)
         } set {
             gradientLayer.startPoint = CGPoint(newValue)
         }
@@ -93,26 +93,26 @@ public class C4Gradient: C4View {
     ///The end point of the gradient when drawn in the layer’s coordinate space. Animatable.
     ///
     ///Defaults to the top-right corner of the frame {1.0,0.0}
-    public var endPoint: C4Point {
+    public var endPoint: Point {
         get {
-            return C4Point(gradientLayer.endPoint)
+            return Point(gradientLayer.endPoint)
         } set {
             gradientLayer.endPoint = CGPoint(newValue)
         }
     }
 
-    ///  Initializes a new C4Gradient.
+    ///  Initializes a new Gradient.
     ///
-    ///  - parameter frame:     A C4Rect that defines the frame for the gradient's view.
-    ///  - parameter colors:    An array of C4Color objects that define the gradient's colors. Defaults to [C4Blue, C4Purple].
+    ///  - parameter frame:     A Rect that defines the frame for the gradient's view.
+    ///  - parameter colors:    An array of Color objects that define the gradient's colors. Defaults to [C4Blue, C4Purple].
     ///  - parameter locations: An array of Double values that define the location of each gradient stop. Defaults to [0,1]
-    public convenience init(frame: C4Rect, colors: [C4Color] = [C4Blue, C4Purple], locations: [Double] = [0, 1]) {
+    public convenience init(frame: Rect, colors: [Color] = [C4Blue, C4Purple], locations: [Double] = [0, 1]) {
         assert(colors.count == locations.count, "colors and locations need to have the same number of elements")
         self.init()
         self.view = GradientView(frame: CGRect(frame))
         self.colors = colors
         self.locations = locations
-        self.startPoint = C4Point()
-        self.endPoint = C4Point(1, 0)
+        self.startPoint = Point()
+        self.endPoint = Point(1, 0)
     }
 }
diff --git a/C4/UI/C4GradientLayer.swift b/C4/UI/GradientLayer.swift
similarity index 87%
rename from C4/UI/C4GradientLayer.swift
rename to C4/UI/GradientLayer.swift
index 2561b342..181e602d 100644
--- a/C4/UI/C4GradientLayer.swift
+++ b/C4/UI/GradientLayer.swift
@@ -19,8 +19,8 @@
 
 import QuartzCore
 
-/// The C4GradientLayer class draws a color gradient over its background color, filling the shape of the layer (including rounded corners)
-public class C4GradientLayer: CAGradientLayer {
+/// The GradientLayer class draws a color gradient over its background color, filling the shape of the layer (including rounded corners)
+public class GradientLayer: CAGradientLayer {
     /// A boolean value that, when true, prevents the animation of a shape's properties.
     ///
     /// This value can be set globally, after which changes to any shape's properties will be immediate.
@@ -31,7 +31,7 @@ public class C4GradientLayer: CAGradientLayer {
     ///  - parameter key: The identifier of the action.
     ///  - returns: the action object assigned to the specified key.
     public override func actionForKey(key: String) -> CAAction? {
-        if C4ShapeLayer.disableActions == true {
+        if ShapeLayer.disableActions == true {
             return nil
         }
 
@@ -40,7 +40,7 @@ public class C4GradientLayer: CAGradientLayer {
         }
 
         let animation: CABasicAnimation
-        if let viewAnimation = C4ViewAnimation.stack.last as? C4ViewAnimation where viewAnimation.spring != nil {
+        if let viewAnimation = ViewAnimation.stack.last as? ViewAnimation where viewAnimation.spring != nil {
             animation = CASpringAnimation(keyPath: key)
         } else {
             animation = CABasicAnimation(keyPath: key)
diff --git a/C4/UI/C4Image+Crop.swift b/C4/UI/Image+Crop.swift
similarity index 93%
rename from C4/UI/C4Image+Crop.swift
rename to C4/UI/Image+Crop.swift
index 93f1ee74..e50a983e 100644
--- a/C4/UI/C4Image+Crop.swift
+++ b/C4/UI/Image+Crop.swift
@@ -20,11 +20,11 @@
 import QuartzCore
 import UIKit
 
-extension C4Image {
+extension Image {
     ///  Crops the receiver's contents to the specified frame within the receiver's coordinate space.
     ///
-    ///  - parameter rect: a C4Rect
-    public func crop(rect: C4Rect) {
+    ///  - parameter rect: a Rect
+    public func crop(rect: Rect) {
         let intersection = CGRectIntersection(CGRect(rect), CGRect(self.bounds))
         if CGRectIsNull(intersection) { return }
         let inputRectangle = CGRect(
@@ -41,7 +41,7 @@ extension C4Image {
         if let outputImage = crop.outputImage {
             self.output = outputImage
             self.imageView.image = UIImage(CIImage: output)
-            self.frame = C4Rect(intersection)
+            self.frame = Rect(intersection)
         } else {
             print("Failed ot generate outputImage: \(__FUNCTION__)")
         }
diff --git a/C4/UI/C4Image+Filter.swift b/C4/UI/Image+Filter.swift
similarity index 90%
rename from C4/UI/C4Image+Filter.swift
rename to C4/UI/Image+Filter.swift
index c7e76ec7..fea4d5f8 100644
--- a/C4/UI/C4Image+Filter.swift
+++ b/C4/UI/Image+Filter.swift
@@ -20,18 +20,18 @@
 import QuartzCore
 import UIKit
 
-extension C4Image {
+extension Image {
     ///  Applies a fiter to the receiver's contents.
     ///
-    ///  - parameter filter: a C4Filter
-    public func apply(filter: C4Filter) {
+    ///  - parameter filter: a Filter
+    public func apply(filter: Filter) {
         self.apply(filters:[filter])
     }
 
     ///  Applies an array of fiters to the receiver's contents.
     ///
-    ///  - parameter filters: an array of C4Filter objects
-    public func apply(filters filters: [C4Filter]) {
+    ///  - parameter filters: an array of Filter objects
+    public func apply(filters filters: [Filter]) {
         for filter in filters {
             let cifilter = filter.createCoreImageFilter(output)
             if let outputImage = cifilter.outputImage {
diff --git a/C4/UI/C4Image+Generator.swift b/C4/UI/Image+Generator.swift
similarity index 92%
rename from C4/UI/C4Image+Generator.swift
rename to C4/UI/Image+Generator.swift
index 166d348d..3aa551a0 100644
--- a/C4/UI/C4Image+Generator.swift
+++ b/C4/UI/Image+Generator.swift
@@ -20,11 +20,11 @@
 import QuartzCore
 import UIKit
 
-extension C4Image {
+extension Image {
     ///  Applies a generator to the receiver's contents.
     ///
-    ///  - parameter generator: a C4Generator
-    public func generate(generator: C4Generator) {
+    ///  - parameter generator: a Generator
+    public func generate(generator: Generator) {
         let crop = CIFilter(name: "CICrop")!
         crop.setDefaults()
         crop.setValue(CIVector(CGRect:CGRect(self.bounds)), forKey: "inputRectangle")
@@ -41,7 +41,7 @@ extension C4Image {
             let orig = self.origin
             self.view = UIImageView(image: img)
             self.origin = orig
-            _originalSize = C4Size(view.frame.size)
+            _originalSize = Size(view.frame.size)
         } else {
             print("Failed to generate outputImage: \(__FUNCTION__)")
         }
diff --git a/C4/UI/C4Image.swift b/C4/UI/Image.swift
similarity index 80%
rename from C4/UI/C4Image.swift
rename to C4/UI/Image.swift
index ff5e8eb7..7dd3ef1e 100644
--- a/C4/UI/C4Image.swift
+++ b/C4/UI/Image.swift
@@ -19,20 +19,20 @@
 
 import UIKit
 
-/// A C4Image provides a view-based container for displaying a single image. You can create images from files, from other image objects, or from raw image data you receive.
-public class C4Image: C4View, NSCopying {
+/// A Image provides a view-based container for displaying a single image. You can create images from files, from other image objects, or from raw image data you receive.
+public class Image: View, NSCopying {
     internal class ImageView: UIImageView {
-        var imageLayer: C4ImageLayer {
-            return self.layer as! C4ImageLayer // swiftlint:disable:this force_cast
+        var imageLayer: ImageLayer {
+            return self.layer as! ImageLayer // swiftlint:disable:this force_cast
         }
 
         override class func layerClass() -> AnyClass {
-            return C4ImageLayer.self
+            return ImageLayer.self
         }
     }
 
-    /// C4Shape's contents are drawn on a C4ShapeLayer.
-    public var imageLayer: C4ImageLayer {
+    /// C4Shape's contents are drawn on a ShapeLayer.
+    public var imageLayer: ImageLayer {
         get {
             return self.imageView.imageLayer
         }
@@ -40,17 +40,17 @@ public class C4Image: C4View, NSCopying {
 
     //MARK: Initializers
 
-    /// Initializes an empty C4Image
+    /// Initializes an empty Image
     public override init() {
         super.init()
         let uiimage = UIImage()
         self.view = ImageView(image: uiimage)
     }
 
-    /// Initializes a new C4Image using the specified filename from the bundle (i.e. your project), it will also grab images
+    /// Initializes a new Image using the specified filename from the bundle (i.e. your project), it will also grab images
     /// from the web if the filename starts with http.
     /// ````
-    /// let img = C4Image("logo")
+    /// let img = Image("logo")
     /// canvas.add(img)
     /// ````
     /// - parameter name:	The name of the image included in your project, or a web address.
@@ -58,10 +58,10 @@ public class C4Image: C4View, NSCopying {
         self.init(name, scale: 1.0)
     }
 
-    /// Initializes a new C4Image using the specified filename from the bundle (i.e. your project), it will also grab images
+    /// Initializes a new Image using the specified filename from the bundle (i.e. your project), it will also grab images
     /// from the web if the filename starts with http.
     /// ````
-    /// let img = C4Image("http://www.c4ios.com/images/logo@2x.png", scale: 2.0)
+    /// let img = Image("http://www.c4ios.com/images/logo@2x.png", scale: 2.0)
     /// canvas.add(img)
     /// ````
     /// - parameter name:	The name of the image included in your project, or a web address.
@@ -72,25 +72,25 @@ public class C4Image: C4View, NSCopying {
         self.init(uiimage: image, scale: scale)
     }
 
-    /// Initializes a new C4Image using an existing C4Image (basically like copying).
+    /// Initializes a new Image using an existing Image (basically like copying).
     /// ````
-    /// let a = C4Image("logo")
+    /// let a = Image("logo")
     /// canvas.add(a)
-    /// let b = C4Image(image: a)
+    /// let b = Image(image: a)
     /// b.center = canvas.center
     /// canvas.add(b)
     /// ````
-    /// - parameter image: A C4Image.
-    convenience public init(image: C4Image) {
+    /// - parameter image: A Image.
+    convenience public init(image: Image) {
         self.init()
         let uiimage = image.uiimage
         self.view = ImageView(image: uiimage)
     }
 
-    /// Initializes a new C4Image using a UIImage.
+    /// Initializes a new Image using a UIImage.
     /// ````
     /// if let uii = UIImage(named:"logo") {
-    ///     let img = C4Image(uiimage: uii)
+    ///     let img = Image(uiimage: uii)
     ///     canvas.add(img)
     /// }
     /// ````
@@ -99,10 +99,10 @@ public class C4Image: C4View, NSCopying {
         self.init(uiimage: uiimage, scale: 1.0)
     }
 
-    /// Initializes a new C4Image using a UIImage, with option for specifying the scale of the image.
+    /// Initializes a new Image using a UIImage, with option for specifying the scale of the image.
     /// ````
     /// if let uii = UIImage(named:"logo") {
-    ///     let img = C4Image(uiimage: uii, scale: 2.0)
+    ///     let img = Image(uiimage: uii, scale: 2.0)
     ///     canvas.add(img)
     /// }
     /// ````
@@ -117,13 +117,13 @@ public class C4Image: C4View, NSCopying {
         } else {
             self.view = ImageView(image: uiimage)
         }
-        _originalSize = C4Size(view.frame.size)
+        _originalSize = Size(view.frame.size)
     }
 
-    /// Initializes a new C4Image using a CGImageRef.
+    /// Initializes a new Image using a CGImageRef.
     /// ````
     /// let cgi = CGImageCreate()
-    /// let img = C4Image(cgimage: cgi)
+    /// let img = Image(cgimage: cgi)
     /// canvas.add(img)
     /// ````
     /// [Example](https://gist.github.com/C4Framework/06319d420426cb0f1cb3)
@@ -133,10 +133,10 @@ public class C4Image: C4View, NSCopying {
         self.init(uiimage: image, scale: 1.0)
     }
 
-    /// Initializes a new C4Image using a CGImageRef, with option for specifying the scale of the image.
+    /// Initializes a new Image using a CGImageRef, with option for specifying the scale of the image.
     /// ````
     /// let cgi = CGImageCreate()
-    /// let img = C4Image(cgimage: cgi, scale: 2.0)
+    /// let img = Image(cgimage: cgi, scale: 2.0)
     /// canvas.add(img)
     /// ````
     /// - parameter cgimage: A CGImageRef object.
@@ -146,14 +146,14 @@ public class C4Image: C4View, NSCopying {
         self.init(uiimage: image, scale: scale)
     }
 
-    /// Initializes a new C4Image using a CIImage.
+    /// Initializes a new Image using a CIImage.
     /// Use this method if you're working with the output of a CIFilter.
     /// - parameter ciimage: A CIImage object.
     convenience public init(ciimage: CIImage) {
         self.init(ciimage: ciimage, scale: 1.0)
     }
 
-    /// Initializes a new C4Image using a CIImage, with option for specifying the scale of the image.
+    /// Initializes a new Image using a CIImage, with option for specifying the scale of the image.
     /// Use this method if you're working with the output of a CIFilter.
     /// - parameter ciimage: A CIImage object.
     /// - parameter scale: The scale of the image.
@@ -162,7 +162,7 @@ public class C4Image: C4View, NSCopying {
         self.init(uiimage: image, scale: scale)
     }
 
-    /// Initializes a new C4Image using raw data.
+    /// Initializes a new Image using raw data.
     /// Use this if you download an image as data you can pass it here to create an image.
     /// See the body of init(url:) to see how to download an image as data.
     /// - parameter data: An NSData object.
@@ -170,7 +170,7 @@ public class C4Image: C4View, NSCopying {
         self.init(data: data, scale: 1.0)
     }
 
-    /// Initializes a new C4Image using raw data, with option for specifying the scale of the image.
+    /// Initializes a new Image using raw data, with option for specifying the scale of the image.
     /// Use this if you download an image as data you can pass it here to create an image.
     /// See the body of init(url:) to see how to download an image as data.
     /// - parameter data: An NSData object.
@@ -180,10 +180,10 @@ public class C4Image: C4View, NSCopying {
         self.init(uiimage: image!, scale: scale)
     }
 
-    /// Initializes a new C4Image from an URL.
+    /// Initializes a new Image from an URL.
     /// ````
     ///  if let url = NSURL(string: "http://www.c4ios.com/images/logo@2x.png") {
-    ///      let img = C4Image(url: url)
+    ///      let img = Image(url: url)
     ///      canvas.add(img)
     /// }
     /// ````
@@ -192,10 +192,10 @@ public class C4Image: C4View, NSCopying {
         self.init(url: url, scale: 1.0)
     }
 
-    /// Initializes a new C4Image from an URL, with option for specifying the scale of the image.
+    /// Initializes a new Image from an URL, with option for specifying the scale of the image.
     /// ````
     /// if let url = NSURL(string: "http://www.c4ios.com/images/logo@2x.png") {
-    ///     let img = C4Image(url: url, scale: 2.0)
+    ///     let img = Image(url: url, scale: 2.0)
     ///     canvas.add(img)
     /// }
     /// ````
@@ -220,12 +220,12 @@ public class C4Image: C4View, NSCopying {
         self.init()
     }
 
-    /// Initializes a new C4Image using raw data. This method differs from `C4Image(data:...)` in that you can pass an array of
+    /// Initializes a new Image using raw data. This method differs from `Image(data:...)` in that you can pass an array of
     /// raw data to the initializer. This works if you're creating your own raw images by changing the values of individual
     /// pixels. Pixel data should be RGBA.
     /// - parameter pixels: An array of raw pixel data.
     /// - parameter size: The size {w, h} of the image you're creating based on the pixel array.
-    convenience public init(pixels: [Pixel], size: C4Size) {
+    convenience public init(pixels: [Pixel], size: Size) {
         let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
         let bitmapInfo: CGBitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue)
         let bitsPerComponent: Int = 8
@@ -257,9 +257,9 @@ public class C4Image: C4View, NSCopying {
         self.init(cgimage: cgim!)
     }
 
-    /// Initializes a new C4Image using another image.
-    /// - parameter c4image: An C4Image around which the new image is created.
-    convenience public init(c4image: C4Image) {
+    /// Initializes a new Image using another image.
+    /// - parameter c4image: An Image around which the new image is created.
+    convenience public init(c4image: Image) {
         let cgim = c4image.cgimage
         self.init(cgimage: cgim)
     }
@@ -269,7 +269,7 @@ public class C4Image: C4View, NSCopying {
     /// - returns: a new instance that’s a copy of the receiver.
     public func copyWithZone(zone: NSZone) -> AnyObject {
         let uiimage = UIImage(CGImage: self.contents)
-        let img = C4Image(uiimage: uiimage, scale: scale)
+        let img = Image(uiimage: uiimage, scale: scale)
         img.frame = self.frame
         img.constrainsProportions = self.constrainsProportions
         img._originalSize = _originalSize
@@ -326,13 +326,13 @@ public class C4Image: C4View, NSCopying {
     /// - returns: A Double value representing the cumulative rotation of the view, measured in Radians.
     public override var rotation: Double {
         get {
-            if let number = imageLayer.valueForKeyPath(C4Layer.rotationKey) as? NSNumber {
+            if let number = imageLayer.valueForKeyPath(Layer.rotationKey) as? NSNumber {
                 return number.doubleValue
             }
             return  0.0
         }
         set {
-            imageLayer.setValue(newValue, forKeyPath: C4Layer.rotationKey)
+            imageLayer.setValue(newValue, forKeyPath: Layer.rotationKey)
         }
     }
 
@@ -350,7 +350,7 @@ public class C4Image: C4View, NSCopying {
         get {
             return Double(view.frame.size.width)
         } set(val) {
-            var newSize = C4Size(val, Double(view.frame.size.height))
+            var newSize = Size(val, Double(view.frame.size.height))
             if constrainsProportions {
                 let ratio = Double(self.size.height / self.size.width)
                 newSize.height = val * ratio
@@ -369,7 +369,7 @@ public class C4Image: C4View, NSCopying {
         get {
             return Double(view.frame.size.height)
         } set(val) {
-            var newSize = C4Size(Double(view.frame.size.width), val)
+            var newSize = Size(Double(view.frame.size.width), val)
             if constrainsProportions {
                 let ratio = Double(self.size.width / self.size.height)
                 newSize.width = val * ratio
@@ -385,9 +385,9 @@ public class C4Image: C4View, NSCopying {
     /// The default value of this property is `false`.
     public var constrainsProportions: Bool = false
 
-    internal var _originalSize: C4Size = C4Size()
+    internal var _originalSize: Size = Size()
     /// The original size of the receiver when it was initialized.
-    public var originalSize: C4Size {
+    public var originalSize: Size {
         get {
             return _originalSize
         }
diff --git a/C4/UI/C4ImageLayer.swift b/C4/UI/ImageLayer.swift
similarity index 88%
rename from C4/UI/C4ImageLayer.swift
rename to C4/UI/ImageLayer.swift
index bb910453..ab12bf80 100644
--- a/C4/UI/C4ImageLayer.swift
+++ b/C4/UI/ImageLayer.swift
@@ -20,14 +20,14 @@
 import QuartzCore
 
 ///Subclass of CALayer that handles animating its contents.
-public class C4ImageLayer: CALayer {
+public class ImageLayer: CALayer {
     /// Configures basic options for a CABasicAnimation.
     ///
     /// The options set in this method are favorable for the inner workings of C4's animation behaviours.
     /// - parameter key: The identifier of the action.
     /// - returns: The object that provides the action for key.
     public override func actionForKey(key: String) -> CAAction? {
-        if C4ShapeLayer.disableActions == true {
+        if ShapeLayer.disableActions == true {
             return nil
         }
 
@@ -37,7 +37,7 @@ public class C4ImageLayer: CALayer {
         }
 
         let animation: CABasicAnimation
-        if let viewAnimation = C4ViewAnimation.stack.last as? C4ViewAnimation where viewAnimation.spring != nil {
+        if let viewAnimation = ViewAnimation.stack.last as? ViewAnimation where viewAnimation.spring != nil {
             animation = CASpringAnimation(keyPath: key)
         } else {
             animation = CABasicAnimation(keyPath: key)
@@ -46,8 +46,8 @@ public class C4ImageLayer: CALayer {
         animation.configureOptions()
         animation.fromValue = valueForKey(key)
 
-        if key == C4Layer.rotationKey {
-            if let layer = presentationLayer() as? C4ShapeLayer {
+        if key == Layer.rotationKey {
+            if let layer = presentationLayer() as? ShapeLayer {
                 animation.fromValue = layer.valueForKey(key)
             }
         }
@@ -73,7 +73,7 @@ public class C4ImageLayer: CALayer {
     /// - parameter layer: Another CALayer
     public override init(layer: AnyObject) {
         super.init(layer: layer)
-        if let layer = layer as? C4ImageLayer {
+        if let layer = layer as? ImageLayer {
             _rotation = layer._rotation
         }
     }
@@ -89,7 +89,7 @@ public class C4ImageLayer: CALayer {
     /// - parameter key: The name of one of the receiver's properties
     public override func setValue(value: AnyObject?, forKey key: String) {
         super.setValue(value, forKey: key)
-        if key == C4Layer.rotationKey {
+        if key == Layer.rotationKey {
             _rotation = value as? Double ?? 0.0
         }
     }
@@ -98,7 +98,7 @@ public class C4ImageLayer: CALayer {
     /// - parameter key: A string that specifies an attribute of the layer.
     /// - returns: A Boolean indicating whether changes to the specified key require the layer to be redisplayed.
     public override class func needsDisplayForKey(key: String) -> Bool {
-        if  key == C4Layer.rotationKey {
+        if  key == Layer.rotationKey {
             return true
         }
         return super.needsDisplayForKey(key)
@@ -107,7 +107,7 @@ public class C4ImageLayer: CALayer {
     /// Reloads the content of this layer.
     /// Do not call this method directly.
     public override func display() {
-        guard let presentation = presentationLayer() as? C4ImageLayer else {
+        guard let presentation = presentationLayer() as? ImageLayer else {
             return
         }
         setValue(presentation._rotation, forKeyPath: "transform.rotation.z")
diff --git a/C4/UI/C4Layer.swift b/C4/UI/Layer.swift
similarity index 88%
rename from C4/UI/C4Layer.swift
rename to C4/UI/Layer.swift
index 71654428..248f3d0c 100644
--- a/C4/UI/C4Layer.swift
+++ b/C4/UI/Layer.swift
@@ -20,7 +20,7 @@
 import QuartzCore
 
 /// A subclass of CALayer that has a rotation property.
-public class C4Layer: CALayer {
+public class Layer: CALayer {
     static let rotationKey = "rotation"
 
     private var _rotation = 0.0
@@ -31,21 +31,21 @@ public class C4Layer: CALayer {
         return _rotation
     }
 
-    /// Initializes a new C4Layer
+    /// Initializes a new Layer
     public override init() {
         super.init()
     }
 
-    /// Initializes a new C4Layer from a specified layer of any other type.
+    /// Initializes a new Layer from a specified layer of any other type.
     /// - parameter layer: Another CALayer
     public override init(layer: AnyObject) {
         super.init(layer: layer)
-        if let layer = layer as? C4Layer {
+        if let layer = layer as? Layer {
             _rotation = layer._rotation
         }
     }
 
-    /// Initializes a new C4Layer from data in a given unarchiver.
+    /// Initializes a new Layer from data in a given unarchiver.
     /// - parameter coder: An unarchiver object.
     public required init?(coder: NSCoder) {
         super.init(coder: coder)
@@ -56,7 +56,7 @@ public class C4Layer: CALayer {
     /// - parameter key: The name of one of the receiver's properties
     public override func setValue(value: AnyObject?, forKey key: String) {
         super.setValue(value, forKey: key)
-        if key == C4Layer.rotationKey {
+        if key == Layer.rotationKey {
             _rotation = value as? Double ?? 0.0
         }
     }
@@ -65,10 +65,10 @@ public class C4Layer: CALayer {
     ///  - parameter key: The identifier of the action.
     ///  - returns: the action object assigned to the specified key.
     public override func actionForKey(key: String) -> CAAction? {
-        if key == C4Layer.rotationKey {
+        if key == Layer.rotationKey {
             let animation = CABasicAnimation(keyPath: key)
             animation.configureOptions()
-            if let layer = presentationLayer() as? C4Layer {
+            if let layer = presentationLayer() as? Layer {
                 animation.fromValue = layer.valueForKey(key)
             }
             return animation
@@ -80,7 +80,7 @@ public class C4Layer: CALayer {
     /// - parameter key: A string that specifies an attribute of the layer.
     /// - returns: A Boolean indicating whether changes to the specified key require the layer to be redisplayed.
     public override class func needsDisplayForKey(key: String) -> Bool {
-        if  key == C4Layer.rotationKey {
+        if  key == Layer.rotationKey {
             return true
         }
         return super.needsDisplayForKey(key)
@@ -89,7 +89,7 @@ public class C4Layer: CALayer {
     /// Reloads the content of this layer.
     /// Do not call this method directly.
     public override func display() {
-        guard let presentation = presentationLayer() as? C4Layer else {
+        guard let presentation = presentationLayer() as? Layer else {
             return
         }
         setValue(presentation._rotation, forKeyPath: "transform.rotation.z")
diff --git a/C4/UI/C4Line.swift b/C4/UI/Line.swift
similarity index 70%
rename from C4/UI/C4Line.swift
rename to C4/UI/Line.swift
index e8e965c5..a7f23200 100644
--- a/C4/UI/C4Line.swift
+++ b/C4/UI/Line.swift
@@ -20,17 +20,17 @@
 import Foundation
 import CoreGraphics
 
-///C4Line is a is a concrete subclass of C4Polygon that contains only two points.
+///Line is a is a concrete subclass of Polygon that contains only two points.
 ///
 ///This subclass overrides the `points` variable so that it can only ever have 2 points, and also has an `endPoints` variable that allows the user to edit either end of the line (animatable).
-public class C4Line: C4Polygon {
+public class Line: Polygon {
 
     /// The end points the receiver's line. Animatable.
     ///
-    /// Assigning a tuple of C4Point values to this object will cause the receiver to update itself.
+    /// Assigning a tuple of Point values to this object will cause the receiver to update itself.
     ///
     /// - returns: A tuple (2) of C4Points that make up the the begin and end points of the line.
-    public var endPoints: (C4Point, C4Point) = (C4Point(), C4Point(100, 0)) {
+    public var endPoints: (Point, Point) = (Point(), Point(100, 0)) {
         didSet {
             updatePath()
         }
@@ -41,7 +41,7 @@ public class C4Line: C4Polygon {
             return
         }
 
-        let p = C4Path()
+        let p = Path()
         p.moveToPoint(endPoints.0)
         p.addLineToPoint(endPoints.1)
         path = p
@@ -50,10 +50,10 @@ public class C4Line: C4Polygon {
 
     /// The center point (top-left) of the receiver's frame. Animatable.
     ///
-    /// - returns: A C4Point, the receiver's center.
-    public override var center: C4Point {
+    /// - returns: A Point, the receiver's center.
+    public override var center: Point {
         get {
-            return C4Point(view.center)
+            return Point(view.center)
         }
         set {
             let diff = newValue - center
@@ -66,10 +66,10 @@ public class C4Line: C4Polygon {
 
     /// The origin point (top-left) of the receiver's frame. Animatable.
     ///
-    /// - returns: A C4Point, the receiver's origin.
-    public override var origin: C4Point {
+    /// - returns: A Point, the receiver's origin.
+    public override var origin: Point {
         get {
-            return C4Point(view.frame.origin)
+            return Point(view.frame.origin)
         }
         set {
             let diff = newValue - origin
@@ -82,10 +82,10 @@ public class C4Line: C4Polygon {
 
     /// The points that make up the line. Animatable.
     ///
-    /// Assigning an array of C4Point values to this object will cause the receiver to update itself.
+    /// Assigning an array of Point values to this object will cause the receiver to update itself.
     ///
-    /// - returns: A C4Point array of 2 points.
-    public override var points: [C4Point] {
+    /// - returns: A Point array of 2 points.
+    public override var points: [Point] {
         get {
             return [endPoints.0, endPoints.1]
         } set {
@@ -103,24 +103,24 @@ public class C4Line: C4Polygon {
         }
     }
 
-    /// Initializes a new C4Polygon using the specified array of points.
+    /// Initializes a new Polygon using the specified array of points.
     ///
     /// Protects against trying to create a polygon with only 1 point (i.e. requires 2 points).
     /// Trims point array if count > 2.
     ///
     /// ````
-    /// let a = C4Point(100,100)
-    /// let b = C4Point(200,200)
+    /// let a = Point(100,100)
+    /// let b = Point(200,200)
     ///
-    /// let l = C4Line([a,b])
+    /// let l = Line([a,b])
     /// ````
     ///
-    /// - parameter points: An array of C4Point structs.
-    public override init(_ points: [C4Point]) {
-        let firstTwo = [C4Point](points[0...1])
+    /// - parameter points: An array of Point structs.
+    public override init(_ points: [Point]) {
+        let firstTwo = [Point](points[0...1])
         super.init(firstTwo)
 
-        let path = C4Path()
+        let path = Path()
         path.moveToPoint(points[0])
         for i in 1..<points.count {
             path.addLineToPoint(points[i])
@@ -129,38 +129,38 @@ public class C4Line: C4Polygon {
         adjustToFitPath()
     }
 
-    /// Initializes a new C4Line using the specified tuple of points.
+    /// Initializes a new Line using the specified tuple of points.
     ///
     /// ````
-    /// let a = C4Point(100,100)
-    /// let b = C4Point(200,200)
+    /// let a = Point(100,100)
+    /// let b = Point(200,200)
     ///
-    /// let l = C4Line((a,b))
+    /// let l = Line((a,b))
     /// ````
     ///
-    /// - parameter points: A tuple of C4Point structs.
-    public init(_ points: (C4Point, C4Point)) {
+    /// - parameter points: A tuple of Point structs.
+    public init(_ points: (Point, Point)) {
         self.endPoints = points
         super.init([points.0, points.1])
     }
 
-    /// Initializes a new C4Line using two specified points.
+    /// Initializes a new Line using two specified points.
     ///
     /// ````
-    /// let a = C4Point(100,100)
-    /// let b = C4Point(200,200)
+    /// let a = Point(100,100)
+    /// let b = Point(200,200)
     ///
-    /// let l = C4Line(begin: a, end: b)
+    /// let l = Line(begin: a, end: b)
     /// ````
     ///
     /// - parameter begin: The start point of the line.
     /// - parameter end: The end point of the line.
-    public convenience init(begin: C4Point, end: C4Point) {
+    public convenience init(begin: Point, end: Point) {
         let points = (begin, end)
         self.init(points)
     }
 
-    /// Initializes a new C4Polygon from data in a given unarchiver.
+    /// Initializes a new Polygon from data in a given unarchiver.
     /// - parameter coder: An unarchiver object.
     required public init(coder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
diff --git a/C4/UI/C4Movie.swift b/C4/UI/Movie.swift
similarity index 82%
rename from C4/UI/C4Movie.swift
rename to C4/UI/Movie.swift
index 76d401e1..c3687830 100644
--- a/C4/UI/C4Movie.swift
+++ b/C4/UI/Movie.swift
@@ -20,12 +20,12 @@
 import UIKit
 import AVFoundation
 
-///This document describes the C4Movie class. You use a C4Movie object to implement the playback of video files, it encapulates an AVQueuePlayer object which handles the loading and control of assets.
+///This document describes the Movie class. You use a Movie object to implement the playback of video files, it encapulates an AVQueuePlayer object which handles the loading and control of assets.
 ///
-///The C4Movie class is meant to simplify the addition of videos to your application. It is also a subclass of C4View, and so has all the common animation, interaction and notification capabilities.
+///The Movie class is meant to simplify the addition of videos to your application. It is also a subclass of View, and so has all the common animation, interaction and notification capabilities.
 ///
 ///A C4Movie’s resizing behaviour is to map itself to the edges of its visible frame. This functionality implicitly uses AVLayerVideoGravityResize as its layer’s default gravity. You can change the frame of the movie from an arbitrary shape back to its original proportion by using its originalSize, originalRatio, or by independently setting either its width or height properties.
-public class C4Movie: C4View {
+public class Movie: View {
     var player: AVQueuePlayer?
     var currentItem: AVPlayerItem?
     var reachedEndAction: (()->())?
@@ -43,7 +43,7 @@ public class C4Movie: C4View {
         get {
             return Double(view.frame.size.width)
         } set(val) {
-            var newSize = C4Size(val, height)
+            var newSize = Size(val, height)
             if constrainsProportions {
                 newSize.height = val * height / width
             }
@@ -61,7 +61,7 @@ public class C4Movie: C4View {
         get {
             return Double(view.frame.size.height)
         } set(val) {
-            var newSize = C4Size(Double(view.frame.size.width), val)
+            var newSize = Size(Double(view.frame.size.width), val)
             if constrainsProportions {
                 let ratio = Double(self.size.width / self.size.height)
                 newSize.width = val * ratio
@@ -78,7 +78,7 @@ public class C4Movie: C4View {
     public var constrainsProportions: Bool = true
 
     /// The original size of the receiver when it was initialized.
-    public internal(set) var originalSize: C4Size = C4Size(1, 1)
+    public internal(set) var originalSize: Size = Size(1, 1)
 
     /// The original width/height ratio of the receiver when it was initialized.
     public var originalRatio: Double {
@@ -87,7 +87,7 @@ public class C4Movie: C4View {
         }
     }
 
-    var movieLayer: C4PlayerLayer {
+    var movieLayer: PlayerLayer {
         get {
             return self.movieView.movieLayer
         }
@@ -98,12 +98,12 @@ public class C4Movie: C4View {
     }
 
     class MovieView: UIView {
-        var movieLayer: C4PlayerLayer {
-            return self.layer as! C4PlayerLayer // swiftlint:disable:this force_cast
+        var movieLayer: PlayerLayer {
+            return self.layer as! PlayerLayer // swiftlint:disable:this force_cast
         }
 
         override class func layerClass() -> AnyClass {
-            return C4PlayerLayer.self
+            return PlayerLayer.self
         }
     }
 
@@ -111,21 +111,29 @@ public class C4Movie: C4View {
     /// - returns: A Double value representing the cumulative rotation of the view, measured in Radians.
     public override var rotation: Double {
         get {
-            if let number = movieLayer.valueForKeyPath(C4Layer.rotationKey) as? NSNumber {
+            if let number = movieLayer.valueForKeyPath(Layer.rotationKey) as? NSNumber {
                 return number.doubleValue
             }
             return  0.0
         }
         set {
-            movieLayer.setValue(newValue, forKeyPath: C4Layer.rotationKey)
+            movieLayer.setValue(newValue, forKeyPath: Layer.rotationKey)
         }
     }
 
-    /// Initializes a new C4Movie using the specified filename from the bundle (i.e. your project).
+    /// Initializes a new Movie using the specified filename from the bundle (i.e. your project).
     ///
     /// - parameter filename:	The name of the movie file included in your project.
     public convenience init?(_ filename: String) {
+        do {
+            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
+            try AVAudioSession.sharedInstance().setActive(true)
+        } catch {
+            print("Couldn't set up AVAudioSession")
+        }
+
         guard let url = NSBundle.mainBundle().URLForResource(filename, withExtension: nil) else {
+            print("Couldn't retrieve url for: \(filename)")
             return nil
         }
 
@@ -134,9 +142,9 @@ public class C4Movie: C4View {
 
         //grab the movie track and size
         let movieTrack = tracks[0]
-        let size = C4Size(movieTrack.naturalSize)
+        let size = Size(movieTrack.naturalSize)
 
-        self.init(frame: C4Rect(0, 0, Double(size.width), Double(size.height)))
+        self.init(frame: Rect(0, 0, Double(size.width), Double(size.height)))
         //initialize player with item
         let newPlayer = AVQueuePlayer(playerItem: AVPlayerItem(asset: asset))
         newPlayer.actionAtItemEnd = .Pause
@@ -155,10 +163,10 @@ public class C4Movie: C4View {
         originalSize = self.size
     }
 
-    /// Initializes a new C4Movie using the specified frame.
+    /// Initializes a new Movie using the specified frame.
     ///
     /// - parameter frame:	The frame of the new movie object.
-    public init(frame: C4Rect) {
+    public init(frame: Rect) {
         super.init()
         self.view = MovieView(frame: CGRect(frame))
     }
diff --git a/C4/UI/C4PlayerLayer.swift b/C4/UI/PlayerLayer.swift
similarity index 88%
rename from C4/UI/C4PlayerLayer.swift
rename to C4/UI/PlayerLayer.swift
index 254aed09..35c1fd3a 100644
--- a/C4/UI/C4PlayerLayer.swift
+++ b/C4/UI/PlayerLayer.swift
@@ -21,7 +21,7 @@ import QuartzCore
 import AVFoundation
 
 /// Extension for CAShapeLayer that allows overriding the actions for specific properties.
-public class C4PlayerLayer: AVPlayerLayer {
+public class PlayerLayer: AVPlayerLayer {
     /// A boolean value that, when true, prevents the animation of a shape's properties.
     ///
     /// ````
@@ -38,17 +38,17 @@ public class C4PlayerLayer: AVPlayerLayer {
     ///
     ///  - returns: the action object assigned to the specified key.
     public override func actionForKey(key: String) -> CAAction? {
-        if C4ShapeLayer.disableActions == true {
+        if ShapeLayer.disableActions == true {
             return nil
         }
 
-        let animatableProperties = [C4Layer.rotationKey]
+        let animatableProperties = [Layer.rotationKey]
         if !animatableProperties.contains(key) {
             return super.actionForKey(key)
         }
 
         let animation: CABasicAnimation
-        if let viewAnimation = C4ViewAnimation.stack.last as? C4ViewAnimation where viewAnimation.spring != nil {
+        if let viewAnimation = ViewAnimation.stack.last as? ViewAnimation where viewAnimation.spring != nil {
             animation = CASpringAnimation(keyPath: key)
         } else {
             animation = CABasicAnimation(keyPath: key)
@@ -57,8 +57,8 @@ public class C4PlayerLayer: AVPlayerLayer {
         animation.configureOptions()
         animation.fromValue = valueForKey(key)
 
-        if key == C4Layer.rotationKey {
-            if let layer = presentationLayer() as? C4ShapeLayer {
+        if key == Layer.rotationKey {
+            if let layer = presentationLayer() as? ShapeLayer {
                 animation.fromValue = layer.valueForKey(key)
             }
         }
@@ -83,7 +83,7 @@ public class C4PlayerLayer: AVPlayerLayer {
     /// - parameter layer: Another CALayer
     public override init(layer: AnyObject) {
         super.init(layer: layer)
-        if let layer = layer as? C4PlayerLayer {
+        if let layer = layer as? PlayerLayer {
             _rotation = layer._rotation
         }
     }
@@ -99,7 +99,7 @@ public class C4PlayerLayer: AVPlayerLayer {
     /// - parameter key: The name of one of the receiver's properties
     public override func setValue(value: AnyObject?, forKey key: String) {
         super.setValue(value, forKey: key)
-        if key == C4Layer.rotationKey {
+        if key == Layer.rotationKey {
             _rotation = value as? Double ?? 0.0
         }
     }
@@ -108,7 +108,7 @@ public class C4PlayerLayer: AVPlayerLayer {
     /// - parameter key: A string that specifies an attribute of the layer.
     /// - returns: A Boolean indicating whether changes to the specified key require the layer to be redisplayed.
     public override class func needsDisplayForKey(key: String) -> Bool {
-        if  key == C4Layer.rotationKey {
+        if  key == Layer.rotationKey {
             return true
         }
         return super.needsDisplayForKey(key)
@@ -117,7 +117,7 @@ public class C4PlayerLayer: AVPlayerLayer {
     /// Reloads the content of this layer.
     /// Do not call this method directly.
     public override func display() {
-        guard let presentation = presentationLayer() as? C4PlayerLayer else {
+        guard let presentation = presentationLayer() as? PlayerLayer else {
             return
         }
         setValue(presentation._rotation, forKeyPath: "transform.rotation.z")
diff --git a/C4/UI/C4Polygon.swift b/C4/UI/Polygon.swift
similarity index 75%
rename from C4/UI/C4Polygon.swift
rename to C4/UI/Polygon.swift
index 91ea8116..d6211122 100644
--- a/C4/UI/C4Polygon.swift
+++ b/C4/UI/Polygon.swift
@@ -20,56 +20,56 @@
 import Foundation
 import CoreGraphics
 
-///  C4Polygon is a concrete subclass of C4Shape that has a special initialzer that creates a non-uniform shape made up of 3 or more points.
-public class C4Polygon: C4Shape {
+///  Polygon is a concrete subclass of Shape that has a special initialzer that creates a non-uniform shape made up of 3 or more points.
+public class Polygon: Shape {
 
     /// Returns the array of points that make up the polygon.
     ///
-    /// Assigning an array of C4Point values to this object will cause the receiver to update itself.
+    /// Assigning an array of Point values to this object will cause the receiver to update itself.
     ///
     /// ````
-    /// let p = C4Polygon()
-    /// let a = C4Point()
-    /// let b = C4Point(100,100)
-    /// let c = C4Point(200,0)
+    /// let p = Polygon()
+    /// let a = Point()
+    /// let b = Point(100,100)
+    /// let c = Point(200,0)
     /// p.points = [a,b,c]
     /// p.center = canvas.center
     /// canvas.add(p)
     /// ````
-    public var points: [C4Point] {
+    public var points: [Point] {
         didSet {
             updatePath()
         }
     }
 
-    ///  Initializes a default C4Polygon.
-    override init() {
+    ///  Initializes a default Polygon.
+    public override init() {
         self.points = []
         super.init()
         fillColor = clear
     }
 
-    /// Initializes a new C4Polygon using the specified array of points.
+    /// Initializes a new Polygon using the specified array of points.
     ///
     /// Protects against trying to create a polygon with only 1 point (i.e. requires 2 or more points).
     ///
     /// ````
-    /// let a = C4Point()
-    /// let b = C4Point(100,100)
-    /// let c = C4Point(200,0)
-    /// let p = C4Polygon([a,b,c])
+    /// let a = Point()
+    /// let b = Point(100,100)
+    /// let c = Point(200,0)
+    /// let p = Polygon([a,b,c])
     /// p.center = canvas.center
     /// canvas.add(p)
     /// ````
-    /// - parameter points: An array of C4Point structs.
-    public init(_ points: [C4Point]) {
+    /// - parameter points: An array of Point structs.
+    public init(_ points: [Point]) {
         assert(points.count >= 2, "To create a Polygon you need to specify an array of at least 2 points")
         self.points = points
         super.init()
 
         fillColor = clear
 
-        let path = C4Path()
+        let path = Path()
         path.moveToPoint(points[0])
         for i in 1..<points.count {
             path.addLineToPoint(points[i])
@@ -79,7 +79,7 @@ public class C4Polygon: C4Shape {
         adjustToFitPath()
     }
 
-    /// Initializes a new C4Polygon from data in a given unarchiver.
+    /// Initializes a new Polygon from data in a given unarchiver.
     /// - parameter coder: An unarchiver object.
     required public init(coder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
@@ -87,7 +87,7 @@ public class C4Polygon: C4Shape {
 
     override func updatePath() {
         if points.count > 1 {
-            let p = C4Path()
+            let p = Path()
             p.moveToPoint(points[0])
 
             for i in 1..<points.count {
diff --git a/C4/UI/C4QuadCurve.swift b/C4/UI/QuadCurve.swift
similarity index 72%
rename from C4/UI/C4QuadCurve.swift
rename to C4/UI/QuadCurve.swift
index 1a2b909f..d774e702 100644
--- a/C4/UI/C4QuadCurve.swift
+++ b/C4/UI/QuadCurve.swift
@@ -20,27 +20,27 @@
 import QuartzCore
 import UIKit
 
-///  C4QuadCurve is a concrete subclass of C4Curve that modifies it shape based on a single point rather than 2 used by its parent class.
-public class C4QuadCurve: C4Curve {
+///  QuadCurve is a concrete subclass of Curve that modifies it shape based on a single point rather than 2 used by its parent class.
+public class QuadCurve: Curve {
 
-    /// A C4Point used to calculate the shape of the quadratic curve.
-    public var controlPoint = C4Point() {
+    /// A Point used to calculate the shape of the quadratic curve.
+    public var controlPoint = Point() {
         didSet {
             self.controlPoints = (controlPoint, controlPoint)
         }
     }
 
-    /// Initializes a new C4QuadCurve.
+    /// Initializes a new QuadCurve.
     ///
     /// ````
-    /// let curve = C4QuadCurve(a: C4Point(), b: C4Point(50,50), c: C4Point(100,0))
+    /// let curve = QuadCurve(a: Point(), b: Point(50,50), c: Point(100,0))
     /// canvas.add(curve)
     /// ````
     ///
     /// - parameter begin: The beginning point of the curve.
-    /// - parameter control: A single C4Point used to calculate the shape of the curve.
+    /// - parameter control: A single Point used to calculate the shape of the curve.
     /// - parameter end: The end point of the curve.
-    convenience public init(begin: C4Point, control: C4Point, end: C4Point) {
+    convenience public init(begin: Point, control: Point, end: Point) {
         self.init(begin: begin, control0: control, control1: control, end: end)
     }
 }
diff --git a/C4/UI/C4Rectangle.swift b/C4/UI/Rectangle.swift
similarity index 73%
rename from C4/UI/C4Rectangle.swift
rename to C4/UI/Rectangle.swift
index 113f78b5..0169562a 100644
--- a/C4/UI/C4Rectangle.swift
+++ b/C4/UI/Rectangle.swift
@@ -20,8 +20,8 @@
 import Foundation
 import CoreGraphics
 
-///  C4Rectangle is a concrete subclass of C4Shape that has a special initialzer that creates a rectangle whose shape is determined by its frame.
-public class C4Rectangle: C4Shape {
+///  Rectangle is a concrete subclass of Shape that has a special initialzer that creates a rectangle whose shape is determined by its frame.
+public class Rectangle: Shape {
     /// Returns the corner size for the receiver.
     ///
     /// The shape of a C4Rectangle's corners are specified with width and height.
@@ -29,37 +29,37 @@ public class C4Rectangle: C4Shape {
     /// Automatically updates the shape of the receiver's corners when set.
     ///
     /// ````
-    /// let f = C4Rect(100,100,100,100)
-    /// let r = C4Rectangle(frame: f)
-    /// r.corner = C4Size(10,10)
+    /// let f = Rect(100,100,100,100)
+    /// let r = Rectangle(frame: f)
+    /// r.corner = Size(10,10)
     /// canvas.add(r)
     /// ````
-    public var corner: C4Size = C4Size(8, 8) {
+    public var corner: Size = Size(8, 8) {
         didSet {
             updatePath()
         }
     }
 
-    /// Initializes a new C4Rectangle using the specified frame.
+    /// Initializes a new Rectangle using the specified frame.
     ///
     /// ````
-    /// let f = C4Rect(100,100,100,100)
-    /// let r = C4Rectangle(frame: f)
+    /// let f = Rect(100,100,100,100)
+    /// let r = Rectangle(frame: f)
     /// canvas.add(r)
     /// ````
     ///
-    /// - parameter frame: A C4Rect whose dimensions are used to construct the C4Rectangle.
-    convenience public init(frame: C4Rect) {
+    /// - parameter frame: A Rect whose dimensions are used to construct the Rectangle.
+    convenience public init(frame: Rect) {
         self.init()
         if frame.size.width <= corner.width * 2.0 || frame.size.height <= corner.width / 2.0 {
-            corner = C4Size()
+            corner = Size()
         }
         view.frame = CGRect(frame)
         updatePath()
     }
 
     override func updatePath() {
-        let newPath = C4Path()
+        let newPath = Path()
         newPath.addRoundedRect(bounds, cornerWidth: corner.width, cornerHeight: corner.height)
         path = newPath
     }
diff --git a/C4/UI/C4RegularPolygon.swift b/C4/UI/RegularPolygon.swift
similarity index 62%
rename from C4/UI/C4RegularPolygon.swift
rename to C4/UI/RegularPolygon.swift
index 925143e0..367d5662 100644
--- a/C4/UI/C4RegularPolygon.swift
+++ b/C4/UI/RegularPolygon.swift
@@ -20,18 +20,18 @@
 import Foundation
 import CoreGraphics
 
-///C4RegularPolygon is a is a concrete subclass of C4Polygon that defines a shape whose sides are uniform (e.g. pentagon, octagon, etc.).
+///RegularPolygon is a is a concrete subclass of Polygon that defines a shape whose sides are uniform (e.g. pentagon, octagon, etc.).
 ///
 /// This class defines two variables called `sides` and `phase` that represent the number of sides and the initial rotation of the shape (respectively). The default shape is a hexagon.
-public class C4RegularPolygon: C4Shape {
+public class RegularPolygon: Polygon {
     /// Returns the number of sides in the polygon.
     ///
     /// Assigning a value to this property will change the number of sides and cause the receiver to automatically update its
     /// path.
     ///
     /// ````
-    /// let f = C4Rect(100,100,100,100)
-    /// var p = C4RegularPolygon(frame: f)
+    /// let f = Rect(100,100,100,100)
+    /// var p = RegularPolygon(frame: f)
     /// p.sides = 3
     /// canvas.add(p)
     /// ````
@@ -50,8 +50,8 @@ public class C4RegularPolygon: C4Shape {
     /// still calculate its points based on the frame.
     ///
     /// ````
-    /// let f = C4Rect(100,100,100,100)
-    /// var p = C4RegularPolygon(frame: f)
+    /// let f = Rect(100,100,100,100)
+    /// var p = RegularPolygon(frame: f)
     /// p.phase = M_PI_2
     /// canvas.add(p)
     /// ````
@@ -62,43 +62,24 @@ public class C4RegularPolygon: C4Shape {
         }
     }
 
-    /// Initializes a new C4RegularPolygon.
+    /// Initializes a new RegularPolygon.
     ///
-    /// Default values are are sides = 6 (i.e. a hexagon), phase = 0 and frame = {0,0,0,0}.
-    public override init() {
-        super.init()
-        updatePath()
-    }
+    /// Default values are are sides = 6 (i.e. a hexagon), phase = 0.
+    convenience public init(center: Point, radius: Double = 50.0, sides: Int = 6, phase: Double = 0.0) {
+        let dΘ = 2.0*M_PI / Double(sides)
+        var pointArray = [Point]()
+        for i in 0..<sides {
+            let Θ = phase + dΘ * Double(i)
+            pointArray.append(Point(radius*cos(Θ), radius*sin(Θ)))
+        }
 
-    /// Initializes a new C4RegularPolygon from data in a given unarchiver.
-    /// - parameter coder: An unarchiver object.
-    required public init(coder aDecoder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
+        self.init(pointArray)
+        self.close()
+        self.fillColor = C4Blue
+        self.center = center
     }
 
     internal override func updatePath() {
-        let rect = inset(C4Rect(view.bounds), dx: lineWidth, dy: lineWidth)
-        let rx = rect.size.width / 2.0
-        let ry = rect.size.height / 2.0
-        if sides == 0 || rx <= 0 || ry <= 0 {
-            // Don't try to generate invalid polygons, we'll get undefined behaviour
-            return
-        }
-
-        let center = rect.center
-        let delta = 2.0*M_PI / Double(sides)
-        let newPath = C4Path()
-
-        for i in 0..<sides {
-            let angle = phase + delta*Double(i)
-            let point = C4Point(center.x + rx*cos(angle), center.y + ry*sin(angle))
-            if i == 0 {
-                newPath.moveToPoint(point)
-            } else {
-                newPath.addLineToPoint(point)
-            }
-        }
-        newPath.closeSubpath()
-        path = newPath
+        self.path = RegularPolygon(center: center, radius: width/2.0, sides:self.sides, phase:self.phase).path
     }
 }
diff --git a/C4/UI/ScreenRecorder.swift b/C4/UI/ScreenRecorder.swift
new file mode 100644
index 00000000..82d44465
--- /dev/null
+++ b/C4/UI/ScreenRecorder.swift
@@ -0,0 +1,75 @@
+// Copyright © 2016 C4
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions: The above copyright
+// notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+
+import ReplayKit
+
+public class ScreenRecorder: NSObject, RPPreviewViewControllerDelegate {
+    public typealias PreviewControllerFinishedAction = (activities: Set<String>?) -> ()
+    public typealias RecorderStoppedAction = () -> ()
+
+    let recorder = RPScreenRecorder.sharedRecorder()
+    var preview: RPPreviewViewController?
+    var activities: Set<String>?
+
+    public var previewFinishedAction: PreviewControllerFinishedAction?
+    public var recordingEndedAction: RecorderStoppedAction?
+    public var enableMicrophone = false
+
+    public func start() {
+        preview = nil
+        recorder.startRecordingWithMicrophoneEnabled(enableMicrophone) { error in
+            if let error = error {
+                print("Start Recording Error: \(error.localizedDescription)")
+            }
+        }
+    }
+
+    public func start(duration: Double) {
+        start()
+        wait(duration) {
+            self.stop()
+        }
+    }
+
+    public func stop() {
+        recorder.stopRecordingWithHandler { previewViewController, error in
+            self.preview = previewViewController
+            self.preview?.previewControllerDelegate = self
+            self.recordingEndedAction?()
+        }
+    }
+
+    public func showPreviewInController(controller: UIViewController) {
+        guard let preview = preview else {
+            print("Recorder has no preview to show.")
+            return
+        }
+
+        controller.presentViewController(preview, animated: true, completion: nil)
+    }
+
+    public func previewController(previewController: RPPreviewViewController, didFinishWithActivityTypes activityTypes: Set<String>) {
+        activities = activityTypes
+    }
+
+    public func previewControllerDidFinish(previewController: RPPreviewViewController) {
+        previewFinishedAction?(activities: activities)
+        preview?.parentViewController?.dismissViewControllerAnimated(true, completion: nil)
+    }
+}
diff --git a/C4/UI/C4Shape+Creation.swift b/C4/UI/Shape+Creation.swift
similarity index 69%
rename from C4/UI/C4Shape+Creation.swift
rename to C4/UI/Shape+Creation.swift
index ace36c96..7e3aee58 100644
--- a/C4/UI/C4Shape+Creation.swift
+++ b/C4/UI/Shape+Creation.swift
@@ -21,25 +21,25 @@ import Foundation
 import CoreGraphics
 
 
-/// Extension for C4Shape that provides functionality for adding elements to a receiver's path.
-extension C4Shape {
+/// Extension for Shape that provides functionality for adding elements to a receiver's path.
+extension Shape {
     /// Appends a circle to the end of the receiver's path.
     ///
     /// ````
-    /// var l = C4Line([C4Point(),C4Point(100,100)])
+    /// var l = Line([Point(),Point(100,100)])
     /// l.addCircle(center: l.path!.currentPoint, radius: 20)
     /// canvas.add(l)
     /// ````
     ///
     /// - parameter center: The center of the new circle
     /// - parameter radius: The radius of the new circle
-    public func addCircle(center center: C4Point, radius: Double) {
+    public func addCircle(center center: Point, radius: Double) {
         var newPath = path
         if newPath == nil {
-            newPath = C4Path()
+            newPath = Path()
         }
 
-        let r = C4Rect(center.x - radius, center.y - radius, radius*2, radius*2)
+        let r = Rect(center.x - radius, center.y - radius, radius*2, radius*2)
         newPath!.addEllipse(r)
         path = newPath
         adjustToFitPath()
@@ -48,23 +48,23 @@ extension C4Shape {
     /// Appends a polygon to the end of the receiver's path.
     ///
     /// ````
-    /// var l = C4Line([C4Point(),C4Point(100,100)])
-    /// var points = [C4Point]()
+    /// var l = Line([Point(),Point(100,100)])
+    /// var points = [Point]()
     /// for i in 0...10 {
     ///     let x = random01()*100.0
     ///     let y = random01()*100.0
-    ///     points.append(C4Point(x,y))
+    ///     points.append(Point(x,y))
     /// }
     /// l.addPolygon(points: points, closed: true)
     /// canvas.add(l)
     /// ````
     ///
-    /// - parameter points: An array of C4Point structs that defines the new polygon
+    /// - parameter points: An array of Point structs that defines the new polygon
     /// - parameter closed: If true then the polygon will have an additional line between its first and last points
-    public func addPolygon(points points: [C4Point], closed: Bool = true) {
+    public func addPolygon(points points: [Point], closed: Bool = true) {
         var newPath = path
         if newPath == nil {
-            newPath = C4Path()
+            newPath = Path()
         }
 
         if !points.isEmpty {
@@ -83,16 +83,16 @@ extension C4Shape {
     /// Appends a line segment to the end of the receiver's path.
     ///
     /// ````
-    /// var l = C4Line([C4Point(),C4Point(100,100)])
-    /// l.addLine([C4Point(100,100),C4Point(100,0)])
+    /// var l = Line([Point(),Point(100,100)])
+    /// l.addLine([Point(100,100),Point(100,0)])
     /// canvas.add(l)
     /// ````
     ///
-    /// - parameter points: An array of C4Point structs that defines the new line
-    public func addLine(points: [C4Point]) {
+    /// - parameter points: An array of Point structs that defines the new line
+    public func addLine(points: [Point]) {
         let newPath = path
         if path == nil {
-            path = C4Path()
+            path = Path()
         }
 
         if newPath!.currentPoint != points[0] {
@@ -106,19 +106,19 @@ extension C4Shape {
     /// Appends a bezier curve to the end of the receiver's path.
     ///
     /// ````
-    /// var l = C4Line([C4Point(),C4Point(100,100)])
-    /// let pts = [C4Point(100,100),C4Point(100,0)]
-    /// let ctrls = [C4Point(150,100),C4Point(150,0)]
+    /// var l = Line([Point(),Point(100,100)])
+    /// let pts = [Point(100,100),Point(100,0)]
+    /// let ctrls = [Point(150,100),Point(150,0)]
     /// l.addCurve(points: pts, controls: ctrls)
     /// canvas.add(l)
     /// ````
     ///
-    /// - parameter points: An array of C4Point structs that defines the beginning and end points of the curve
-    /// - parameter controls: An array of C4Point structs used to define the shape of the curve
-    public func addCurve(points points: [C4Point], controls: [C4Point]) {
+    /// - parameter points: An array of Point structs that defines the beginning and end points of the curve
+    /// - parameter controls: An array of Point structs used to define the shape of the curve
+    public func addCurve(points points: [Point], controls: [Point]) {
         let newPath = path
         if path == nil {
-            path = C4Path()
+            path = Path()
         }
 
         if newPath!.currentPoint != points[0] {
diff --git a/C4/UI/C4Shape.swift b/C4/UI/Shape.swift
similarity index 78%
rename from C4/UI/C4Shape.swift
rename to C4/UI/Shape.swift
index bcde0184..56f9ca8d 100644
--- a/C4/UI/C4Shape.swift
+++ b/C4/UI/Shape.swift
@@ -20,20 +20,27 @@
 import QuartzCore
 import UIKit
 
-/// C4Shape is a concrete subclass of C4View that draws a bezier path in its coordinate space.
-public class C4Shape: C4View {
+/// Shape is a concrete subclass of View that draws a bezier path in its coordinate space.
+public class Shape: View {
     internal class ShapeView: UIView {
-        var shapeLayer: C4ShapeLayer {
-            return self.layer as! C4ShapeLayer // swiftlint:disable:this force_cast
+        var shapeLayer: ShapeLayer {
+            return self.layer as! ShapeLayer // swiftlint:disable:this force_cast
         }
 
         override class func layerClass() -> AnyClass {
-            return C4ShapeLayer.self
+            return ShapeLayer.self
+        }
+
+        override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
+            if CGPathContainsPoint(shapeLayer.path, nil, point, shapeLayer.fillRule == kCAFillRuleNonZero ? false : true) {
+                return self
+            }
+            return nil
         }
     }
 
-    /// C4Shape's contents are drawn on a C4ShapeLayer.
-    public var shapeLayer: C4ShapeLayer {
+    /// C4Shape's contents are drawn on a ShapeLayer.
+    public var shapeLayer: ShapeLayer {
         get {
             return self.shapeView.shapeLayer
         }
@@ -44,7 +51,7 @@ public class C4Shape: C4View {
         return self.view as! ShapeView // swiftlint:disable:this force_cast
     }
 
-    ///  Initializes an empty C4Shape.
+    ///  Initializes an empty Shape.
     override init() {
         super.init()
 
@@ -59,10 +66,10 @@ public class C4Shape: C4View {
         shapeLayer.contents = image
     }
 
-    /// Initializes a new C4Shape from a specified C4Path.
-    /// - parameter path: A C4Path around which the new shape is created with the frame of the new shape fitting the path on
+    /// Initializes a new Shape from a specified Path.
+    /// - parameter path: A Path around which the new shape is created with the frame of the new shape fitting the path on
     /// screen.
-    public convenience init(_ path: C4Path) {
+    public convenience init(_ path: Path) {
         self.init()
 
         self.path = path
@@ -72,12 +79,12 @@ public class C4Shape: C4View {
         adjustToFitPath()
     }
 
-    /// Initializes a new C4Shape from the properties of another C4Shape. Essentially, this copies the provided shape.
-    /// - parameter shape: A C4Shape around which the new shape is created.
-    public convenience init(_ shape: C4Shape) {
+    /// Initializes a new Shape from the properties of another Shape. Essentially, this copies the provided shape.
+    /// - parameter shape: A Shape around which the new shape is created.
+    public convenience init(_ shape: Shape) {
         self.init()
-        let disable = C4ShapeLayer.disableActions
-        C4ShapeLayer.disableActions = true
+        let disable = ShapeLayer.disableActions
+        ShapeLayer.disableActions = true
         self.path = shape.path
         shapeLayer.path = path?.CGPath
         self.frame = shape.frame
@@ -93,33 +100,36 @@ public class C4Shape: C4View {
         self.miterLimit = shape.miterLimit
         updatePath()
         adjustToFitPath()
-        C4ShapeLayer.disableActions = disable
+        ShapeLayer.disableActions = disable
     }
 
     ///An optional variable representing a gradient. If this is non-nil, then the shape will appear to be filled with a gradient.
-    public var gradientFill: C4Gradient? {
+    public var gradientFill: Gradient? {
         didSet {
-            if let fill = gradientFill {
-                if mask == nil {
-                    let m = C4Shape(self)
-                    m.fillColor = black
-                    m.strokeColor = black
-                    mask = m
-                }
-                fillColor = nil
-                shapeLayer.contents = fill.render()?.cgimage
-            } else {
-                let image = UIImage.createWithColor(UIColor.clearColor(), size: CGSize(width: 1, height: 1)).CGImage
-                shapeLayer.contents = image
+            guard gradientFill != nil else {
+                fillColor = clear
                 return
             }
+            let gim = gradientFill?.render()?.cgimage
+
+            //inverts coordinate for graphics context rendering
+            var b = bounds
+            b.origin.y = self.height - b.origin.y
 
+            UIGraphicsBeginImageContextWithOptions(CGSize(b.size), false, UIScreen.mainScreen().scale)
+            let context = UIGraphicsGetCurrentContext()
+
+            CGContextDrawTiledImage(context, CGRect(b), gim)
+            let uiimage = UIGraphicsGetImageFromCurrentImageContext()
+            let uicolor = UIColor(patternImage: uiimage)
+            fillColor = Color(uicolor)
+            UIGraphicsEndImageContext()
         }
     }
 
     /// The path defining the shape to be rendered. If the path extends outside the layer bounds it will not automatically
     /// be clipped to the layer. Defaults to nil. Animatable.
-    public var path: C4Path? {
+    public var path: Path? {
         didSet {
             shapeLayer.path = path?.CGPath
         }
@@ -127,7 +137,8 @@ public class C4Shape: C4View {
 
     internal func updatePath() {}
 
-    func adjustToFitPath() {
+    /// Adjusts the shape's frame to the bounding bounding box of its specified path.
+    public func adjustToFitPath() {
         if shapeLayer.path == nil {
             return
         }
@@ -137,9 +148,9 @@ public class C4Shape: C4View {
 
 
     /// Returns the receiver's frame. Animatable.
-    public override var frame: C4Rect {
+    public override var frame: Rect {
         get {
-            return C4Rect(view.frame)
+            return Rect(view.frame)
         }
         set {
             view.frame = CGRect(newValue)
@@ -155,10 +166,10 @@ public class C4Shape: C4View {
     }
 
     /// The color to stroke the path, or nil for no fill. Defaults to opaque black. Animatable.
-    public var strokeColor: C4Color? {
+    public var strokeColor: Color? {
         get {
             if let color = shapeLayer.strokeColor {
-                return C4Color(color)
+                return Color(color)
             } else {
                 return nil
             }
@@ -169,19 +180,16 @@ public class C4Shape: C4View {
     }
 
     /// The color to fill the path, or nil for no fill. Defaults to opaque black. Animatable.
-    public var fillColor: C4Color? {
+    public var fillColor: Color? {
         get {
             if let color = shapeLayer.fillColor {
-                return C4Color(color)
+                return Color(color)
             } else {
                 return nil
             }
         }
         set(color) {
             shapeLayer.fillColor = color?.CGColor
-            if color != nil {
-                gradientFill = nil
-            }
         }
     }
 
@@ -211,13 +219,13 @@ public class C4Shape: C4View {
     /// - returns: A Double value representing the cumulative rotation of the view, measured in Radians.
     public override var rotation: Double {
         get {
-            if let number = shapeLayer.valueForKeyPath(C4Layer.rotationKey) as? NSNumber {
+            if let number = shapeLayer.valueForKeyPath(Layer.rotationKey) as? NSNumber {
                 return number.doubleValue
             }
             return  0.0
         }
         set {
-            shapeLayer.setValue(newValue, forKeyPath: C4Layer.rotationKey)
+            shapeLayer.setValue(newValue, forKeyPath: Layer.rotationKey)
         }
     }
 
@@ -350,4 +358,11 @@ public class C4Shape: C4View {
         /// Specifies a square line cap style for endpoints for an open path when stroked.
         case Square
     }
+
+    public override func hitTest(point: Point) -> Bool {
+        if let p = path {
+            return p.containsPoint(point)
+        }
+        return false
+    }
 }
diff --git a/C4/UI/C4ShapeLayer.swift b/C4/UI/ShapeLayer.swift
similarity index 86%
rename from C4/UI/C4ShapeLayer.swift
rename to C4/UI/ShapeLayer.swift
index 20125868..becadfcd 100644
--- a/C4/UI/C4ShapeLayer.swift
+++ b/C4/UI/ShapeLayer.swift
@@ -20,13 +20,13 @@
 import QuartzCore
 
 /// Extension for CAShapeLayer that allows overriding the actions for specific properties.
-public class C4ShapeLayer: CAShapeLayer {
+public class ShapeLayer: CAShapeLayer {
     /// A boolean value that, when true, prevents the animation of a shape's properties.
     ///
     /// ````
-    /// C4ShapeLayer.disableActions = true
+    /// ShapeLayer.disableActions = true
     /// circle.fillColor = red
-    /// C4ShapeLayer.disableActions = false
+    /// ShapeLayer.disableActions = false
     ///
     /// This value can be set globally, after which changes to any shape's properties will be immediate.
     public static var disableActions = true
@@ -37,17 +37,17 @@ public class C4ShapeLayer: CAShapeLayer {
     ///
     ///  - returns: the action object assigned to the specified key.
     public override func actionForKey(key: String) -> CAAction? {
-        if C4ShapeLayer.disableActions == true {
+        if ShapeLayer.disableActions == true {
             return nil
         }
 
-        let animatableProperties = ["lineWidth", "strokeEnd", "strokeStart", "strokeColor", "path", "fillColor", "lineDashPhase", "contents", C4Layer.rotationKey, "shadowColor", "shadowRadius", "shadowOffset", "shadowOpacity", "shadowPath"]
+        let animatableProperties = ["lineWidth", "strokeEnd", "strokeStart", "strokeColor", "path", "fillColor", "lineDashPhase", "contents", Layer.rotationKey, "shadowColor", "shadowRadius", "shadowOffset", "shadowOpacity", "shadowPath"]
         if !animatableProperties.contains(key) {
             return super.actionForKey(key)
         }
 
         let animation: CABasicAnimation
-        if let viewAnimation = C4ViewAnimation.stack.last as? C4ViewAnimation where viewAnimation.spring != nil {
+        if let viewAnimation = ViewAnimation.stack.last as? ViewAnimation where viewAnimation.spring != nil {
             animation = CASpringAnimation(keyPath: key)
         } else {
             animation = CABasicAnimation(keyPath: key)
@@ -56,8 +56,8 @@ public class C4ShapeLayer: CAShapeLayer {
         animation.configureOptions()
         animation.fromValue = valueForKey(key)
 
-        if key == C4Layer.rotationKey {
-            if let layer = presentationLayer() as? C4ShapeLayer {
+        if key == Layer.rotationKey {
+            if let layer = presentationLayer() as? ShapeLayer {
                 animation.fromValue = layer.valueForKey(key)
             }
         }
@@ -82,7 +82,7 @@ public class C4ShapeLayer: CAShapeLayer {
     /// - parameter layer: Another CALayer
     public override init(layer: AnyObject) {
         super.init(layer: layer)
-        if let layer = layer as? C4ShapeLayer {
+        if let layer = layer as? ShapeLayer {
             _rotation = layer._rotation
         }
     }
@@ -98,7 +98,7 @@ public class C4ShapeLayer: CAShapeLayer {
     /// - parameter key: The name of one of the receiver's properties
     public override func setValue(value: AnyObject?, forKey key: String) {
         super.setValue(value, forKey: key)
-        if key == C4Layer.rotationKey {
+        if key == Layer.rotationKey {
             _rotation = value as? Double ?? 0.0
         }
     }
@@ -107,7 +107,7 @@ public class C4ShapeLayer: CAShapeLayer {
     /// - parameter key: A string that specifies an attribute of the layer.
     /// - returns: A Boolean indicating whether changes to the specified key require the layer to be redisplayed.
     public override class func needsDisplayForKey(key: String) -> Bool {
-        if  key == C4Layer.rotationKey {
+        if  key == Layer.rotationKey {
             return true
         }
         return super.needsDisplayForKey(key)
@@ -116,7 +116,7 @@ public class C4ShapeLayer: CAShapeLayer {
     /// Reloads the content of this layer.
     /// Do not call this method directly.
     public override func display() {
-        guard let presentation = presentationLayer() as? C4ShapeLayer else {
+        guard let presentation = presentationLayer() as? ShapeLayer else {
             return
         }
         setValue(presentation._rotation, forKeyPath: "transform.rotation.z")
@@ -128,7 +128,7 @@ extension CABasicAnimation {
     ///
     ///  The options set in this method are favorable for the inner workings of C4's action behaviours.
     public func configureOptions() {
-        if let animation = C4ViewAnimation.currentAnimation {
+        if let animation = ViewAnimation.currentAnimation {
             self.autoreverses = animation.autoreverses
             self.repeatCount = Float(animation.repeatCount)
         }
@@ -143,7 +143,7 @@ extension CASpringAnimation {
     ///  The options set in this method are favorable for the inner workings of C4's animation behaviours.
     public override func configureOptions() {
         super.configureOptions()
-        if let animation = C4ViewAnimation.currentAnimation as? C4ViewAnimation, spring = animation.spring {
+        if let animation = ViewAnimation.currentAnimation as? ViewAnimation, spring = animation.spring {
             mass = CGFloat(spring.mass)
             damping = CGFloat(spring.damping)
             stiffness = CGFloat(spring.stiffness)
diff --git a/C4/UI/C4Star.swift b/C4/UI/Star.swift
similarity index 77%
rename from C4/UI/C4Star.swift
rename to C4/UI/Star.swift
index 9085630e..b6085944 100644
--- a/C4/UI/C4Star.swift
+++ b/C4/UI/Star.swift
@@ -20,13 +20,13 @@
 import Foundation
 import CoreGraphics
 
-/// C4Star is a concrete subclass of C4Polygon that defines a star shape.
-public class C4Star: C4Polygon {
+/// Star is a concrete subclass of Polygon that defines a star shape.
+public class Star: Polygon {
 
-    /// Initializes a new C4Star shape.
+    /// Initializes a new Star shape.
     ///
     /// ````
-    /// let star = C4Star(
+    /// let star = Star(
     ///         center: canvas.center,
     ///     pointCount: 5,
     ///    innerRadius: 50,
@@ -38,23 +38,24 @@ public class C4Star: C4Polygon {
     /// - parameter pointCount: The number of points on the star
     /// - parameter innerRadius: The radial distance from the center of the star to the inner points
     /// - parameter outerRadius: The radial distance from the center of the start to the outer points
-    convenience public init(center: C4Point, pointCount: Int, innerRadius: Double, outerRadius: Double) {
+    convenience public init(center: Point, pointCount: Int, innerRadius: Double, outerRadius: Double) {
         let wedgeAngle = 2.0 * M_PI / Double(pointCount)
-        var angle = M_PI_2
+        var angle = M_PI/Double(pointCount)-M_PI_2
 
-        var pointArray = [C4Point]()
+        var pointArray = [Point]()
 
         for i in 0..<pointCount * 2 {
             angle += wedgeAngle / 2.0
             if i % 2 != 0 {
-                pointArray.append(C4Point(center.x + innerRadius * cos(angle), center.y + innerRadius * sin(angle)))
+                pointArray.append(Point(innerRadius * cos(angle), innerRadius * sin(angle)))
             } else {
-                pointArray.append(C4Point(center.x + outerRadius * cos(angle), center.y + outerRadius * sin(angle)))
+                pointArray.append(Point(outerRadius * cos(angle), outerRadius * sin(angle)))
             }
         }
 
         self.init(pointArray)
         self.close()
         self.fillColor = C4Blue
+        self.center = center
     }
 }
diff --git a/C4/UI/C4StoredAnimation.swift b/C4/UI/StoredAnimation.swift
similarity index 88%
rename from C4/UI/C4StoredAnimation.swift
rename to C4/UI/StoredAnimation.swift
index 2e7dafc3..f633e299 100644
--- a/C4/UI/C4StoredAnimation.swift
+++ b/C4/UI/StoredAnimation.swift
@@ -19,20 +19,20 @@
 
 import UIKit
 
-/// C4StoredAnimation is a concrete subclass of C4Animation.
+/// StoredAnimation is a concrete subclass of Animation.
 ///
-/// A C4StoredAnimation object is able to apply a set of stored animation properties to an object.
+/// A StoredAnimation object is able to apply a set of stored animation properties to an object.
 ///
 /// This class is useful for serializing and deserializing animations.
-public class C4StoredAnimation: C4Animation {
+public class StoredAnimation: Animation {
     /// A dictionary of keys whose values will be applied to animatable properties of the receiver. The keys should map directly to the names of animatable properies.
     public var values = [String: AnyObject]()
 
     /// Initiates the changes specified in the receivers `animations` block.
     /// - parameter object: An object to which the animations apply
     public func animate(object: NSObject) {
-        let disable = C4ShapeLayer.disableActions
-        C4ShapeLayer.disableActions = false
+        let disable = ShapeLayer.disableActions
+        ShapeLayer.disableActions = false
         var timing: CAMediaTimingFunction
         var options: UIViewAnimationOptions = [UIViewAnimationOptions.BeginFromCurrentState]
 
@@ -55,7 +55,7 @@ public class C4StoredAnimation: C4Animation {
         repeatCount > 0 ? options.unionInPlace(.Repeat) : options.subtractInPlace(.Repeat)
 
         UIView.animateWithDuration(duration, delay: 0, options: options, animations: {
-            C4ViewAnimation.stack.append(self)
+            ViewAnimation.stack.append(self)
             UIView.setAnimationRepeatCount(Float(self.repeatCount))
             CATransaction.begin()
             CATransaction.setAnimationDuration(self.duration)
@@ -67,8 +67,8 @@ public class C4StoredAnimation: C4Animation {
                 object.setValue(value, forKeyPath: key)
             }
             CATransaction.commit()
-            C4ViewAnimation.stack.removeLast()
+            ViewAnimation.stack.removeLast()
         }, completion:nil)
-        C4ShapeLayer.disableActions = disable
+        ShapeLayer.disableActions = disable
     }
 }
diff --git a/C4/UI/C4TextShape.swift b/C4/UI/TextShape.swift
similarity index 79%
rename from C4/UI/C4TextShape.swift
rename to C4/UI/TextShape.swift
index 7b15730a..a5771fd6 100644
--- a/C4/UI/C4TextShape.swift
+++ b/C4/UI/TextShape.swift
@@ -21,8 +21,8 @@ import QuartzCore
 import UIKit
 import Foundation
 
-/// C4TextShape defines a concrete subclass of C4Shape that draws a bezier curve whose shape looks like text.
-public class C4TextShape: C4Shape {
+/// TextShape defines a concrete subclass of Shape that draws a bezier curve whose shape looks like text.
+public class TextShape: Shape {
     /// The text used to define the shape's path. Defaults to "C4".
     public var text: String = "C4" {
         didSet {
@@ -30,13 +30,13 @@ public class C4TextShape: C4Shape {
         }
     }
     /// The font used to define the shape's path. Defaults to AvenirNext-DemiBold, 80pt.
-    public var font = C4Font(name: "AvenirNext-DemiBold", size: 80)! {
+    public var font = Font(name: "AvenirNext-DemiBold", size: 80)! {
         didSet {
             updatePath()
         }
     }
 
-    ///  Initializes an empty C4TextShape.
+    ///  Initializes an empty TextShape.
     override init() {
         super.init()
 
@@ -44,48 +44,48 @@ public class C4TextShape: C4Shape {
         fillColor = C4Pink
     }
 
-    /// Initializes a new C4TextShape from a specifed string and a font
+    /// Initializes a new TextShape from a specifed string and a font
     ///
     /// ````
-    /// let f = C4Font(name:"Avenir Next", size: 120)
-    /// let t = C4TextShape(text:"C4", font: f)
+    /// let f = Font(name:"Avenir Next", size: 120)
+    /// let t = TextShape(text:"C4", font: f)
     /// t.center = canvas.center
     /// canvas.add(t)
     /// ````
     ///
     /// - parameter text: The string to be rendered as a shape
     /// - parameter font: The font used to define the shape of the text
-    public convenience init?(text: String, font: C4Font) {
+    public convenience init?(text: String, font: Font) {
         self.init()
         self.text = text
         self.font = font
 
         updatePath()
-        origin = C4Point()
+        origin = Point()
     }
 
-    /// Initializes a new C4TextShape from a specifed string, using C4's default font.
+    /// Initializes a new TextShape from a specifed string, using C4's default font.
     ///
     /// ````
-    /// let t = C4TextShape(text:"C4")
+    /// let t = TextShape(text:"C4")
     /// t.center = canvas.center
     /// canvas.add(t)
     /// ````
     ///
     /// - parameter text: text The string to be rendered as a shape
     public convenience init?(text: String) {
-        guard let font = C4Font(name: "AvenirNext-DemiBold", size: 80) else {
+        guard let font = Font(name: "AvenirNext-DemiBold", size: 80) else {
             return nil
         }
         self.init(text: text, font: font)
     }
 
     override func updatePath() {
-        path = C4TextShape.createTextPath(text: text, font: font)
+        path = TextShape.createTextPath(text: text, font: font)
         adjustToFitPath()
     }
 
-    internal class func createTextPath(text text: String, font: C4Font) -> C4Path? {
+    internal class func createTextPath(text text: String, font: Font) -> Path? {
         let ctfont = font.CTFont as CTFont?
         if ctfont == nil {
             return nil
@@ -110,6 +110,6 @@ public class C4TextShape: C4Shape {
             origin.x += CGFloat(advances[i].width)
             origin.y += CGFloat(advances[i].height)
         }
-        return C4Path(path: textPath)
+        return Path(path: textPath)
     }
 }
diff --git a/C4/UI/C4Timer.swift b/C4/UI/Timer.swift
similarity index 91%
rename from C4/UI/C4Timer.swift
rename to C4/UI/Timer.swift
index 06695b09..f8784fbf 100644
--- a/C4/UI/C4Timer.swift
+++ b/C4/UI/Timer.swift
@@ -19,8 +19,8 @@
 
 import Foundation
 
-/// You use the C4Timer class to create timer objects or, more simply, timers. A timer waits until a certain time interval has elapsed and then fires, executing a specified block of code.
-public final class C4Timer: NSObject {
+/// You use the Timer class to create timer objects or, more simply, timers. A timer waits until a certain time interval has elapsed and then fires, executing a specified block of code.
+public final class Timer: NSObject {
     /// The current number of times the timer has fired.
     public internal(set) var step = 0
     /// The number of times the timer will fire.
@@ -34,7 +34,7 @@ public final class C4Timer: NSObject {
     ///  Initializes a new timer.
     ///
     ///  ````
-    ///  let t = C4Timer(0.25) {
+    ///  let t = Timer(0.25) {
     ///      print("tick")
     ///  }
     ///  ````
diff --git a/C4/UI/C4Triangle.swift b/C4/UI/Triangle.swift
similarity index 80%
rename from C4/UI/C4Triangle.swift
rename to C4/UI/Triangle.swift
index ce237d24..30658edf 100644
--- a/C4/UI/C4Triangle.swift
+++ b/C4/UI/Triangle.swift
@@ -20,22 +20,22 @@
 import Foundation
 import CoreGraphics
 
-/// C4Triangle defines a concrete subclass of C4Polygon whose shape is a closed triangle.
-public class C4Triangle: C4Polygon {
+/// Triangle defines a concrete subclass of Polygon whose shape is a closed triangle.
+public class Triangle: Polygon {
 
-    /// Initializes a new C4Triangle using the specified array of points.
+    /// Initializes a new Triangle using the specified array of points.
     ///
     /// Protects against trying to create a triangle with less than three points.
     ///
-    /// - parameter points: An array of C4Point structs.
-    public override init(_ points: [C4Point]) {
+    /// - parameter points: An array of Point structs.
+    public override init(_ points: [Point]) {
         assert(points.count >= 3, "To create a Triangle you need to specify an array of at least 3 points")
         super.init(points)
         self.fillColor = C4Blue
         self.close()
     }
 
-    /// Initializes a new C4Polygon from data in a given unarchiver.
+    /// Initializes a new Polygon from data in a given unarchiver.
     /// - parameter coder: An unarchiver object.
     required public init(coder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
diff --git a/C4/UI/UIGestureRecognizer+Closure.swift b/C4/UI/UIGestureRecognizer+Closure.swift
index 5b1130bb..a8e64889 100644
--- a/C4/UI/UIGestureRecognizer+Closure.swift
+++ b/C4/UI/UIGestureRecognizer+Closure.swift
@@ -26,9 +26,9 @@ private var viewAssociationKey: UInt8 = 0
 
 extension UIGestureRecognizer {
     /// The current location of the gesture in the reference view.
-    public var location: C4Point {
+    public var location: Point {
         get {
-            return C4Point(locationInView(referenceView))
+            return Point(locationInView(referenceView))
         }
     }
     internal var referenceView: UIView? {
@@ -70,7 +70,7 @@ extension UIGestureRecognizer {
 }
 
 
-public typealias TapAction = (location: C4Point, state: UIGestureRecognizerState) -> ()
+public typealias TapAction = (location: Point, state: UIGestureRecognizerState) -> ()
 
 extension UITapGestureRecognizer {
     /// The closure to call when there is a gesture event.
@@ -108,7 +108,7 @@ extension UITapGestureRecognizer {
 }
 
 
-public typealias PanAction = (location: C4Point, translation: C4Vector, velocity: C4Vector, state: UIGestureRecognizerState) -> ()
+public typealias PanAction = (location: Point, translation: Vector, velocity: Vector, state: UIGestureRecognizerState) -> ()
 
 extension UIPanGestureRecognizer {
     /// The closure to call when there is a gesture event.
@@ -132,21 +132,21 @@ extension UIPanGestureRecognizer {
     /// The translation of the pan gesture in the coordinate system of the specified view.
     ///
     /// The x and y values report the total translation over time. They are not delta values from the last time that the translation was reported. Apply the translation value to the state of the view when the gesture is first recognized—do not concatenate the value each time the handler is called.
-    public var translation: C4Vector {
+    public var translation: Vector {
         get {
             if let view = referenceView {
-                return C4Vector(translationInView(view))
+                return Vector(translationInView(view))
             }
-            return C4Vector()
+            return Vector()
         }
     }
 
     /// The velocity of the pan gesture in the coordinate system of the specified view.
     ///
     /// The velocity of the pan gesture, which is expressed in points per second. The velocity is broken into horizontal and vertical components.
-    public var velocity: C4Vector {
+    public var velocity: Vector {
         get {
-            return C4Vector(velocityInView(view))
+            return Vector(velocityInView(view))
         }
     }
 
@@ -244,7 +244,7 @@ extension UIRotationGestureRecognizer {
 }
 
 
-public typealias LongPressAction = (location: C4Point, state: UIGestureRecognizerState) -> ()
+public typealias LongPressAction = (location: Point, state: UIGestureRecognizerState) -> ()
 
 extension UILongPressGestureRecognizer {
     /// The closure to call when there is a gesture event.
@@ -282,7 +282,7 @@ extension UILongPressGestureRecognizer {
 }
 
 
-public typealias SwipeAction = (location: C4Point, state: UIGestureRecognizerState, direction: UISwipeGestureRecognizerDirection) -> ()
+public typealias SwipeAction = (location: Point, state: UIGestureRecognizerState, direction: UISwipeGestureRecognizerDirection) -> ()
 
 extension UISwipeGestureRecognizer {
     /// The closure to call when there is a gesture event.
@@ -319,7 +319,7 @@ extension UISwipeGestureRecognizer {
     }
 }
 
-public typealias ScreenEdgePanAction = (location: C4Point, state: UIGestureRecognizerState) -> ()
+public typealias ScreenEdgePanAction = (location: Point, state: UIGestureRecognizerState) -> ()
 
 extension UIScreenEdgePanGestureRecognizer {
     /// The closure to call when there is a gesture event.
diff --git a/C4/UI/UIView+AddRemove.swift b/C4/UI/UIView+AddRemove.swift
index 76de5d96..d01e2c0d 100644
--- a/C4/UI/UIView+AddRemove.swift
+++ b/C4/UI/UIView+AddRemove.swift
@@ -19,16 +19,16 @@
 
 import UIKit
 
-/// Extension to UIView that adds handling addition and removal of C4View objects.
+/// Extension to UIView that adds handling addition and removal of View objects.
 extension UIView {
 
     /// Adds a view to the end of the receiver’s list of subviews.
-    /// When working with C4, use this method to add views because it handles the addition of both UIView and C4View.
+    /// When working with C4, use this method to add views because it handles the addition of both UIView and View.
     /// - parameter subview:	The view to be added.
     public func add<T>(subview: T?) {
         if let v = subview as? UIView {
             self.addSubview(v)
-        } else if let v = subview as? C4View {
+        } else if let v = subview as? View {
             self.addSubview(v.view)
         } else {
             fatalError("Can't add subview of class `\(subview.dynamicType)`")
@@ -38,14 +38,14 @@ extension UIView {
     //MARK: - AddRemoveSubview
 
     /// Adds an array of views to the end of the receiver’s list of subviews.
-    /// When working with C4, use this method to add views because it handles the addition of both UIView and C4View.
+    /// When working with C4, use this method to add views because it handles the addition of both UIView and View.
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
-    /// let subv1 = C4View(frame: C4Rect(25,25,50,50))
-    /// let subv2 = C4View(frame: C4Rect(100,25,50,50))
+    /// let v = View(frame: Rect(0,0,100,100))
+    /// let subv1 = View(frame: Rect(25,25,50,50))
+    /// let subv2 = View(frame: Rect(100,25,50,50))
     /// v.add([subv1,subv2])
     /// ````
-    /// - parameter subviews: An array of UIView or C4View subclasses to be added to the receiver
+    /// - parameter subviews: An array of UIView or View subclasses to be added to the receiver
     public func add<T>(subviews: [T?]) {
         for subv in subviews {
             self.add(subv)
@@ -55,12 +55,12 @@ extension UIView {
     /// Unlinks the view from the receiver and its window, and removes it from the responder chain.
     /// Calling this method removes any constraints that refer to the view you are removing, or that refer to any view in the
     /// subtree of the view you are removing.
-    /// When working with C4, use this method to remove views because it handles the removal of both UIView and C4View.
+    /// When working with C4, use this method to remove views because it handles the removal of both UIView and View.
     /// - parameter subview: The view to be removed.
     public func remove<T>(subview: T?) {
         if let v = subview as? UIView {
             v.removeFromSuperview()
-        } else if let v = subview as? C4View {
+        } else if let v = subview as? View {
             v.view.removeFromSuperview()
         } else {
             fatalError("Can't remove subview of class `\(subview.dynamicType)`")
@@ -68,12 +68,12 @@ extension UIView {
     }
 
     /// Moves the specified subview so that it appears behind its siblings.
-    /// When working with C4, use this method because it handles both UIView and C4View.
+    /// When working with C4, use this method because it handles both UIView and View.
     /// - parameter subview: The subview to move to the back.
     public func sendToBack<T>(subview: T?) {
         if let v = subview as? UIView {
             self.sendSubviewToBack(v)
-        } else if let v = subview as? C4View {
+        } else if let v = subview as? View {
             self.sendSubviewToBack(v.view)
         } else {
             fatalError("Can't operate on subview of class `\(subview.dynamicType)`")
@@ -81,12 +81,12 @@ extension UIView {
     }
 
     /// Moves the specified subview so that it appears on top of its siblings.
-    /// When working with C4, use this method because it handles both UIView and C4View.
+    /// When working with C4, use this method because it handles both UIView and View.
     /// - parameter subview: The subview to move to the front.
     public func bringToFront<T>(subview: T?) {
         if let v = subview as? UIView {
             self.bringSubviewToFront(v)
-        } else if let v = subview as? C4View {
+        } else if let v = subview as? View {
             self.bringSubviewToFront(v.view)
         } else {
             fatalError("Can't operate on subview of class `\(subview.dynamicType)`")
diff --git a/C4/UI/UIViewController+C4View.swift b/C4/UI/UIViewController+C4View.swift
index 31790061..f880ed63 100644
--- a/C4/UI/UIViewController+C4View.swift
+++ b/C4/UI/UIViewController+C4View.swift
@@ -25,26 +25,26 @@ private var canvasAssociationKey: UInt8 = 0
 
 /// Extension to UIViewController that adds a `canvas` object.
 ///
-/// The canvas is a C4View representation of the view controller's UIView property.
+/// The canvas is a View representation of the view controller's UIView property.
 ///
-/// This extension adds properties and functionality of C4View to the native contoller object.
+/// This extension adds properties and functionality of View to the native contoller object.
 ///
 /// For example:
 /// ````
-/// canvas.backgroundColor = C4Color(r,g,b,a)
+/// canvas.backgroundColor = Color(r,g,b,a)
 /// canvas.addTapGestureRecognizer(0.5){...}
 /// ````
 ///
-/// Where, `canvas` is essentially equal to `self.viewController.view`, keeping the interaction with a controller's main view consistent with using other C4View objects.
+/// Where, `canvas` is essentially equal to `self.viewController.view`, keeping the interaction with a controller's main view consistent with using other View objects.
 public extension UIViewController {
-    /// Returns a C4View object representation of the controller's `view` property.
-    public var canvas: C4View {
+    /// Returns a View object representation of the controller's `view` property.
+    public var canvas: View {
         get {
-            if let canvas = objc_getAssociatedObject(self, &canvasAssociationKey) as? C4View {
+            if let canvas = objc_getAssociatedObject(self, &canvasAssociationKey) as? View {
                 return canvas
             }
 
-            let canvas = C4View(view: view)
+            let canvas = View(view: view)
             objc_setAssociatedObject(
                 self,
                 &canvasAssociationKey,
diff --git a/C4/UI/C4View+Animation.swift b/C4/UI/View+Animation.swift
similarity index 97%
rename from C4/UI/C4View+Animation.swift
rename to C4/UI/View+Animation.swift
index ef6c7286..2015823e 100644
--- a/C4/UI/C4View+Animation.swift
+++ b/C4/UI/View+Animation.swift
@@ -20,8 +20,8 @@
 import QuartzCore
 import UIKit
 
-/// Extension to C4View that handles animating of basic properties.
-public extension C4View {
+/// Extension to View that handles animating of basic properties.
+public extension View {
     /// Internal function for creating a basic animation and applying that to the receiver.
     /// - parameter keyPath: The identifier to animate
     /// - parameter toValue: The value to which the identifier will be animated
diff --git a/C4/UI/C4View+Border.swift b/C4/UI/View+Border.swift
similarity index 88%
rename from C4/UI/C4View+Border.swift
rename to C4/UI/View+Border.swift
index 3a70763f..8f284ef3 100644
--- a/C4/UI/C4View+Border.swift
+++ b/C4/UI/View+Border.swift
@@ -19,11 +19,11 @@
 
 import CoreGraphics
 
-/// Defines a structure representing the border of a C4View.
+/// Defines a structure representing the border of a View.
 public struct Border {
 
     /// Returns the color of the border.
-    public var color: C4Color?
+    public var color: Color?
 
     /// Returns the corner radius of the border.
     public var radius: Double
@@ -37,18 +37,18 @@ public struct Border {
     /// color = black
     /// width = 0.0
     public init() {
-        color = C4Color(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
+        color = Color(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
         radius = 0.0
         width = 0.0
     }
 }
 
-/// Extension to C4View that adds a border property.
-public extension C4View {
+/// Extension to View that adds a border property.
+public extension View {
     /// Returns a struct that represents the current visible state of the receiver's border. Animatable.
     ///
     /// ````
-    /// let v = C4View(frame: C4Rect(25,25,100,100))
+    /// let v = View(frame: Rect(25,25,100,100))
     /// var b = Border()
     /// b.width = 10.0
     /// b.color = C4Purple
@@ -62,7 +62,7 @@ public extension C4View {
             var border = Border()
             if let layer = layer {
                 if let borderColor = layer.borderColor {
-                    border.color = C4Color(borderColor)
+                    border.color = Color(borderColor)
                 }
                 border.radius = Double(layer.cornerRadius)
                 border.width = Double(layer.borderWidth)
diff --git a/C4/UI/C4View+KeyValues.swift b/C4/UI/View+KeyValues.swift
similarity index 89%
rename from C4/UI/C4View+KeyValues.swift
rename to C4/UI/View+KeyValues.swift
index d4d15fa3..b8763738 100644
--- a/C4/UI/C4View+KeyValues.swift
+++ b/C4/UI/View+KeyValues.swift
@@ -19,7 +19,7 @@
 
 import UIKit
 
-extension C4View {
+extension View {
     ///  Sets the arbitrary keyed-data for the specified key.
     ///
     ///  - parameter value: The value for the key identified by _key_.
@@ -28,32 +28,32 @@ extension C4View {
         switch key {
         case "frame":
             if let nsvalue = value as? NSValue {
-                frame = C4Rect(nsvalue.CGRectValue())
+                frame = Rect(nsvalue.CGRectValue())
             }
 
         case "bounds":
             if let nsvalue = value as? NSValue {
-                bounds = C4Rect(nsvalue.CGRectValue())
+                bounds = Rect(nsvalue.CGRectValue())
             }
 
         case "center":
             if let nsvalue = value as? NSValue {
-                center = C4Point(nsvalue.CGPointValue())
+                center = Point(nsvalue.CGPointValue())
             }
 
         case "origin":
             if let nsvalue = value as? NSValue {
-                origin = C4Point(nsvalue.CGPointValue())
+                origin = Point(nsvalue.CGPointValue())
             }
 
         case "size":
             if let nsvalue = value as? NSValue {
-                size = C4Size(nsvalue.CGSizeValue())
+                size = Size(nsvalue.CGSizeValue())
             }
 
         case "backgroundColor":
             if let color = value as? UIColor {
-                backgroundColor = C4Color(color)
+                backgroundColor = Color(color)
             }
 
         default:
diff --git a/C4/UI/C4View+Render.swift b/C4/UI/View+Render.swift
similarity index 89%
rename from C4/UI/C4View+Render.swift
rename to C4/UI/View+Render.swift
index 4c879f35..1ef20fbb 100644
--- a/C4/UI/C4View+Render.swift
+++ b/C4/UI/View+Render.swift
@@ -19,10 +19,10 @@
 
 import UIKit
 
-public extension C4View {
+public extension View {
     /// Creates a flattened image of the receiver and its subviews / layers.
-    /// - returns: A new C4Image
-    public func render() -> C4Image? {
+    /// - returns: A new Image
+    public func render() -> Image? {
         guard let l = layer else {
             print("Could not retrieve layer for current object: \(self)")
             return nil
@@ -32,15 +32,15 @@ public extension C4View {
         l.renderInContext(context)
         let uiimage = UIGraphicsGetImageFromCurrentImageContext()
         UIGraphicsEndImageContext()
-        return C4Image(uiimage: uiimage)
+        return Image(uiimage: uiimage)
     }
 }
 
-public extension C4Shape {
+public extension Shape {
     /// Creates a flattened image of the receiver and its subviews / layers.
     /// This override takes into consideration the lineWidth of the receiver.
-    /// - returns: A new C4Image
-    public override func render() -> C4Image? {
+    /// - returns: A new Image
+    public override func render() -> Image? {
         var s = CGSize(size)
         var inset: CGFloat = 0
         if lineWidth > 0 && strokeColor?.alpha > 0.0 {
@@ -55,6 +55,6 @@ public extension C4Shape {
         shapeLayer.renderInContext(context)
         let uiimage = UIGraphicsGetImageFromCurrentImageContext()
         UIGraphicsEndImageContext()
-        return C4Image(uiimage: uiimage)
+        return Image(uiimage: uiimage)
     }
 }
diff --git a/C4/UI/C4View+Shadow.swift b/C4/UI/View+Shadow.swift
similarity index 86%
rename from C4/UI/C4View+Shadow.swift
rename to C4/UI/View+Shadow.swift
index 3c488de0..8fab9948 100644
--- a/C4/UI/C4View+Shadow.swift
+++ b/C4/UI/View+Shadow.swift
@@ -20,7 +20,7 @@
 import CoreGraphics
 
 
-/// Defines a structure representing the border of a C4View.
+/// Defines a structure representing the border of a View.
 public struct Shadow {
 
     /// Returns the corner radius of the border. Animatable.
@@ -31,12 +31,12 @@ public struct Shadow {
     /// Returns the color of the shadow. Animatable.
     ///
     /// Assigning an new value to this will change the color of the shadow.
-    public var color: C4Color?
+    public var color: Color?
 
     /// Returns the offset of the shadow. Animatable.
     ///
     /// Assigning an new value to this will change the offset of the shadow.
-    public var offset: C4Size
+    public var offset: Size
 
     /// Returns the opacity of the shadow. Animatable.
     ///
@@ -46,7 +46,7 @@ public struct Shadow {
     /// Returns the outline of the shadow. Animatable.
     ///
     /// Assigning an new value to this will change the path of the shadow.
-    public var path: C4Path?
+    public var path: Path?
 
     /// Initializes a new C4Shadow struct with the following defaults:
     ///
@@ -56,14 +56,14 @@ public struct Shadow {
     /// opacity = 0.0
     public init() {
         radius = 5.0
-        color = C4Color(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
-        offset = C4Size(5, 5)
+        color = Color(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
+        offset = Size(5, 5)
         opacity = 0.0
     }
 }
 
-/// Extension to C4View that adds a shadow property.
-public extension C4View {
+/// Extension to View that adds a shadow property.
+public extension View {
 
     /// Returns a struct that represents the current visible state of the receiver's shadow. Animatable.
     ///
@@ -73,7 +73,7 @@ public extension C4View {
     /// The path is optional, and only set if it has a value.
     ///
     /// ````
-    /// let v = C4View(frame: C4Rect(25,25,100,100))
+    /// let v = View(frame: Rect(25,25,100,100))
     /// v.backgroundColor = white
     /// var s = Shadow()
     /// s.opacity = 0.5
@@ -86,12 +86,12 @@ public extension C4View {
             if let layer = layer {
                 shadow.radius = Double(layer.shadowRadius)
                 if let color = layer.shadowColor {
-                    shadow.color = C4Color(color)
+                    shadow.color = Color(color)
                 }
-                shadow.offset = C4Size(layer.shadowOffset)
+                shadow.offset = Size(layer.shadowOffset)
                 shadow.opacity = Double(layer.shadowOpacity)
                 if let path = layer.shadowPath {
-                    shadow.path = C4Path(path: path)
+                    shadow.path = Path(path: path)
                 }
             }
             return shadow
diff --git a/C4/UI/C4View.swift b/C4/UI/View.swift
similarity index 78%
rename from C4/UI/C4View.swift
rename to C4/UI/View.swift
index df79100f..51aed241 100644
--- a/C4/UI/C4View.swift
+++ b/C4/UI/View.swift
@@ -20,29 +20,29 @@
 import UIKit
 
 extension NSValue {
-    /// Initializes an NSValue with a C4Point
-    /// - parameter point: a C4Point
-    convenience init(C4Point point: C4Point) {
+    /// Initializes an NSValue with a Point
+    /// - parameter point: a Point
+    convenience init(Point point: Point) {
         self.init(CGPoint: CGPoint(point))
     }
 }
 
-/// The C4View class defines a rectangular area on the screen and the interfaces for managing visual content in that area. The C4View class itself provides basic behavior for filling its rectangular area with a background color. More sophisticated content can be presented by subclassing UIView and implementing the necessary drawing and event-handling code yourself. The C4 framework also includes a set of standard subclasses that range from simple shapes to movies and images that can be used as-is.
-public class C4View: NSObject {
-    /// A UIView. Internally, C4View wraps and provides access to an internal UIView.
+/// The View class defines a rectangular area on the screen and the interfaces for managing visual content in that area. The View class itself provides basic behavior for filling its rectangular area with a background color. More sophisticated content can be presented by subclassing UIView and implementing the necessary drawing and event-handling code yourself. The C4 framework also includes a set of standard subclasses that range from simple shapes to movies and images that can be used as-is.
+public class View: NSObject {
+    /// A UIView. Internally, View wraps and provides access to an internal UIView.
     public var view: UIView = LayerView()
 
     /// The current rotation value of the view. Animatable.
     /// - returns: A Double value representing the cumulative rotation of the view, measured in Radians.
     public var rotation: Double {
         get {
-            if let number = animatableLayer.valueForKeyPath(C4Layer.rotationKey) as? NSNumber {
+            if let number = animatableLayer.valueForKeyPath(Layer.rotationKey) as? NSNumber {
                 return number.doubleValue
             }
             return  0.0
         }
         set {
-            animatableLayer.setValue(newValue, forKeyPath: C4Layer.rotationKey)
+            animatableLayer.setValue(newValue, forKeyPath: Layer.rotationKey)
         }
     }
 
@@ -52,39 +52,39 @@ public class C4View: NSObject {
     }
 
     internal class LayerView: UIView {
-        var animatableLayer: C4Layer {
-            return self.layer as! C4Layer // swiftlint:disable:this force_cast
+        var animatableLayer: Layer {
+            return self.layer as! Layer // swiftlint:disable:this force_cast
         }
 
         override class func layerClass() -> AnyClass {
-            return C4Layer.self
+            return Layer.self
         }
     }
 
     /// The view's primary layer.
-    /// - returns: A C4Layer, whose properties are animatable (e.g. rotation)
-    public var animatableLayer: C4Layer {
+    /// - returns: A Layer, whose properties are animatable (e.g. rotation)
+    public var animatableLayer: Layer {
         return self.layerView.animatableLayer
     }
 
-    ///  Initializes a C4View.
+    ///  Initializes a View.
     public override init() {
     }
 
-    /// Initializes a new C4View from a UIView.
+    /// Initializes a new View from a UIView.
     /// - parameter view: A UIView.
     public init(view: UIView) {
         self.view = view
     }
 
-    /// Initializes a new C4View with the specifed frame.
+    /// Initializes a new View with the specifed frame.
     /// ````
-    /// let f = C4Rect(0,0,100,100)
-    /// let v = C4View(frame: f)
+    /// let f = Rect(0,0,100,100)
+    /// let v = View(frame: f)
     /// canvas.add(v)
     /// ````
-    /// - parameter frame: A C4Rect, which describes the view’s location and size in its superview’s coordinate system.
-    convenience public init(frame: C4Rect) {
+    /// - parameter frame: A Rect, which describes the view’s location and size in its superview’s coordinate system.
+    convenience public init(frame: Rect) {
         self.init()
         self.view.frame = CGRect(frame)
     }
@@ -95,9 +95,9 @@ public class C4View: NSObject {
     }
 
     /// Returns the receiver's frame. Animatable.
-    public var frame: C4Rect {
+    public var frame: Rect {
         get {
-            return C4Rect(view.frame)
+            return Rect(view.frame)
         }
         set {
             view.frame = CGRect(newValue)
@@ -105,9 +105,9 @@ public class C4View: NSObject {
     }
 
     /// Returns the receiver's bounds. Animatable.
-    public var bounds: C4Rect {
+    public var bounds: Rect {
         get {
-            return C4Rect(view.bounds)
+            return Rect(view.bounds)
         }
         set {
             view.bounds = CGRect(newValue)
@@ -125,9 +125,9 @@ public class C4View: NSObject {
     }
 
     /// Returns the receiver's center point. Animatable.
-    public var center: C4Point {
+    public var center: Point {
         get {
-            return C4Point(view.center)
+            return Point(view.center)
         }
         set {
             view.center = CGPoint(newValue)
@@ -135,22 +135,22 @@ public class C4View: NSObject {
     }
 
     /// Returns the receiver's origin. Animatable.
-    public var origin: C4Point {
+    public var origin: Point {
         get {
-            return center - C4Vector(x: size.width/2, y: size.height/2)
+            return center - Vector(x: size.width/2, y: size.height/2)
         }
         set {
-            center = newValue + C4Vector(x: size.width/2, y: size.height/2)
+            center = newValue + Vector(x: size.width/2, y: size.height/2)
         }
     }
 
     /// Returns the receiver's frame size. Animatable.
-    public var size: C4Size {
+    public var size: Size {
         get {
             return bounds.size
         }
         set {
-            bounds = C4Rect(origin, newValue)
+            bounds = Rect(origin, newValue)
         }
     }
 
@@ -165,10 +165,10 @@ public class C4View: NSObject {
     }
 
     /// Returns the receiver's background color. Animatable.
-    public var backgroundColor: C4Color? {
+    public var backgroundColor: Color? {
         get {
             if let color = view.backgroundColor {
-                return C4Color(color)
+                return Color(color)
             } else {
                 return nil
             }
@@ -203,9 +203,9 @@ public class C4View: NSObject {
     }
 
     /// Returns the receiver's current transform.
-    public var transform: C4Transform {
+    public var transform: Transform {
         get {
-            return C4Transform(view.layer.transform)
+            return Transform(view.layer.transform)
         }
         set {
             view.layer.transform = newValue.transform3D
@@ -216,9 +216,9 @@ public class C4View: NSObject {
     /// normalized layer coordinates - '(0, 0)' is the bottom left corner of
     /// the bounds rect, '(1, 1)' is the top right corner. Defaults to
     /// '(0.5, 0.5)', i.e. the center of the bounds rect. Animatable.
-    public var anchorPoint: C4Point {
+    public var anchorPoint: Point {
         get {
-            return C4Point(view.layer.anchorPoint)
+            return Point(view.layer.anchorPoint)
         }
         set(val) {
             let oldFrame = view.frame
@@ -242,7 +242,7 @@ public class C4View: NSObject {
     ///  The mask view's alpha channel determines how much of the receiver's content and background shows through. Fully or partially opaque pixels allow the underlying content to show through but fully transparent pixels block that content.
     ///  The default value of this property is nil. When configuring a mask, remember to set the size and position of the mask layer to ensure it is aligned properly with the layer it masks.
     ///  The layer you assign to this property must not have a superlayer. If it does, the behavior is undefined.
-    public var mask: C4View? {
+    public var mask: View? {
         didSet {
             if let mask = mask, let _ = mask.view.superview {
                 print("Invalid Mask. The view you are using as a mask has already been added to another view.")
@@ -264,8 +264,8 @@ public class C4View: NSObject {
 
     /// Adds a tap gesture recognizer to the receiver's view.
     /// ````
-    /// let f = C4Rect(0,0,100,100)
-    /// let v = C4View(frame: f)
+    /// let f = Rect(0,0,100,100)
+    /// let v = View(frame: f)
     /// v.addTapGestureRecognizer { location, state in
     ///     println("tapped")
     /// }
@@ -280,8 +280,8 @@ public class C4View: NSObject {
 
     /// Adds a pan gesture recognizer to the receiver's view.
     /// ````
-    /// let f = C4Rect(0,0,100,100)
-    /// let v = C4View(frame: f)
+    /// let f = Rect(0,0,100,100)
+    /// let v = View(frame: f)
     /// v.addPanGestureRecognizer { location, translation, velocity, state in
     ///     println("panned")
     /// }
@@ -295,8 +295,8 @@ public class C4View: NSObject {
 
     /// Adds a pinch gesture recognizer to the receiver's view.
     /// ````
-    /// let f = C4Rect(0,0,100,100)
-    /// let v = C4View(frame: f)
+    /// let f = Rect(0,0,100,100)
+    /// let v = View(frame: f)
     /// v.addPinchGestureRecognizer { scale, velocity, state in
     ///     println("pinched")
     /// }
@@ -310,8 +310,8 @@ public class C4View: NSObject {
 
     /// Adds a rotation gesture recognizer to the receiver's view.
     /// ````
-    /// let f = C4Rect(0,0,100,100)
-    /// let v = C4View(frame: f)
+    /// let f = Rect(0,0,100,100)
+    /// let v = View(frame: f)
     /// v.addRotationGestureRecognizer { rotation, velocity, state in
     ///     println("rotated")
     /// }
@@ -326,8 +326,8 @@ public class C4View: NSObject {
 
     /// Adds a longpress gesture recognizer to the receiver's view.
     /// ````
-    /// let f = C4Rect(0,0,100,100)
-    /// let v = C4View(frame: f)
+    /// let f = Rect(0,0,100,100)
+    /// let v = View(frame: f)
     /// v.addLongPressGestureRecognizer { location, state in
     ///     println("longpress")
     /// }
@@ -342,8 +342,8 @@ public class C4View: NSObject {
 
     /// Adds a swipe gesture recognizer to the receiver's view.
     /// ````
-    /// let f = C4Rect(0,0,100,100)
-    /// let v = C4View(frame: f)
+    /// let f = Rect(0,0,100,100)
+    /// let v = View(frame: f)
     /// v.addSwipeGestureRecognizer { location, state in
     ///     println("swiped")
     /// }
@@ -358,7 +358,7 @@ public class C4View: NSObject {
 
     /// Adds a screen edge pan gesture recognizer to the receiver's view.
     /// ````
-    /// let v = C4View(frame: canvas.bounds)
+    /// let v = View(frame: canvas.bounds)
     /// v.addSwipeGestureRecognizer { location, state in
     /// println("edge pan")
     /// }
@@ -374,17 +374,17 @@ public class C4View: NSObject {
     //MARK: - AddRemoveSubview
 
     /// Adds a view to the end of the receiver’s list of subviews.
-    /// When working with C4, use this method to add views because it handles the addition of both UIView and C4View.
+    /// When working with C4, use this method to add views because it handles the addition of both UIView and View.
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
-    /// let subv = C4View(frame: C4Rect(25,25,50,50))
+    /// let v = View(frame: Rect(0,0,100,100))
+    /// let subv = View(frame: Rect(25,25,50,50))
     /// v.add(subv)
     /// ````
     /// - parameter subview: The view to be added.
     public func add<T>(subview: T?) {
         if let v = subview as? UIView {
             view.addSubview(v)
-        } else if let v = subview as? C4View {
+        } else if let v = subview as? View {
             view.addSubview(v.view)
         } else {
             fatalError("Can't add subview of class `\(subview.dynamicType)`")
@@ -394,14 +394,14 @@ public class C4View: NSObject {
     //MARK: - AddRemoveSubview
 
     /// Adds an array of views to the end of the receiver’s list of subviews.
-    /// When working with C4, use this method to add views because it handles the addition of both UIView and C4View.
+    /// When working with C4, use this method to add views because it handles the addition of both UIView and View.
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
-    /// let subv1 = C4View(frame: C4Rect(25,25,50,50))
-    /// let subv2 = C4View(frame: C4Rect(100,25,50,50))
+    /// let v = View(frame: Rect(0,0,100,100))
+    /// let subv1 = View(frame: Rect(25,25,50,50))
+    /// let subv2 = View(frame: Rect(100,25,50,50))
     /// v.add([subv1,subv2])
     /// ````
-    /// - parameter subviews:	An array of UIView or C4View objects to be added to the receiver.
+    /// - parameter subviews:	An array of UIView or View objects to be added to the receiver.
     public func add<T>(subviews: [T?]) {
         for subv in subviews {
             self.add(subv)
@@ -411,10 +411,10 @@ public class C4View: NSObject {
     /// Unlinks the view from the receiver and its window, and removes it from the responder chain.
     /// Calling this method removes any constraints that refer to the view you are removing, or that refer to any view in the
     /// subtree of the view you are removing.
-    /// When working with C4, use this method to add views because it handles the removal of both UIView and C4View.
+    /// When working with C4, use this method to add views because it handles the removal of both UIView and View.
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
-    /// let subv = C4View(frame: C4Rect(25,25,50,50))
+    /// let v = View(frame: Rect(0,0,100,100))
+    /// let subv = View(frame: Rect(25,25,50,50))
     /// v.add(subv)
     /// v.remove(subv)
     /// ````
@@ -422,7 +422,7 @@ public class C4View: NSObject {
     public func remove<T>(subview: T?) {
         if let v = subview as? UIView {
             v.removeFromSuperview()
-        } else if let v = subview as? C4View {
+        } else if let v = subview as? View {
             v.view.removeFromSuperview()
         } else {
             fatalError("Can't remove subview of class `\(subview.dynamicType)`")
@@ -434,8 +434,8 @@ public class C4View: NSObject {
     /// Calling this method removes any constraints that refer to the view you are removing, or that refer to any view in the
     /// subtree of the view you are removing.
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
-    /// let subv = C4View(frame: C4Rect(25,25,50,50))
+    /// let v = View(frame: Rect(0,0,100,100))
+    /// let subv = View(frame: Rect(25,25,50,50))
     /// v.add(subv)
     /// subv.removeFromSuperview()
     /// ````
@@ -449,7 +449,7 @@ public class C4View: NSObject {
     public func sendToBack<T>(subview: T?) {
         if let v = subview as? UIView {
             view.sendSubviewToBack(v)
-        } else if let v = subview as? C4View {
+        } else if let v = subview as? View {
             view.sendSubviewToBack(v.view)
         } else {
             fatalError("Can't operate on subview of class `\(subview.dynamicType)`")
@@ -461,7 +461,7 @@ public class C4View: NSObject {
     public func bringToFront<T>(subview: T?) {
         if let v = subview as? UIView {
             view.bringSubviewToFront(v)
-        } else if let v = subview as? C4View {
+        } else if let v = subview as? View {
             view.bringSubviewToFront(v.view)
         } else {
             fatalError("Can't operate on subview of class `\(subview.dynamicType)`")
@@ -475,19 +475,19 @@ public class C4View: NSObject {
     /// Because each view has its own coordinates, if you want to check if a point from anywhere on screen falls within a
     /// specific view you should use `hitTest(point, from: canvas)`.
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
-    /// v.hitTest(C4Point(50,50)) //-> true
-    /// v.hitTest(C4Point(50, 101)) //-> false
+    /// let v = View(frame: Rect(0,0,100,100))
+    /// v.hitTest(Point(50,50)) //-> true
+    /// v.hitTest(Point(50, 101)) //-> false
     /// ````
-    /// - parameter point: A `C4Point` to examine
+    /// - parameter point: A `Point` to examine
     /// - returns: `true` if the point is within the object's frame, otherwise `false`.
-    public func hitTest(point: C4Point) -> Bool {
+    public func hitTest(point: Point) -> Bool {
         return CGRectContainsPoint(CGRect(bounds), CGPoint(point))
     }
 
     /// Checks if a specified point, from another view, falls within the frame of the receiver.
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
+    /// let v = View(frame: Rect(0,0,100,100))
     /// canvas.add(v)
     /// canvas.addTapGestureRecognizer() { location, state in
     ///     if v.hitTest(location, from: self.canvas) {
@@ -498,7 +498,7 @@ public class C4View: NSObject {
     /// - parameter point: The point to check
     /// - parameter from: The view whose coordinate system the point is to be converted from
     /// - returns: `true` if the point is within the object's frame, otherwise `false`.
-    public func hitTest(point: C4Point, from: C4View) -> Bool {
+    public func hitTest(point: Point, from: View) -> Bool {
         let p = convert(point, from:from)
         return hitTest(p)
     }
@@ -507,27 +507,27 @@ public class C4View: NSObject {
 
     /// Converts a specified point from a given view's coordinate system to that of the receiver.
     /// ````
-    /// let p = C4Point()
+    /// let p = Point()
     /// let cp = aView.convert(p, from:canvas)
     /// ````
     /// - parameter point: The point to convert
     /// - parameter from: The view whose coordinate system the point is to be converted from
-    /// - returns: A `C4Point` whose values have been translated into the receiver's coordinate system.
-    public func convert(point: C4Point, from: C4View) -> C4Point {
-        return C4Point(view.convertPoint(CGPoint(point), fromCoordinateSpace: from.view))
+    /// - returns: A `Point` whose values have been translated into the receiver's coordinate system.
+    public func convert(point: Point, from: View) -> Point {
+        return Point(view.convertPoint(CGPoint(point), fromCoordinateSpace: from.view))
     }
 
     //MARK: - Positioning
 
     /// Moves the receiver so that it appears on top of the specified view.
     /// - parameter view: The view above which the receive will be positioned
-    public func positionAbove(view: C4View) {
+    public func positionAbove(view: View) {
         zPosition = view.zPosition + 1
     }
 
     /// Moves the receiver so that it appears on below of the specified view.
     /// - parameter view: The view below which the receive will be positioned
-    public func positionBelow(view: C4View) {
+    public func positionBelow(view: View) {
         zPosition = view.zPosition - 1
     }
 }
diff --git a/C4/UI/C4ViewAnimation.swift b/C4/UI/ViewAnimation.swift
similarity index 88%
rename from C4/UI/C4ViewAnimation.swift
rename to C4/UI/ViewAnimation.swift
index 1c7de37e..f333f4cf 100644
--- a/C4/UI/C4ViewAnimation.swift
+++ b/C4/UI/ViewAnimation.swift
@@ -47,8 +47,8 @@ public struct Spring {
     }
 }
 
-/// C4ViewAnimation is a concrete subclass of C4Animation whose execution blocks affect properties of view-based objects.
-public class C4ViewAnimation: C4Animation {
+/// ViewAnimation is a concrete subclass of Animation whose execution blocks affect properties of view-based objects.
+public class ViewAnimation: Animation {
     /// An optional Spring structure.
     /// If this value is non-nil, property animations will default to CASpringAnimation if they are able.
     public var spring: Spring?
@@ -61,7 +61,7 @@ public class C4ViewAnimation: C4Animation {
 
     ///  Initializes an animation object with a block of animtinos to execute.
     ///
-    ///  let anim = C4ViewAnimation() {
+    ///  let anim = ViewAnimation() {
     ///       aView.backgroundColor = C4Blue
     ///  }
     ///
@@ -70,12 +70,12 @@ public class C4ViewAnimation: C4Animation {
         self.animations = animations
     }
 
-    /// Initializes a new C4ViewAnimation.
+    /// Initializes a new ViewAnimation.
     ///
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
+    /// let v = View(frame: Rect(0,0,100,100))
     /// canvas.add(v)
-    /// let bg = C4ViewAnimation(duration: 0.25) {
+    /// let bg = ViewAnimation(duration: 0.25) {
     ///     v.backgroundColor = C4Blue
     /// }
     /// delay(1.0) {
@@ -135,10 +135,10 @@ public class C4ViewAnimation: C4Animation {
 
     /// Initiates the changes specified in the receivers `animations` block.
     public override func animate() {
-        let disable = C4ShapeLayer.disableActions
-        C4ShapeLayer.disableActions = false
+        let disable = ShapeLayer.disableActions
+        ShapeLayer.disableActions = false
 
-        C4.delay(delay) {
+        wait(delay) {
             if let spring = self.spring {
                 self.animateWithSpring(spring)
             } else {
@@ -146,7 +146,7 @@ public class C4ViewAnimation: C4Animation {
             }
         }
 
-        C4ShapeLayer.disableActions = disable
+        ShapeLayer.disableActions = disable
     }
 
     private func animateWithSpring(spring: Spring) {
@@ -158,10 +158,10 @@ public class C4ViewAnimation: C4Animation {
     }
 
     private func animationBlock() {
-        C4ViewAnimation.stack.append(self)
+        ViewAnimation.stack.append(self)
         UIView.setAnimationRepeatCount(Float(self.repeatCount))
         self.doInTransaction(self.animations)
-        C4ViewAnimation.stack.removeLast()
+        ViewAnimation.stack.removeLast()
     }
 
     private func doInTransaction(action: () -> Void) {
@@ -177,29 +177,29 @@ public class C4ViewAnimation: C4Animation {
 }
 
 /// A sequence of animations that run one after the other. This class ignores the duration property.
-public class C4ViewAnimationSequence: C4Animation {
-    private var animations: [C4Animation]
+public class ViewAnimationSequence: Animation {
+    private var animations: [Animation]
     private var currentAnimationIndex: Int = -1
     private var currentObserver: AnyObject?
 
     /// Initializes a set of animations to execute in sequence.
     ///
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
+    /// let v = View(frame: Rect(0,0,100,100))
     /// canvas.add(v)
-    /// let bg = C4ViewAnimation(duration: 0.25) {
+    /// let bg = ViewAnimation(duration: 0.25) {
     ///     v.backgroundColor = C4Blue
     /// }
-    /// let ctr = C4ViewAnimation(duration: 0.25) {
+    /// let ctr = ViewAnimation(duration: 0.25) {
     ///     v.center = self.canvas.center
     /// }
-    /// let seq = C4ViewAnimationSequence(animations: [bg,ctr])
+    /// let seq = ViewAnimationSequence(animations: [bg,ctr])
     /// delay(1.0) {
     ///     seq.animate()
     /// }
     /// ````
     /// - parameter animations: An array of C4Animations
-    public init(animations: [C4Animation]) {
+    public init(animations: [Animation]) {
         self.animations = animations
     }
 
@@ -242,29 +242,29 @@ public class C4ViewAnimationSequence: C4Animation {
 
 /// Groups animations so that they can all be run at the same time. The completion call is dispatched when all the
 /// animations in the group have finished. This class ignores the duration property.
-public class C4ViewAnimationGroup: C4Animation {
-    private var animations: [C4Animation]
+public class ViewAnimationGroup: Animation {
+    private var animations: [Animation]
     private var observers: [AnyObject] = []
     private var completed: [Bool]
 
     /// Initializes a set of animations to be executed at the same time.
     ///
     /// ````
-    /// let v = C4View(frame: C4Rect(0,0,100,100))
+    /// let v = View(frame: Rect(0,0,100,100))
     /// canvas.add(v)
-    /// let bg = C4ViewAnimation(duration: 0.25) {
+    /// let bg = ViewAnimation(duration: 0.25) {
     ///     v.backgroundColor = C4Blue
     /// }
-    /// let ctr = C4ViewAnimation(duration: 0.25) {
+    /// let ctr = ViewAnimation(duration: 0.25) {
     ///     v.center = self.canvas.center
     /// }
-    /// let grp = C4ViewAnimationGroup(animations: [bg,ctr])
+    /// let grp = ViewAnimationGroup(animations: [bg,ctr])
     /// delay(1.0) {
     ///     grp.animate()
     /// }
     /// ````
     /// - parameter animations: An array of C4Animations
-    public init(animations: [C4Animation]) {
+    public init(animations: [Animation]) {
         self.animations = animations
         completed = [Bool](count: animations.count, repeatedValue: false)
     }
diff --git a/C4/UI/C4Wedge.swift b/C4/UI/Wedge.swift
similarity index 69%
rename from C4/UI/C4Wedge.swift
rename to C4/UI/Wedge.swift
index a90f1a22..0f9feabb 100644
--- a/C4/UI/C4Wedge.swift
+++ b/C4/UI/Wedge.swift
@@ -20,15 +20,15 @@
 import QuartzCore
 import UIKit
 
-/// C4Wedge is a concrete subclass of C4Shape whose shape is a wedge with a rounded outer edge.
-public class C4Wedge: C4Shape {
+/// Wedge is a concrete subclass of Shape whose shape is a wedge with a rounded outer edge.
+public class Wedge: Shape {
 
-    /// Initializes a new C4Wedge, with the wedge always taking the shortest distance between start and end.
+    /// Initializes a new Wedge, with the wedge always taking the shortest distance between start and end.
     ///
-    /// This shape differs from C4Arc in that is adds a point at the "center" of the circle on which the wedge exists.
+    /// This shape differs from Arc in that is adds a point at the "center" of the circle on which the wedge exists.
     ///
     /// ````
-    /// let w = C4Wedge(center: canvas.center, radius: 50, start: M_PI_4 * 3, end: M_PI_4)
+    /// let w = Wedge(center: canvas.center, radius: 50, start: M_PI_4 * 3, end: M_PI_4)
     /// canvas.add(w)
     /// ````
     ///
@@ -36,16 +36,16 @@ public class C4Wedge: C4Shape {
     /// - parameter radius: The radius of the wedge.
     /// - parameter start: The start angle of the wedge.
     /// - parameter end: The end angle of the wedge.
-    convenience public init(center: C4Point, radius: Double, start: Double, end: Double) {
+    convenience public init(center: Point, radius: Double, start: Double, end: Double) {
         self.init(center: center, radius: radius, start: start, end: end, clockwise: end > start ? true : false)
     }
 
-    /// Initializes a new C4Wedge, with the wedge always taking the shortest distance between start and end.
+    /// Initializes a new Wedge, with the wedge always taking the shortest distance between start and end.
     ///
-    /// This shape differs from C4Arc in that is adds a point at the "center" of the circle on which the wedge exists.
+    /// This shape differs from Arc in that is adds a point at the "center" of the circle on which the wedge exists.
     ///
     /// ````
-    /// let w = C4Wedge(center: canvas.center, radius: 50, start: M_PI_4 * 3, end: M_PI_4, clockwise: true)
+    /// let w = Wedge(center: canvas.center, radius: 50, start: M_PI_4 * 3, end: M_PI_4, clockwise: true)
     /// canvas.add(w)
     /// ````
     ///
@@ -54,14 +54,14 @@ public class C4Wedge: C4Shape {
     /// - parameter start:     The start angle of the wedge.
     /// - parameter end:       The end angle of the wedge.
     /// - parameter clockwise: Whether or not to close the shape in a clockwise fashion.
-    public init(center: C4Point, radius: Double, start: Double, end: Double, clockwise: Bool) {
+    public init(center: Point, radius: Double, start: Double, end: Double, clockwise: Bool) {
         super.init()
 
         let wedge = CGPathCreateMutable()
         CGPathAddArc(wedge, nil, CGFloat(center.x), CGFloat(center.y), CGFloat(radius), CGFloat(start), CGFloat(end), !clockwise)
         CGPathAddLineToPoint(wedge, nil, CGFloat(center.x), CGFloat(center.y))
         CGPathCloseSubpath(wedge)
-        path = C4Path(path: wedge)
+        path = Path(path: wedge)
         adjustToFitPath()
     }
 }
diff --git a/C4App/Images.xcassets/AppIcon.appiconset/Contents.json b/C4App/Images.xcassets/AppIcon.appiconset/Contents.json
index 4037dcf8..24be6431 100644
--- a/C4App/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/C4App/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -73,8 +73,9 @@
       "scale" : "2x"
     },
     {
-      "idiom" : "ipad",
       "size" : "83.5x83.5",
+      "idiom" : "ipad",
+      "filename" : "iPadPro83.5@2x.png",
       "scale" : "2x"
     }
   ],
diff --git a/C4App/Images.xcassets/AppIcon.appiconset/iPadPro83.5@2x.png b/C4App/Images.xcassets/AppIcon.appiconset/iPadPro83.5@2x.png
new file mode 100644
index 00000000..1233724d
Binary files /dev/null and b/C4App/Images.xcassets/AppIcon.appiconset/iPadPro83.5@2x.png differ
diff --git a/C4App/Images.xcassets/Launch.imageset/Contents.json b/C4App/Images.xcassets/Launch.imageset/Contents.json
new file mode 100644
index 00000000..091a003e
--- /dev/null
+++ b/C4App/Images.xcassets/Launch.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "launch.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "launch@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "launch@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/C4App/Images.xcassets/Launch.imageset/launch.png b/C4App/Images.xcassets/Launch.imageset/launch.png
new file mode 100644
index 00000000..93622313
Binary files /dev/null and b/C4App/Images.xcassets/Launch.imageset/launch.png differ
diff --git a/C4App/Images.xcassets/Launch.imageset/launch@2x.png b/C4App/Images.xcassets/Launch.imageset/launch@2x.png
new file mode 100644
index 00000000..8a678d80
Binary files /dev/null and b/C4App/Images.xcassets/Launch.imageset/launch@2x.png differ
diff --git a/C4App/Images.xcassets/Launch.imageset/launch@3x.png b/C4App/Images.xcassets/Launch.imageset/launch@3x.png
new file mode 100644
index 00000000..d4d631dc
Binary files /dev/null and b/C4App/Images.xcassets/Launch.imageset/launch@3x.png differ
diff --git a/C4App/Images.xcassets/chop.imageset/Contents.json b/C4App/Images.xcassets/chop.imageset/Contents.json
new file mode 100644
index 00000000..60072e01
--- /dev/null
+++ b/C4App/Images.xcassets/chop.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "chop.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "chop@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "chop@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/C4App/Images.xcassets/chop.imageset/chop.png b/C4App/Images.xcassets/chop.imageset/chop.png
new file mode 100644
index 00000000..794c7056
Binary files /dev/null and b/C4App/Images.xcassets/chop.imageset/chop.png differ
diff --git a/C4App/Images.xcassets/chop.imageset/chop@2x.png b/C4App/Images.xcassets/chop.imageset/chop@2x.png
new file mode 100644
index 00000000..295afb75
Binary files /dev/null and b/C4App/Images.xcassets/chop.imageset/chop@2x.png differ
diff --git a/C4App/Images.xcassets/chop.imageset/chop@3x.png b/C4App/Images.xcassets/chop.imageset/chop@3x.png
new file mode 100644
index 00000000..7e88cf25
Binary files /dev/null and b/C4App/Images.xcassets/chop.imageset/chop@3x.png differ
diff --git a/C4App/Images.xcassets/logo.imageset/Contents.json b/C4App/Images.xcassets/logo.imageset/Contents.json
new file mode 100644
index 00000000..ffbc6e03
--- /dev/null
+++ b/C4App/Images.xcassets/logo.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "logo.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "logo@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "logo@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/C4App/Images.xcassets/logo.imageset/logo.png b/C4App/Images.xcassets/logo.imageset/logo.png
new file mode 100644
index 00000000..7d670031
Binary files /dev/null and b/C4App/Images.xcassets/logo.imageset/logo.png differ
diff --git a/C4App/Images.xcassets/logo.imageset/logo@2x.png b/C4App/Images.xcassets/logo.imageset/logo@2x.png
new file mode 100644
index 00000000..687fec55
Binary files /dev/null and b/C4App/Images.xcassets/logo.imageset/logo@2x.png differ
diff --git a/C4App/Images.xcassets/logo.imageset/logo@3x.png b/C4App/Images.xcassets/logo.imageset/logo@3x.png
new file mode 100644
index 00000000..ee9d4acf
Binary files /dev/null and b/C4App/Images.xcassets/logo.imageset/logo@3x.png differ
diff --git a/C4App/Images.xcassets/pattern1.imageset/Contents.json b/C4App/Images.xcassets/pattern1.imageset/Contents.json
new file mode 100644
index 00000000..6b4354a3
--- /dev/null
+++ b/C4App/Images.xcassets/pattern1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "pattern1.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "pattern1@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "pattern1@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/C4App/Images.xcassets/pattern1.imageset/pattern1.png b/C4App/Images.xcassets/pattern1.imageset/pattern1.png
new file mode 100644
index 00000000..fb3df66c
Binary files /dev/null and b/C4App/Images.xcassets/pattern1.imageset/pattern1.png differ
diff --git a/C4App/Images.xcassets/pattern1.imageset/pattern1@2x.png b/C4App/Images.xcassets/pattern1.imageset/pattern1@2x.png
new file mode 100644
index 00000000..99b19fc6
Binary files /dev/null and b/C4App/Images.xcassets/pattern1.imageset/pattern1@2x.png differ
diff --git a/C4App/Images.xcassets/pattern1.imageset/pattern1@3x.png b/C4App/Images.xcassets/pattern1.imageset/pattern1@3x.png
new file mode 100644
index 00000000..5a43b2bb
Binary files /dev/null and b/C4App/Images.xcassets/pattern1.imageset/pattern1@3x.png differ
diff --git a/C4App/Images.xcassets/pattern2.imageset/Contents.json b/C4App/Images.xcassets/pattern2.imageset/Contents.json
new file mode 100644
index 00000000..9575ca4b
--- /dev/null
+++ b/C4App/Images.xcassets/pattern2.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "pattern2.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "pattern2@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "pattern2@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/C4App/Images.xcassets/pattern2.imageset/pattern2.png b/C4App/Images.xcassets/pattern2.imageset/pattern2.png
new file mode 100644
index 00000000..9eaaa34a
Binary files /dev/null and b/C4App/Images.xcassets/pattern2.imageset/pattern2.png differ
diff --git a/C4App/Images.xcassets/pattern2.imageset/pattern2@2x.png b/C4App/Images.xcassets/pattern2.imageset/pattern2@2x.png
new file mode 100644
index 00000000..9c0ec726
Binary files /dev/null and b/C4App/Images.xcassets/pattern2.imageset/pattern2@2x.png differ
diff --git a/C4App/Images.xcassets/pattern2.imageset/pattern2@3x.png b/C4App/Images.xcassets/pattern2.imageset/pattern2@3x.png
new file mode 100644
index 00000000..60c8f410
Binary files /dev/null and b/C4App/Images.xcassets/pattern2.imageset/pattern2@3x.png differ
diff --git a/C4App/Images.xcassets/rockies.imageset/Contents.json b/C4App/Images.xcassets/rockies.imageset/Contents.json
new file mode 100644
index 00000000..af5b59b3
--- /dev/null
+++ b/C4App/Images.xcassets/rockies.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "rockies.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "rockies@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "rockies@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/C4App/Images.xcassets/rockies.imageset/rockies.png b/C4App/Images.xcassets/rockies.imageset/rockies.png
new file mode 100644
index 00000000..b4f70bb4
Binary files /dev/null and b/C4App/Images.xcassets/rockies.imageset/rockies.png differ
diff --git a/C4App/Images.xcassets/rockies.imageset/rockies@2x.png b/C4App/Images.xcassets/rockies.imageset/rockies@2x.png
new file mode 100644
index 00000000..afd028ea
Binary files /dev/null and b/C4App/Images.xcassets/rockies.imageset/rockies@2x.png differ
diff --git a/C4App/Images.xcassets/rockies.imageset/rockies@3x.png b/C4App/Images.xcassets/rockies.imageset/rockies@3x.png
new file mode 100644
index 00000000..4a954d54
Binary files /dev/null and b/C4App/Images.xcassets/rockies.imageset/rockies@3x.png differ
diff --git a/C4App/ViewController.swift b/C4App/ViewController.swift
index 0b34c1a2..f4a20ee4 100644
--- a/C4App/ViewController.swift
+++ b/C4App/ViewController.swift
@@ -20,21 +20,7 @@
 import C4
 import UIKit
 
-class ViewController: C4CanvasController {
+class ViewController: CanvasController {
     override func setup() {
-        let v = C4Movie("halo.mp4")!
-        v.anchorPoint = C4Point(0.5, 1.0)
-        v.center = canvas.center
-        v.backgroundColor = C4Pink
-        canvas.add(v)
-
-        let a = C4ViewAnimation(duration: 1.0) {
-            v.rotation += M_PI
-        }
-        a.addCompletionObserver {
-            a.animate()
-        }
-        a.animate()
-
     }
 }
diff --git a/C4Tests/C4ColorTests.swift b/C4Tests/ColorTests.swift
similarity index 92%
rename from C4Tests/C4ColorTests.swift
rename to C4Tests/ColorTests.swift
index a2d50ab1..7a9c4764 100644
--- a/C4Tests/C4ColorTests.swift
+++ b/C4Tests/ColorTests.swift
@@ -20,9 +20,9 @@
 import C4
 import XCTest
 
-class C4ColorTests: XCTestCase {
+class ColorTests: XCTestCase {
     func testInitWithRedHexValue() {
-        let redColor   = C4Color(0xFF0000FF)
+        let redColor   = Color(0xFF0000FF)
         XCTAssertEqual(redColor.red,   1.0, "Red value should be 1.0")
         XCTAssertEqual(redColor.green, 0.0, "Green value should be 0.0")
         XCTAssertEqual(redColor.blue,  0.0, "Blue value should be 0.0")
@@ -30,7 +30,7 @@ class C4ColorTests: XCTestCase {
     }
 
     func testInitWithGreenHexValue() {
-        let greenColor = C4Color(0x00FF00FF)
+        let greenColor = Color(0x00FF00FF)
         XCTAssertEqual(greenColor.red,   0.0, "Red value should be 0.0")
         XCTAssertEqual(greenColor.green, 1.0, "Green value should be 1.0")
         XCTAssertEqual(greenColor.blue,  0.0, "Blue value should be 0.0")
@@ -38,7 +38,7 @@ class C4ColorTests: XCTestCase {
     }
 
     func testInitWithBlueHexValue() {
-        let blueColor  = C4Color(0x0000FFFF)
+        let blueColor  = Color(0x0000FFFF)
         XCTAssertEqual(blueColor.red,   0.0, "Red value should be 0.0")
         XCTAssertEqual(blueColor.green, 0.0, "Green value should be 0.0")
         XCTAssertEqual(blueColor.blue,  1.0, "Blue value should be 1.0")
@@ -46,7 +46,7 @@ class C4ColorTests: XCTestCase {
     }
 
     func testInitWithClearHexValue() {
-        let clearColor = C4Color(0xFFFFFF00)
+        let clearColor = Color(0xFFFFFF00)
         XCTAssertEqual(clearColor.red,   1.0, "Red value should be 1.0")
         XCTAssertEqual(clearColor.green, 1.0, "Green value should be 1.0")
         XCTAssertEqual(clearColor.blue,  1.0, "Blue value should be 1.0")
diff --git a/C4Tests/C4MathTests.swift b/C4Tests/MathTests.swift
similarity index 99%
rename from C4Tests/C4MathTests.swift
rename to C4Tests/MathTests.swift
index 11f47198..1cd49af7 100644
--- a/C4Tests/C4MathTests.swift
+++ b/C4Tests/MathTests.swift
@@ -20,7 +20,7 @@
 import C4
 import XCTest
 
-class C4MathTests: XCTestCase {
+class MathTests: XCTestCase {
 
     func testLerp() {
         XCTAssert(lerp(a: 0.0, b: 10.0, param: 0.2) == 2.0, "Value should be interpolated")
diff --git a/C4Tests/C4PointTests.swift b/C4Tests/PointTests.swift
similarity index 75%
rename from C4Tests/C4PointTests.swift
rename to C4Tests/PointTests.swift
index c853efaf..b612ebbf 100644
--- a/C4Tests/C4PointTests.swift
+++ b/C4Tests/PointTests.swift
@@ -20,23 +20,23 @@
 import C4
 import XCTest
 
-class C4PointTests: XCTestCase {
+class PointTests: XCTestCase {
     func testDistance() {
-        let pointA = C4Point()
-        let pointB = C4Point(1, 1)
+        let pointA = Point()
+        let pointB = Point(1, 1)
         XCTAssertEqualWithAccuracy(distance(pointA, rhs: pointB), sqrt(2), accuracy: DBL_MIN, "Distance between origin and (1,1) should be √2")
     }
 
     func testTranslate() {
-        let original = C4Point(2, 3)
-        let translated = original + C4Vector(x: 3, y: 2)
-        XCTAssertEqual(translated, C4Point(5, 5), "Point should be translated to (5, 5)")
+        let original = Point(2, 3)
+        let translated = original + Vector(x: 3, y: 2)
+        XCTAssertEqual(translated, Point(5, 5), "Point should be translated to (5, 5)")
     }
 
     func testLerp() {
-        let target = C4Point(10, 10)
-        let lerped = lerp(a: C4Point(), b: target, param: 0.2)
-        XCTAssertEqual(lerped, C4Point(2, 2), "Point should be {2,2}")
+        let target = Point(10, 10)
+        let lerped = lerp(a: Point(), b: target, param: 0.2)
+        XCTAssertEqual(lerped, Point(2, 2), "Point should be {2,2}")
     }
 
 }
diff --git a/C4Tests/C4RectTests.swift b/C4Tests/RectTests.swift
similarity index 63%
rename from C4Tests/C4RectTests.swift
rename to C4Tests/RectTests.swift
index afda533c..3a241fd0 100644
--- a/C4Tests/C4RectTests.swift
+++ b/C4Tests/RectTests.swift
@@ -20,11 +20,11 @@
 import C4
 import XCTest
 
-class C4RectTests: XCTestCase {
+class RectTests: XCTestCase {
     func testIntersects() {
-        let a = C4Rect(0, 0, 100, 100)
-        let b = C4Rect(50, 50, 100, 100)
-        let c = C4Rect(100, 100, 100, 100)
+        let a = Rect(0, 0, 100, 100)
+        let b = Rect(50, 50, 100, 100)
+        let c = Rect(100, 100, 100, 100)
         XCTAssertTrue(a.intersects(b), "a and b intersect")
         XCTAssertFalse(a.intersects(c), "a and c do not intersect")
     }
@@ -32,8 +32,8 @@ class C4RectTests: XCTestCase {
     func testCenter() {
         for _ in 1...10 {
             let val = Double(random(below:100))
-            let rect = C4Rect(0, 0, val, val)
-            XCTAssertEqual(rect.center, C4Point(val/2.0, val/2.0), "Center point should be half the width and height of the C4Rect")
+            let rect = Rect(0, 0, val, val)
+            XCTAssertEqual(rect.center, Point(val/2.0, val/2.0), "Center point should be half the width and height of the Rect")
         }
     }
 
@@ -41,37 +41,37 @@ class C4RectTests: XCTestCase {
         for _ in 1...10 {
             let x = Double(random(below:100))
             let y = Double(random(below:100))
-            let rect = C4Rect(x, y, 100, 100)
-            XCTAssertEqual(rect.max, C4Point(x + 100, y + 100), "Max point should equal the origin plus the size of the C4Rect")
+            let rect = Rect(x, y, 100, 100)
+            XCTAssertEqual(rect.max, Point(x + 100, y + 100), "Max point should equal the origin plus the size of the Rect")
         }
     }
 
     func testIsZero() {
-        XCTAssertTrue(C4Point().isZero(), "A point created with no arguments should be {0,0}")
+        XCTAssertTrue(Point().isZero(), "A point created with no arguments should be {0,0}")
     }
 
     func testContainsRect() {
-        let a = C4Rect(0, 0, 100, 100)
-        let b = C4Rect(50, 50, 50, 50)
-        let c = C4Rect(50, 50, 100, 100)
+        let a = Rect(0, 0, 100, 100)
+        let b = Rect(50, 50, 50, 50)
+        let c = Rect(50, 50, 100, 100)
         XCTAssertTrue(a.contains(b), "A should contain B")
         XCTAssertTrue(c.contains(b), "C should contain B")
         XCTAssertFalse(a.contains(c), "A should not contain C")
     }
 
     func testContainsPoint() {
-        let a = C4Rect(0, 0, 100, 100)
-        let b = C4Rect(25, 25, 50, 50)
-        let c = C4Rect(50, 50, 100, 100)
+        let a = Rect(0, 0, 100, 100)
+        let b = Rect(25, 25, 50, 50)
+        let c = Rect(50, 50, 100, 100)
         XCTAssertTrue(a.contains(b.center),"A should contain the center of B")
         XCTAssertTrue(b.contains(c.origin),"B should contain the origin of C")
         XCTAssertFalse(c.contains(b.origin),"C should not contain the center of A")
     }
 
     func testEquals() {
-        let a = C4Rect(10, 10, 10, 10)
-        var b = C4Rect(0, 0, 10, 10)
-        b.center = C4Point(15, 15)
+        let a = Rect(10, 10, 10, 10)
+        var b = Rect(0, 0, 10, 10)
+        b.center = Point(15, 15)
         XCTAssertEqual(a, b, "A should be equal to B")
     }
 
@@ -80,12 +80,12 @@ class C4RectTests: XCTestCase {
             return Double(random(below: 90) + 10)
         }
 
-        let a = C4Rect(0, 0, r(), r())
-        let b = C4Rect(10, 10, r(), r())
+        let a = Rect(0, 0, r(), r())
+        let b = Rect(10, 10, r(), r())
         let c = intersection(a, rect2: b)
         let x = (b.max.x - a.max.x < 0) ? b.max.x : a.max.x
         let y = (b.max.y - a.max.y < 0) ? b.max.y : a.max.y
-        let d = C4Rect(b.origin.x, b.origin.y, x - b.origin.x, y - b.origin.y)
+        let d = Rect(b.origin.x, b.origin.y, x - b.origin.x, y - b.origin.y)
         XCTAssertEqual(c, d, "C should be equal to D")
     }
 
@@ -94,31 +94,31 @@ class C4RectTests: XCTestCase {
             return Double(random(below: 100))
         }
 
-        let a = C4Rect(r(), r(), r() + 1, r() + 1)
-        let b = C4Rect(r(), r(), r() + 1, r() + 1)
+        let a = Rect(r(), r(), r() + 1, r() + 1)
+        let b = Rect(r(), r(), r() + 1, r() + 1)
         let c = union(a, rect2: b)
-        let o = C4Point(min(a.origin.x, b.origin.x), min(a.origin.y, b.origin.y))
-        let s = C4Size(max(a.max.x, b.max.x) - o.x, max(a.max.y, b.max.y) - o.y)
-        let d = C4Rect(o, s)
+        let o = Point(min(a.origin.x, b.origin.x), min(a.origin.y, b.origin.y))
+        let s = Size(max(a.max.x, b.max.x) - o.x, max(a.max.y, b.max.y) - o.y)
+        let d = Rect(o, s)
         XCTAssertEqual(c, d, "C should be equal to D")
     }
 
     func testIntegral() {
-        XCTAssertEqual(integral(C4Rect(0.1, 0.9, 9.9, 9.1)), C4Rect(0, 0, 10, 10))
+        XCTAssertEqual(integral(Rect(0.1, 0.9, 9.9, 9.1)), Rect(0, 0, 10, 10))
     }
 
     func testStandardize() {
-        XCTAssertEqual(standardize(C4Rect(0, 0, -10, -10)), C4Rect(-10, -10, 10, 10))
+        XCTAssertEqual(standardize(Rect(0, 0, -10, -10)), Rect(-10, -10, 10, 10))
     }
 
     func testInset() {
         func r() -> Double {
             return Double(random(below: 100))
         }
-        let a = C4Rect(r(), r(), r() + 1, r() + 1)
+        let a = Rect(r(), r(), r() + 1, r() + 1)
         let x = r()
         let y = r()
         _ = inset(a, dx: x, dy: y)
-        _ = C4Rect(a.origin, C4Size(a.size.width - x, a.size.height - y))
+        _ = Rect(a.origin, Size(a.size.width - x, a.size.height - y))
     }
 }
diff --git a/C4Tests/C4TransformTests.swift b/C4Tests/TransformTests.swift
similarity index 87%
rename from C4Tests/C4TransformTests.swift
rename to C4Tests/TransformTests.swift
index 9d9ccf11..cd8b2a17 100644
--- a/C4Tests/C4TransformTests.swift
+++ b/C4Tests/TransformTests.swift
@@ -20,10 +20,10 @@
 import C4
 import XCTest
 
-class C4TransformTests: XCTestCase {
+class TransformTests: XCTestCase {
     func testMultiplyByIndentity() {
-        let identity = C4Transform()
-        var transform = C4Transform()
+        let identity = Transform()
+        var transform = Transform()
         for col in 0...3 {
             for row in 0...3 {
                 transform[row, col] = random01()
@@ -34,8 +34,8 @@ class C4TransformTests: XCTestCase {
     }
 
     func testMultiplyByInverse() {
-        let identity = C4Transform()
-        var transform = C4Transform()
+        let identity = Transform()
+        var transform = Transform()
         transform[0, 0] = 1
         transform[0, 1] = 2
         transform[1, 0] = 2
@@ -48,8 +48,8 @@ class C4TransformTests: XCTestCase {
     }
 
     func testTranslationProperty() {
-        let translation = C4Vector(x: 10, y: 20)
-        let transform = C4Transform.makeTranslation(translation)
+        let translation = Vector(x: 10, y: 20)
+        let transform = Transform.makeTranslation(translation)
         XCTAssertEqual(transform.translation, translation,
             "The transform's translation should match the translation used to create it")
     }
diff --git a/C4Tests/C4VectorTests.swift b/C4Tests/VectorTests.swift
similarity index 80%
rename from C4Tests/C4VectorTests.swift
rename to C4Tests/VectorTests.swift
index 7e9b6081..41dedd03 100644
--- a/C4Tests/C4VectorTests.swift
+++ b/C4Tests/VectorTests.swift
@@ -20,37 +20,37 @@
 import C4
 import XCTest
 
-class C4VectorTests: XCTestCase {
+class VectorTests: XCTestCase {
     func testUnitVector() {
-        let vector = C4Vector(x: 8, y: 8, z: 8)
+        let vector = Vector(x: 8, y: 8, z: 8)
         let unitVector = vector.unitVector()!
         XCTAssertEqualWithAccuracy(unitVector.magnitude, 1, accuracy: 1e-15, "Magnitude of unit vector should be 1")
         XCTAssertEqual(unitVector.heading, vector.heading, "Heading of unit vector should be the same as the original")
     }
 
     func testNilUnitVector() {
-        let vector = C4Vector(x: 0, y: 0, z: 0)
+        let vector = Vector(x: 0, y: 0, z: 0)
         let unitVector = vector.unitVector()
         XCTAssert(unitVector == nil, "Callin unitVector on a zero vector should return nil")
     }
 
     func testDotProduct() {
-        let vectorA = C4Vector(x: 1, y: 0)
-        let vectorB = C4Vector(x: 0, y: 1)
+        let vectorA = Vector(x: 1, y: 0)
+        let vectorB = Vector(x: 0, y: 1)
         XCTAssertEqualWithAccuracy(vectorA ⋅ vectorB, 0, accuracy: 1e-15, "Dot product of perpendicular vectors should be 0")
     }
 
     func testAngleTo() {
-        let vectorA = C4Vector(x: 2, y: 0)
-        let vectorB = C4Vector(x: 1, y: 1)
+        let vectorA = Vector(x: 2, y: 0)
+        let vectorB = Vector(x: 1, y: 1)
         let angle = vectorA.angleTo(vectorB)
         XCTAssertEqualWithAccuracy(angle, Double(M_PI)/4.0, accuracy: 1e-15, "Product should be PI/4")
     }
 
     func testAngleToBaseOn() {
-        let vectorA = C4Vector(x: 2, y: 0)
-        let vectorB = C4Vector(x: 1, y: 1)
-        let vectorC = C4Vector(x: 1, y: 0)
+        let vectorA = Vector(x: 2, y: 0)
+        let vectorB = Vector(x: 1, y: 1)
+        let vectorC = Vector(x: 1, y: 0)
         let angle = vectorA.angleTo(vectorB, basedOn:vectorC)
         XCTAssertEqualWithAccuracy(angle, Double(M_PI)/2.0, accuracy: 1e-15, "Product should be PI/2")
     }
@@ -58,7 +58,7 @@ class C4VectorTests: XCTestCase {
     func testDivideScalar() {
         for i in 10...1000 {
             let v = Double(random(below:i))+1.0
-            var vector = C4Vector(x:v, y:v)
+            var vector = Vector(x:v, y:v)
             vector /= v
             XCTAssertEqual(vector.x, 1.0, "Vector should equal 1")
         }
@@ -67,7 +67,7 @@ class C4VectorTests: XCTestCase {
     func testMultiplyScalar() {
         for i in 10...1000 {
             let val = Double(i)
-            var vector = C4Vector(x:val, y:val)
+            var vector = Vector(x:val, y:val)
             vector *= 10
             XCTAssertEqual(vector.x, val*10, "Vector should equal 1")
         }
@@ -76,8 +76,8 @@ class C4VectorTests: XCTestCase {
     func testAddition() {
         for i in 10...1000 {
             let val = Double(i)
-            var vector = C4Vector(x: val, y: val)
-            vector += C4Vector(x: 1, y: 1)
+            var vector = Vector(x: val, y: val)
+            vector += Vector(x: 1, y: 1)
             XCTAssertEqual(vector.x, val+1, "Vectore should be original value + 1")
         }
     }
@@ -85,8 +85,8 @@ class C4VectorTests: XCTestCase {
     func testSubtraction() {
         for i in 10...1000 {
             let val = Double(i)
-            var vector = C4Vector(x: val, y: val)
-            vector -= C4Vector(x: 1, y: 1)
+            var vector = Vector(x: val, y: val)
+            vector -= Vector(x: 1, y: 1)
             XCTAssertEqual(vector.x, val-1, "Vectore should be original value - 1")
         }
     }
diff --git a/C4iOS.xcodeproj/project.pbxproj b/C4iOS.xcodeproj/project.pbxproj
index 76b008f5..0b4103fe 100644
--- a/C4iOS.xcodeproj/project.pbxproj
+++ b/C4iOS.xcodeproj/project.pbxproj
@@ -7,25 +7,26 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		1F754DCB1C48EE600036D39F /* C4ImageLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F754DCA1C48EE600036D39F /* C4ImageLayer.swift */; };
+		1F754DCB1C48EE600036D39F /* ImageLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F754DCA1C48EE600036D39F /* ImageLayer.swift */; };
 		1F75FDEB1C5B1FE700EB62C2 /* C4Loop.aif in Resources */ = {isa = PBXBuildFile; fileRef = 1F75FDE81C5B1FE700EB62C2 /* C4Loop.aif */; };
 		1F75FDEC1C5B1FE700EB62C2 /* halo.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 1F75FDE91C5B1FE700EB62C2 /* halo.mp4 */; };
 		1F75FDED1C5B1FE700EB62C2 /* haloGray.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 1F75FDEA1C5B1FE700EB62C2 /* haloGray.mp4 */; };
-		1F75FDEF1C5B20C900EB62C2 /* C4PlayerLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F75FDEE1C5B20C900EB62C2 /* C4PlayerLayer.swift */; };
-		1F8252CC1BB3C65E0090E98A /* C4Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F8252CB1BB3C65E0090E98A /* C4Timer.swift */; };
-		1F8A2FEB1C4C24FD0087063A /* C4View+Render.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A2FEA1C4C24FD0087063A /* C4View+Render.swift */; };
+		1F75FE951C5CADBF00EB62C2 /* ScreenRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F75FE941C5CADBF00EB62C2 /* ScreenRecorder.swift */; };
 		1FAB35E81C5372CE00620741 /* Pixel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAB35E71C5372CE00620741 /* Pixel.swift */; };
-		1FAB35EA1C53745300620741 /* C4Layer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAB35E91C53745300620741 /* C4Layer.swift */; };
+		1FAB35EA1C53745300620741 /* Layer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAB35E91C53745300620741 /* Layer.swift */; };
 		1FAB35EC1C53749500620741 /* UIView+AddRemove.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAB35EB1C53749500620741 /* UIView+AddRemove.swift */; };
-		61BBAF631BC372BD00A03FD0 /* C4StoredAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BBAF621BC372BD00A03FD0 /* C4StoredAnimation.swift */; };
-		61BBAF651BC38C1200A03FD0 /* C4View+KeyValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BBAF641BC38C1200A03FD0 /* C4View+KeyValues.swift */; };
+		61B92B481C7B963B003BD61C /* PlayerLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61B92B451C7B963B003BD61C /* PlayerLayer.swift */; };
+		61B92B491C7B963B003BD61C /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61B92B461C7B963B003BD61C /* Timer.swift */; };
+		61B92B4A1C7B963B003BD61C /* View+Render.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61B92B471C7B963B003BD61C /* View+Render.swift */; };
+		61B92B4C1C7B96B8003BD61C /* RectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61B92B4B1C7B96B8003BD61C /* RectTests.swift */; };
+		61BBAF631BC372BD00A03FD0 /* StoredAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BBAF621BC372BD00A03FD0 /* StoredAnimation.swift */; };
+		61BBAF651BC38C1200A03FD0 /* View+KeyValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BBAF641BC38C1200A03FD0 /* View+KeyValues.swift */; };
 		A94E3BD419E0E9390039A9C4 /* C4.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 614F824319DB5ED3001DF1D4 /* C4.framework */; };
-		A96F4F451B538330002B3A46 /* C4ColorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9596D401A054B4F0023323D /* C4ColorTests.swift */; };
-		A96F4F461B538330002B3A46 /* C4MathTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9596D411A054B4F0023323D /* C4MathTests.swift */; };
-		A96F4F471B538330002B3A46 /* C4PointTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9596D421A054B4F0023323D /* C4PointTests.swift */; };
-		A96F4F481B538330002B3A46 /* C4RectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F8CB1D91A05781700A20783 /* C4RectTests.swift */; };
-		A96F4F491B538330002B3A46 /* C4VectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9596D431A054B4F0023323D /* C4VectorTests.swift */; };
-		A96F4F4A1B538330002B3A46 /* C4TransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A988A9161A4F57330044007C /* C4TransformTests.swift */; };
+		A96F4F451B538330002B3A46 /* ColorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9596D401A054B4F0023323D /* ColorTests.swift */; };
+		A96F4F461B538330002B3A46 /* MathTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9596D411A054B4F0023323D /* MathTests.swift */; };
+		A96F4F471B538330002B3A46 /* PointTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9596D421A054B4F0023323D /* PointTests.swift */; };
+		A96F4F491B538330002B3A46 /* VectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9596D431A054B4F0023323D /* VectorTests.swift */; };
+		A96F4F4A1B538330002B3A46 /* TransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A988A9161A4F57330044007C /* TransformTests.swift */; };
 		A96F505F1B5385A5002B3A46 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96F505E1B5385A5002B3A46 /* AppDelegate.swift */; };
 		A96F50611B5385A5002B3A46 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96F50601B5385A5002B3A46 /* ViewController.swift */; };
 		A96F50641B5385A5002B3A46 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A96F50621B5385A5002B3A46 /* Main.storyboard */; };
@@ -34,63 +35,63 @@
 		A96F507E1B538650002B3A46 /* C4.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 614F824319DB5ED3001DF1D4 /* C4.framework */; };
 		A96F507F1B538650002B3A46 /* C4.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 614F824319DB5ED3001DF1D4 /* C4.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		A9BC57271C50ABA80068BBA3 /* UIImage+Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9BC57261C50ABA80068BBA3 /* UIImage+Color.swift */; };
-		A9D4F6AD1B534F9F00F937AB /* C4Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6711B534F9F00F937AB /* C4Color.swift */; };
-		A9D4F6AE1B534F9F00F937AB /* C4EventSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6721B534F9F00F937AB /* C4EventSource.swift */; };
-		A9D4F6AF1B534F9F00F937AB /* C4Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6731B534F9F00F937AB /* C4Foundation.swift */; };
-		A9D4F6B01B534F9F00F937AB /* C4Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6741B534F9F00F937AB /* C4Math.swift */; };
-		A9D4F6B21B534F9F00F937AB /* C4Path.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6761B534F9F00F937AB /* C4Path.swift */; };
-		A9D4F6B31B534F9F00F937AB /* C4Point.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6771B534F9F00F937AB /* C4Point.swift */; };
-		A9D4F6B41B534F9F00F937AB /* C4Rect.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6781B534F9F00F937AB /* C4Rect.swift */; };
-		A9D4F6B51B534F9F00F937AB /* C4Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6791B534F9F00F937AB /* C4Size.swift */; };
-		A9D4F6B61B534F9F00F937AB /* C4Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F67A1B534F9F00F937AB /* C4Transform.swift */; };
-		A9D4F6B71B534F9F00F937AB /* C4Vector.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F67B1B534F9F00F937AB /* C4Vector.swift */; };
-		A9D4F6B91B534F9F00F937AB /* C4Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F67E1B534F9F00F937AB /* C4Animation.swift */; };
-		A9D4F6BB1B534F9F00F937AB /* C4Arc.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6801B534F9F00F937AB /* C4Arc.swift */; };
-		A9D4F6BC1B534F9F00F937AB /* C4AudioPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6811B534F9F00F937AB /* C4AudioPlayer.swift */; };
-		A9D4F6BD1B534F9F00F937AB /* C4CanvasController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6821B534F9F00F937AB /* C4CanvasController.swift */; };
-		A9D4F6BE1B534F9F00F937AB /* C4Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6831B534F9F00F937AB /* C4Circle.swift */; };
-		A9D4F6BF1B534F9F00F937AB /* C4Curve.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6841B534F9F00F937AB /* C4Curve.swift */; };
-		A9D4F6C01B534F9F00F937AB /* C4Ellipse.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6851B534F9F00F937AB /* C4Ellipse.swift */; };
-		A9D4F6C11B534F9F00F937AB /* C4Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6861B534F9F00F937AB /* C4Filter.swift */; };
-		A9D4F6C21B534F9F00F937AB /* C4Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6871B534F9F00F937AB /* C4Font.swift */; };
-		A9D4F6C31B534F9F00F937AB /* C4Generator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6881B534F9F00F937AB /* C4Generator.swift */; };
-		A9D4F6C41B534F9F00F937AB /* C4Image+Crop.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6891B534F9F00F937AB /* C4Image+Crop.swift */; };
-		A9D4F6C51B534F9F00F937AB /* C4Image+Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68A1B534F9F00F937AB /* C4Image+Filter.swift */; };
-		A9D4F6C61B534F9F00F937AB /* C4Image+Generator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68B1B534F9F00F937AB /* C4Image+Generator.swift */; };
-		A9D4F6C71B534F9F00F937AB /* C4Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68C1B534F9F00F937AB /* C4Image.swift */; };
-		A9D4F6C81B534F9F00F937AB /* C4Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68D1B534F9F00F937AB /* C4Line.swift */; };
-		A9D4F6C91B534F9F00F937AB /* C4Movie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68E1B534F9F00F937AB /* C4Movie.swift */; };
-		A9D4F6CA1B534F9F00F937AB /* C4Polygon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68F1B534F9F00F937AB /* C4Polygon.swift */; };
-		A9D4F6CB1B534F9F00F937AB /* C4QuadCurve.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6901B534F9F00F937AB /* C4QuadCurve.swift */; };
-		A9D4F6CC1B534F9F00F937AB /* C4Rectangle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6911B534F9F00F937AB /* C4Rectangle.swift */; };
-		A9D4F6CD1B534F9F00F937AB /* C4RegularPolygon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6921B534F9F00F937AB /* C4RegularPolygon.swift */; };
-		A9D4F6CE1B534F9F00F937AB /* C4Shape+Creation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6931B534F9F00F937AB /* C4Shape+Creation.swift */; };
-		A9D4F6CF1B534F9F00F937AB /* C4Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6941B534F9F00F937AB /* C4Shape.swift */; };
-		A9D4F6D01B534F9F00F937AB /* C4ShapeLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6951B534F9F00F937AB /* C4ShapeLayer.swift */; };
-		A9D4F6D11B534F9F00F937AB /* C4Star.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6961B534F9F00F937AB /* C4Star.swift */; };
-		A9D4F6D21B534F9F00F937AB /* C4TextShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6971B534F9F00F937AB /* C4TextShape.swift */; };
-		A9D4F6D31B534F9F00F937AB /* C4Triangle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6981B534F9F00F937AB /* C4Triangle.swift */; };
-		A9D4F6D41B534F9F00F937AB /* C4View+Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6991B534F9F00F937AB /* C4View+Animation.swift */; };
-		A9D4F6D51B534F9F00F937AB /* C4View+Border.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69A1B534F9F00F937AB /* C4View+Border.swift */; };
-		A9D4F6D61B534F9F00F937AB /* C4View+Shadow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69B1B534F9F00F937AB /* C4View+Shadow.swift */; };
-		A9D4F6D71B534F9F00F937AB /* C4View.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69C1B534F9F00F937AB /* C4View.swift */; };
-		A9D4F6D81B534F9F00F937AB /* C4ViewAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69D1B534F9F00F937AB /* C4ViewAnimation.swift */; };
-		A9D4F6D91B534F9F00F937AB /* C4Wedge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69E1B534F9F00F937AB /* C4Wedge.swift */; };
-		A9D4F6DA1B534F9F00F937AB /* C4Bloom.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A01B534F9F00F937AB /* C4Bloom.swift */; };
-		A9D4F6DB1B534F9F00F937AB /* C4Checkerboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A11B534F9F00F937AB /* C4Checkerboard.swift */; };
-		A9D4F6DC1B534F9F00F937AB /* C4ColorBurn.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A21B534F9F00F937AB /* C4ColorBurn.swift */; };
-		A9D4F6DD1B534F9F00F937AB /* C4DotScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A31B534F9F00F937AB /* C4DotScreen.swift */; };
-		A9D4F6DE1B534F9F00F937AB /* C4GaussianBlur.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A41B534F9F00F937AB /* C4GaussianBlur.swift */; };
-		A9D4F6DF1B534F9F00F937AB /* C4HueAdjust.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A51B534F9F00F937AB /* C4HueAdjust.swift */; };
-		A9D4F6E01B534F9F00F937AB /* C4LinearGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A61B534F9F00F937AB /* C4LinearGradient.swift */; };
-		A9D4F6E11B534F9F00F937AB /* C4Sepia.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A71B534F9F00F937AB /* C4Sepia.swift */; };
-		A9D4F6E21B534F9F00F937AB /* C4Sharpen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A81B534F9F00F937AB /* C4Sharpen.swift */; };
-		A9D4F6E31B534F9F00F937AB /* C4Twirl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A91B534F9F00F937AB /* C4Twirl.swift */; };
+		A9D4F6AD1B534F9F00F937AB /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6711B534F9F00F937AB /* Color.swift */; };
+		A9D4F6AE1B534F9F00F937AB /* EventSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6721B534F9F00F937AB /* EventSource.swift */; };
+		A9D4F6AF1B534F9F00F937AB /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6731B534F9F00F937AB /* Foundation.swift */; };
+		A9D4F6B01B534F9F00F937AB /* Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6741B534F9F00F937AB /* Math.swift */; };
+		A9D4F6B21B534F9F00F937AB /* Path.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6761B534F9F00F937AB /* Path.swift */; };
+		A9D4F6B31B534F9F00F937AB /* Point.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6771B534F9F00F937AB /* Point.swift */; };
+		A9D4F6B41B534F9F00F937AB /* Rect.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6781B534F9F00F937AB /* Rect.swift */; };
+		A9D4F6B51B534F9F00F937AB /* Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6791B534F9F00F937AB /* Size.swift */; };
+		A9D4F6B61B534F9F00F937AB /* Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F67A1B534F9F00F937AB /* Transform.swift */; };
+		A9D4F6B71B534F9F00F937AB /* Vector.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F67B1B534F9F00F937AB /* Vector.swift */; };
+		A9D4F6B91B534F9F00F937AB /* Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F67E1B534F9F00F937AB /* Animation.swift */; };
+		A9D4F6BB1B534F9F00F937AB /* Arc.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6801B534F9F00F937AB /* Arc.swift */; };
+		A9D4F6BC1B534F9F00F937AB /* AudioPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6811B534F9F00F937AB /* AudioPlayer.swift */; };
+		A9D4F6BD1B534F9F00F937AB /* CanvasController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6821B534F9F00F937AB /* CanvasController.swift */; };
+		A9D4F6BE1B534F9F00F937AB /* Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6831B534F9F00F937AB /* Circle.swift */; };
+		A9D4F6BF1B534F9F00F937AB /* Curve.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6841B534F9F00F937AB /* Curve.swift */; };
+		A9D4F6C01B534F9F00F937AB /* Ellipse.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6851B534F9F00F937AB /* Ellipse.swift */; };
+		A9D4F6C11B534F9F00F937AB /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6861B534F9F00F937AB /* Filter.swift */; };
+		A9D4F6C21B534F9F00F937AB /* Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6871B534F9F00F937AB /* Font.swift */; };
+		A9D4F6C31B534F9F00F937AB /* Generator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6881B534F9F00F937AB /* Generator.swift */; };
+		A9D4F6C41B534F9F00F937AB /* Image+Crop.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6891B534F9F00F937AB /* Image+Crop.swift */; };
+		A9D4F6C51B534F9F00F937AB /* Image+Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68A1B534F9F00F937AB /* Image+Filter.swift */; };
+		A9D4F6C61B534F9F00F937AB /* Image+Generator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68B1B534F9F00F937AB /* Image+Generator.swift */; };
+		A9D4F6C71B534F9F00F937AB /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68C1B534F9F00F937AB /* Image.swift */; };
+		A9D4F6C81B534F9F00F937AB /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68D1B534F9F00F937AB /* Line.swift */; };
+		A9D4F6C91B534F9F00F937AB /* Movie.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68E1B534F9F00F937AB /* Movie.swift */; };
+		A9D4F6CA1B534F9F00F937AB /* Polygon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F68F1B534F9F00F937AB /* Polygon.swift */; };
+		A9D4F6CB1B534F9F00F937AB /* QuadCurve.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6901B534F9F00F937AB /* QuadCurve.swift */; };
+		A9D4F6CC1B534F9F00F937AB /* Rectangle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6911B534F9F00F937AB /* Rectangle.swift */; };
+		A9D4F6CD1B534F9F00F937AB /* RegularPolygon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6921B534F9F00F937AB /* RegularPolygon.swift */; };
+		A9D4F6CE1B534F9F00F937AB /* Shape+Creation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6931B534F9F00F937AB /* Shape+Creation.swift */; };
+		A9D4F6CF1B534F9F00F937AB /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6941B534F9F00F937AB /* Shape.swift */; };
+		A9D4F6D01B534F9F00F937AB /* ShapeLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6951B534F9F00F937AB /* ShapeLayer.swift */; };
+		A9D4F6D11B534F9F00F937AB /* Star.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6961B534F9F00F937AB /* Star.swift */; };
+		A9D4F6D21B534F9F00F937AB /* TextShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6971B534F9F00F937AB /* TextShape.swift */; };
+		A9D4F6D31B534F9F00F937AB /* Triangle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6981B534F9F00F937AB /* Triangle.swift */; };
+		A9D4F6D41B534F9F00F937AB /* View+Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6991B534F9F00F937AB /* View+Animation.swift */; };
+		A9D4F6D51B534F9F00F937AB /* View+Border.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69A1B534F9F00F937AB /* View+Border.swift */; };
+		A9D4F6D61B534F9F00F937AB /* View+Shadow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69B1B534F9F00F937AB /* View+Shadow.swift */; };
+		A9D4F6D71B534F9F00F937AB /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69C1B534F9F00F937AB /* View.swift */; };
+		A9D4F6D81B534F9F00F937AB /* ViewAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69D1B534F9F00F937AB /* ViewAnimation.swift */; };
+		A9D4F6D91B534F9F00F937AB /* Wedge.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F69E1B534F9F00F937AB /* Wedge.swift */; };
+		A9D4F6DA1B534F9F00F937AB /* Bloom.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A01B534F9F00F937AB /* Bloom.swift */; };
+		A9D4F6DB1B534F9F00F937AB /* Checkerboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A11B534F9F00F937AB /* Checkerboard.swift */; };
+		A9D4F6DC1B534F9F00F937AB /* ColorBurn.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A21B534F9F00F937AB /* ColorBurn.swift */; };
+		A9D4F6DD1B534F9F00F937AB /* DotScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A31B534F9F00F937AB /* DotScreen.swift */; };
+		A9D4F6DE1B534F9F00F937AB /* GaussianBlur.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A41B534F9F00F937AB /* GaussianBlur.swift */; };
+		A9D4F6DF1B534F9F00F937AB /* HueAdjust.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A51B534F9F00F937AB /* HueAdjust.swift */; };
+		A9D4F6E01B534F9F00F937AB /* LinearGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A61B534F9F00F937AB /* LinearGradient.swift */; };
+		A9D4F6E11B534F9F00F937AB /* Sepia.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A71B534F9F00F937AB /* Sepia.swift */; };
+		A9D4F6E21B534F9F00F937AB /* Sharpen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A81B534F9F00F937AB /* Sharpen.swift */; };
+		A9D4F6E31B534F9F00F937AB /* Twirl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6A91B534F9F00F937AB /* Twirl.swift */; };
 		A9D4F6E41B534F9F00F937AB /* UIGestureRecognizer+Closure.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6AA1B534F9F00F937AB /* UIGestureRecognizer+Closure.swift */; };
 		A9D4F6E51B534F9F00F937AB /* UIViewController+C4View.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D4F6AB1B534F9F00F937AB /* UIViewController+C4View.swift */; };
 		A9D4F6E71B53517400F937AB /* C4.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D4F6E61B53516400F937AB /* C4.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		D917E1361B83E0920084BC82 /* C4Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = D917E1351B83E0920084BC82 /* C4Gradient.swift */; };
-		D917E1381B83E1DB0084BC82 /* C4GradientLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D917E1371B83E1DB0084BC82 /* C4GradientLayer.swift */; };
+		D917E1361B83E0920084BC82 /* Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = D917E1351B83E0920084BC82 /* Gradient.swift */; };
+		D917E1381B83E1DB0084BC82 /* GradientLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D917E1371B83E1DB0084BC82 /* GradientLayer.swift */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -132,26 +133,27 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		1F754DCA1C48EE600036D39F /* C4ImageLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4ImageLayer.swift; sourceTree = "<group>"; };
+		1F754DCA1C48EE600036D39F /* ImageLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageLayer.swift; sourceTree = "<group>"; };
 		1F75FDE81C5B1FE700EB62C2 /* C4Loop.aif */ = {isa = PBXFileReference; lastKnownFileType = file; path = C4Loop.aif; sourceTree = "<group>"; };
 		1F75FDE91C5B1FE700EB62C2 /* halo.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = halo.mp4; sourceTree = "<group>"; };
 		1F75FDEA1C5B1FE700EB62C2 /* haloGray.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = haloGray.mp4; sourceTree = "<group>"; };
-		1F75FDEE1C5B20C900EB62C2 /* C4PlayerLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4PlayerLayer.swift; sourceTree = "<group>"; };
-		1F8252CB1BB3C65E0090E98A /* C4Timer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Timer.swift; sourceTree = "<group>"; };
-		1F8A2FEA1C4C24FD0087063A /* C4View+Render.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4View+Render.swift"; sourceTree = "<group>"; };
-		1F8CB1D91A05781700A20783 /* C4RectTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4RectTests.swift; sourceTree = "<group>"; };
+		1F75FE941C5CADBF00EB62C2 /* ScreenRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScreenRecorder.swift; sourceTree = "<group>"; };
 		1FAB35E71C5372CE00620741 /* Pixel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Pixel.swift; sourceTree = "<group>"; };
-		1FAB35E91C53745300620741 /* C4Layer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Layer.swift; sourceTree = "<group>"; };
+		1FAB35E91C53745300620741 /* Layer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Layer.swift; sourceTree = "<group>"; };
 		1FAB35EB1C53749500620741 /* UIView+AddRemove.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+AddRemove.swift"; sourceTree = "<group>"; };
 		614F824319DB5ED3001DF1D4 /* C4.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = C4.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		614F824E19DB5ED4001DF1D4 /* C4Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = C4Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		61BBAF621BC372BD00A03FD0 /* C4StoredAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4StoredAnimation.swift; sourceTree = "<group>"; };
-		61BBAF641BC38C1200A03FD0 /* C4View+KeyValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4View+KeyValues.swift"; sourceTree = "<group>"; };
+		61B92B451C7B963B003BD61C /* PlayerLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlayerLayer.swift; sourceTree = "<group>"; };
+		61B92B461C7B963B003BD61C /* Timer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = "<group>"; };
+		61B92B471C7B963B003BD61C /* View+Render.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "View+Render.swift"; sourceTree = "<group>"; };
+		61B92B4B1C7B96B8003BD61C /* RectTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RectTests.swift; sourceTree = "<group>"; };
+		61BBAF621BC372BD00A03FD0 /* StoredAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoredAnimation.swift; sourceTree = "<group>"; };
+		61BBAF641BC38C1200A03FD0 /* View+KeyValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "View+KeyValues.swift"; sourceTree = "<group>"; };
 		A9596D291A054A960023323D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		A9596D401A054B4F0023323D /* C4ColorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4ColorTests.swift; sourceTree = "<group>"; };
-		A9596D411A054B4F0023323D /* C4MathTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4MathTests.swift; sourceTree = "<group>"; };
-		A9596D421A054B4F0023323D /* C4PointTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4PointTests.swift; sourceTree = "<group>"; };
-		A9596D431A054B4F0023323D /* C4VectorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4VectorTests.swift; sourceTree = "<group>"; };
+		A9596D401A054B4F0023323D /* ColorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorTests.swift; sourceTree = "<group>"; };
+		A9596D411A054B4F0023323D /* MathTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MathTests.swift; sourceTree = "<group>"; };
+		A9596D421A054B4F0023323D /* PointTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PointTests.swift; sourceTree = "<group>"; };
+		A9596D431A054B4F0023323D /* VectorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VectorTests.swift; sourceTree = "<group>"; };
 		A96F505A1B5385A5002B3A46 /* C4App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = C4App.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		A96F505D1B5385A5002B3A46 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		A96F505E1B5385A5002B3A46 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
@@ -159,66 +161,66 @@
 		A96F50631B5385A5002B3A46 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
 		A96F50651B5385A5002B3A46 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
 		A96F50681B5385A5002B3A46 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
-		A988A9161A4F57330044007C /* C4TransformTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4TransformTests.swift; sourceTree = "<group>"; };
+		A988A9161A4F57330044007C /* TransformTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformTests.swift; sourceTree = "<group>"; };
 		A9BC57261C50ABA80068BBA3 /* UIImage+Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Color.swift"; sourceTree = "<group>"; };
-		A9D4F6711B534F9F00F937AB /* C4Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Color.swift; sourceTree = "<group>"; };
-		A9D4F6721B534F9F00F937AB /* C4EventSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4EventSource.swift; sourceTree = "<group>"; };
-		A9D4F6731B534F9F00F937AB /* C4Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Foundation.swift; sourceTree = "<group>"; };
-		A9D4F6741B534F9F00F937AB /* C4Math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Math.swift; sourceTree = "<group>"; };
-		A9D4F6761B534F9F00F937AB /* C4Path.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Path.swift; sourceTree = "<group>"; };
-		A9D4F6771B534F9F00F937AB /* C4Point.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Point.swift; sourceTree = "<group>"; };
-		A9D4F6781B534F9F00F937AB /* C4Rect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Rect.swift; sourceTree = "<group>"; };
-		A9D4F6791B534F9F00F937AB /* C4Size.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Size.swift; sourceTree = "<group>"; };
-		A9D4F67A1B534F9F00F937AB /* C4Transform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Transform.swift; sourceTree = "<group>"; };
-		A9D4F67B1B534F9F00F937AB /* C4Vector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Vector.swift; sourceTree = "<group>"; };
+		A9D4F6711B534F9F00F937AB /* Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = "<group>"; };
+		A9D4F6721B534F9F00F937AB /* EventSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventSource.swift; sourceTree = "<group>"; };
+		A9D4F6731B534F9F00F937AB /* Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Foundation.swift; sourceTree = "<group>"; };
+		A9D4F6741B534F9F00F937AB /* Math.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Math.swift; sourceTree = "<group>"; };
+		A9D4F6761B534F9F00F937AB /* Path.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Path.swift; sourceTree = "<group>"; };
+		A9D4F6771B534F9F00F937AB /* Point.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Point.swift; sourceTree = "<group>"; };
+		A9D4F6781B534F9F00F937AB /* Rect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Rect.swift; sourceTree = "<group>"; };
+		A9D4F6791B534F9F00F937AB /* Size.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Size.swift; sourceTree = "<group>"; };
+		A9D4F67A1B534F9F00F937AB /* Transform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Transform.swift; sourceTree = "<group>"; };
+		A9D4F67B1B534F9F00F937AB /* Vector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Vector.swift; sourceTree = "<group>"; };
 		A9D4F67C1B534F9F00F937AB /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		A9D4F67E1B534F9F00F937AB /* C4Animation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Animation.swift; sourceTree = "<group>"; };
-		A9D4F6801B534F9F00F937AB /* C4Arc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Arc.swift; sourceTree = "<group>"; };
-		A9D4F6811B534F9F00F937AB /* C4AudioPlayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4AudioPlayer.swift; sourceTree = "<group>"; };
-		A9D4F6821B534F9F00F937AB /* C4CanvasController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4CanvasController.swift; sourceTree = "<group>"; };
-		A9D4F6831B534F9F00F937AB /* C4Circle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Circle.swift; sourceTree = "<group>"; };
-		A9D4F6841B534F9F00F937AB /* C4Curve.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Curve.swift; sourceTree = "<group>"; };
-		A9D4F6851B534F9F00F937AB /* C4Ellipse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Ellipse.swift; sourceTree = "<group>"; };
-		A9D4F6861B534F9F00F937AB /* C4Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Filter.swift; sourceTree = "<group>"; };
-		A9D4F6871B534F9F00F937AB /* C4Font.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Font.swift; sourceTree = "<group>"; };
-		A9D4F6881B534F9F00F937AB /* C4Generator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Generator.swift; sourceTree = "<group>"; };
-		A9D4F6891B534F9F00F937AB /* C4Image+Crop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4Image+Crop.swift"; sourceTree = "<group>"; };
-		A9D4F68A1B534F9F00F937AB /* C4Image+Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4Image+Filter.swift"; sourceTree = "<group>"; };
-		A9D4F68B1B534F9F00F937AB /* C4Image+Generator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4Image+Generator.swift"; sourceTree = "<group>"; };
-		A9D4F68C1B534F9F00F937AB /* C4Image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Image.swift; sourceTree = "<group>"; };
-		A9D4F68D1B534F9F00F937AB /* C4Line.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Line.swift; sourceTree = "<group>"; };
-		A9D4F68E1B534F9F00F937AB /* C4Movie.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Movie.swift; sourceTree = "<group>"; };
-		A9D4F68F1B534F9F00F937AB /* C4Polygon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Polygon.swift; sourceTree = "<group>"; };
-		A9D4F6901B534F9F00F937AB /* C4QuadCurve.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4QuadCurve.swift; sourceTree = "<group>"; };
-		A9D4F6911B534F9F00F937AB /* C4Rectangle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Rectangle.swift; sourceTree = "<group>"; };
-		A9D4F6921B534F9F00F937AB /* C4RegularPolygon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4RegularPolygon.swift; sourceTree = "<group>"; };
-		A9D4F6931B534F9F00F937AB /* C4Shape+Creation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4Shape+Creation.swift"; sourceTree = "<group>"; };
-		A9D4F6941B534F9F00F937AB /* C4Shape.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Shape.swift; sourceTree = "<group>"; };
-		A9D4F6951B534F9F00F937AB /* C4ShapeLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4ShapeLayer.swift; sourceTree = "<group>"; };
-		A9D4F6961B534F9F00F937AB /* C4Star.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Star.swift; sourceTree = "<group>"; };
-		A9D4F6971B534F9F00F937AB /* C4TextShape.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4TextShape.swift; sourceTree = "<group>"; };
-		A9D4F6981B534F9F00F937AB /* C4Triangle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Triangle.swift; sourceTree = "<group>"; };
-		A9D4F6991B534F9F00F937AB /* C4View+Animation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4View+Animation.swift"; sourceTree = "<group>"; };
-		A9D4F69A1B534F9F00F937AB /* C4View+Border.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4View+Border.swift"; sourceTree = "<group>"; };
-		A9D4F69B1B534F9F00F937AB /* C4View+Shadow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "C4View+Shadow.swift"; sourceTree = "<group>"; };
-		A9D4F69C1B534F9F00F937AB /* C4View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4View.swift; sourceTree = "<group>"; };
-		A9D4F69D1B534F9F00F937AB /* C4ViewAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4ViewAnimation.swift; sourceTree = "<group>"; };
-		A9D4F69E1B534F9F00F937AB /* C4Wedge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Wedge.swift; sourceTree = "<group>"; };
-		A9D4F6A01B534F9F00F937AB /* C4Bloom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Bloom.swift; sourceTree = "<group>"; };
-		A9D4F6A11B534F9F00F937AB /* C4Checkerboard.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Checkerboard.swift; sourceTree = "<group>"; };
-		A9D4F6A21B534F9F00F937AB /* C4ColorBurn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4ColorBurn.swift; sourceTree = "<group>"; };
-		A9D4F6A31B534F9F00F937AB /* C4DotScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4DotScreen.swift; sourceTree = "<group>"; };
-		A9D4F6A41B534F9F00F937AB /* C4GaussianBlur.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4GaussianBlur.swift; sourceTree = "<group>"; };
-		A9D4F6A51B534F9F00F937AB /* C4HueAdjust.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4HueAdjust.swift; sourceTree = "<group>"; };
-		A9D4F6A61B534F9F00F937AB /* C4LinearGradient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4LinearGradient.swift; sourceTree = "<group>"; };
-		A9D4F6A71B534F9F00F937AB /* C4Sepia.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Sepia.swift; sourceTree = "<group>"; };
-		A9D4F6A81B534F9F00F937AB /* C4Sharpen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Sharpen.swift; sourceTree = "<group>"; };
-		A9D4F6A91B534F9F00F937AB /* C4Twirl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Twirl.swift; sourceTree = "<group>"; };
+		A9D4F67E1B534F9F00F937AB /* Animation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Animation.swift; sourceTree = "<group>"; };
+		A9D4F6801B534F9F00F937AB /* Arc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Arc.swift; sourceTree = "<group>"; };
+		A9D4F6811B534F9F00F937AB /* AudioPlayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioPlayer.swift; sourceTree = "<group>"; };
+		A9D4F6821B534F9F00F937AB /* CanvasController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CanvasController.swift; sourceTree = "<group>"; };
+		A9D4F6831B534F9F00F937AB /* Circle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Circle.swift; sourceTree = "<group>"; };
+		A9D4F6841B534F9F00F937AB /* Curve.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Curve.swift; sourceTree = "<group>"; };
+		A9D4F6851B534F9F00F937AB /* Ellipse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Ellipse.swift; sourceTree = "<group>"; };
+		A9D4F6861B534F9F00F937AB /* Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Filter.swift; sourceTree = "<group>"; };
+		A9D4F6871B534F9F00F937AB /* Font.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Font.swift; sourceTree = "<group>"; };
+		A9D4F6881B534F9F00F937AB /* Generator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Generator.swift; sourceTree = "<group>"; };
+		A9D4F6891B534F9F00F937AB /* Image+Crop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Image+Crop.swift"; sourceTree = "<group>"; };
+		A9D4F68A1B534F9F00F937AB /* Image+Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Image+Filter.swift"; sourceTree = "<group>"; };
+		A9D4F68B1B534F9F00F937AB /* Image+Generator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Image+Generator.swift"; sourceTree = "<group>"; };
+		A9D4F68C1B534F9F00F937AB /* Image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = "<group>"; };
+		A9D4F68D1B534F9F00F937AB /* Line.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Line.swift; sourceTree = "<group>"; };
+		A9D4F68E1B534F9F00F937AB /* Movie.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Movie.swift; sourceTree = "<group>"; };
+		A9D4F68F1B534F9F00F937AB /* Polygon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Polygon.swift; sourceTree = "<group>"; };
+		A9D4F6901B534F9F00F937AB /* QuadCurve.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuadCurve.swift; sourceTree = "<group>"; };
+		A9D4F6911B534F9F00F937AB /* Rectangle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Rectangle.swift; sourceTree = "<group>"; };
+		A9D4F6921B534F9F00F937AB /* RegularPolygon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegularPolygon.swift; sourceTree = "<group>"; };
+		A9D4F6931B534F9F00F937AB /* Shape+Creation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Shape+Creation.swift"; sourceTree = "<group>"; };
+		A9D4F6941B534F9F00F937AB /* Shape.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Shape.swift; sourceTree = "<group>"; };
+		A9D4F6951B534F9F00F937AB /* ShapeLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShapeLayer.swift; sourceTree = "<group>"; };
+		A9D4F6961B534F9F00F937AB /* Star.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Star.swift; sourceTree = "<group>"; };
+		A9D4F6971B534F9F00F937AB /* TextShape.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextShape.swift; sourceTree = "<group>"; };
+		A9D4F6981B534F9F00F937AB /* Triangle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Triangle.swift; sourceTree = "<group>"; };
+		A9D4F6991B534F9F00F937AB /* View+Animation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "View+Animation.swift"; sourceTree = "<group>"; };
+		A9D4F69A1B534F9F00F937AB /* View+Border.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "View+Border.swift"; sourceTree = "<group>"; };
+		A9D4F69B1B534F9F00F937AB /* View+Shadow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "View+Shadow.swift"; sourceTree = "<group>"; };
+		A9D4F69C1B534F9F00F937AB /* View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = View.swift; sourceTree = "<group>"; };
+		A9D4F69D1B534F9F00F937AB /* ViewAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewAnimation.swift; sourceTree = "<group>"; };
+		A9D4F69E1B534F9F00F937AB /* Wedge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Wedge.swift; sourceTree = "<group>"; };
+		A9D4F6A01B534F9F00F937AB /* Bloom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bloom.swift; sourceTree = "<group>"; };
+		A9D4F6A11B534F9F00F937AB /* Checkerboard.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Checkerboard.swift; sourceTree = "<group>"; };
+		A9D4F6A21B534F9F00F937AB /* ColorBurn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorBurn.swift; sourceTree = "<group>"; };
+		A9D4F6A31B534F9F00F937AB /* DotScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DotScreen.swift; sourceTree = "<group>"; };
+		A9D4F6A41B534F9F00F937AB /* GaussianBlur.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GaussianBlur.swift; sourceTree = "<group>"; };
+		A9D4F6A51B534F9F00F937AB /* HueAdjust.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HueAdjust.swift; sourceTree = "<group>"; };
+		A9D4F6A61B534F9F00F937AB /* LinearGradient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinearGradient.swift; sourceTree = "<group>"; };
+		A9D4F6A71B534F9F00F937AB /* Sepia.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sepia.swift; sourceTree = "<group>"; };
+		A9D4F6A81B534F9F00F937AB /* Sharpen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sharpen.swift; sourceTree = "<group>"; };
+		A9D4F6A91B534F9F00F937AB /* Twirl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Twirl.swift; sourceTree = "<group>"; };
 		A9D4F6AA1B534F9F00F937AB /* UIGestureRecognizer+Closure.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIGestureRecognizer+Closure.swift"; sourceTree = "<group>"; };
 		A9D4F6AB1B534F9F00F937AB /* UIViewController+C4View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+C4View.swift"; sourceTree = "<group>"; };
 		A9D4F6E61B53516400F937AB /* C4.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = C4.h; sourceTree = "<group>"; };
-		D917E1351B83E0920084BC82 /* C4Gradient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4Gradient.swift; sourceTree = "<group>"; };
-		D917E1371B83E1DB0084BC82 /* C4GradientLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = C4GradientLayer.swift; sourceTree = "<group>"; };
+		D917E1351B83E0920084BC82 /* Gradient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Gradient.swift; sourceTree = "<group>"; };
+		D917E1371B83E1DB0084BC82 /* GradientLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GradientLayer.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -271,12 +273,12 @@
 		A9596D271A054A960023323D /* C4Tests */ = {
 			isa = PBXGroup;
 			children = (
-				A9596D401A054B4F0023323D /* C4ColorTests.swift */,
-				A9596D411A054B4F0023323D /* C4MathTests.swift */,
-				A9596D421A054B4F0023323D /* C4PointTests.swift */,
-				1F8CB1D91A05781700A20783 /* C4RectTests.swift */,
-				A9596D431A054B4F0023323D /* C4VectorTests.swift */,
-				A988A9161A4F57330044007C /* C4TransformTests.swift */,
+				A9596D401A054B4F0023323D /* ColorTests.swift */,
+				A9596D411A054B4F0023323D /* MathTests.swift */,
+				A9596D421A054B4F0023323D /* PointTests.swift */,
+				61B92B4B1C7B96B8003BD61C /* RectTests.swift */,
+				A9596D431A054B4F0023323D /* VectorTests.swift */,
+				A988A9161A4F57330044007C /* TransformTests.swift */,
 				A9596D281A054A960023323D /* Supporting Files */,
 			);
 			path = C4Tests;
@@ -328,16 +330,16 @@
 		A9D4F6701B534F9F00F937AB /* Core */ = {
 			isa = PBXGroup;
 			children = (
-				A9D4F6711B534F9F00F937AB /* C4Color.swift */,
-				A9D4F6721B534F9F00F937AB /* C4EventSource.swift */,
-				A9D4F6731B534F9F00F937AB /* C4Foundation.swift */,
-				A9D4F6741B534F9F00F937AB /* C4Math.swift */,
-				A9D4F6761B534F9F00F937AB /* C4Path.swift */,
-				A9D4F6771B534F9F00F937AB /* C4Point.swift */,
-				A9D4F6781B534F9F00F937AB /* C4Rect.swift */,
-				A9D4F6791B534F9F00F937AB /* C4Size.swift */,
-				A9D4F67A1B534F9F00F937AB /* C4Transform.swift */,
-				A9D4F67B1B534F9F00F937AB /* C4Vector.swift */,
+				A9D4F6711B534F9F00F937AB /* Color.swift */,
+				A9D4F6721B534F9F00F937AB /* EventSource.swift */,
+				A9D4F6731B534F9F00F937AB /* Foundation.swift */,
+				A9D4F6741B534F9F00F937AB /* Math.swift */,
+				A9D4F6761B534F9F00F937AB /* Path.swift */,
+				A9D4F6771B534F9F00F937AB /* Point.swift */,
+				A9D4F6781B534F9F00F937AB /* Rect.swift */,
+				A9D4F6791B534F9F00F937AB /* Size.swift */,
+				A9D4F67A1B534F9F00F937AB /* Transform.swift */,
+				A9D4F67B1B534F9F00F937AB /* Vector.swift */,
 			);
 			path = Core;
 			sourceTree = "<group>";
@@ -346,52 +348,53 @@
 			isa = PBXGroup;
 			children = (
 				A9D4F69F1B534F9F00F937AB /* Filters */,
-				A9D4F67E1B534F9F00F937AB /* C4Animation.swift */,
-				A9D4F6801B534F9F00F937AB /* C4Arc.swift */,
-				A9D4F6811B534F9F00F937AB /* C4AudioPlayer.swift */,
-				A9D4F6821B534F9F00F937AB /* C4CanvasController.swift */,
-				A9D4F6831B534F9F00F937AB /* C4Circle.swift */,
-				A9D4F6841B534F9F00F937AB /* C4Curve.swift */,
-				A9D4F6851B534F9F00F937AB /* C4Ellipse.swift */,
-				A9D4F6861B534F9F00F937AB /* C4Filter.swift */,
-				A9D4F6871B534F9F00F937AB /* C4Font.swift */,
-				A9D4F6881B534F9F00F937AB /* C4Generator.swift */,
-				D917E1351B83E0920084BC82 /* C4Gradient.swift */,
-				D917E1371B83E1DB0084BC82 /* C4GradientLayer.swift */,
-				A9D4F6891B534F9F00F937AB /* C4Image+Crop.swift */,
-				A9D4F68A1B534F9F00F937AB /* C4Image+Filter.swift */,
-				A9D4F68B1B534F9F00F937AB /* C4Image+Generator.swift */,
-				A9D4F68C1B534F9F00F937AB /* C4Image.swift */,
-				1F754DCA1C48EE600036D39F /* C4ImageLayer.swift */,
-				1FAB35E91C53745300620741 /* C4Layer.swift */,
-				A9D4F68D1B534F9F00F937AB /* C4Line.swift */,
-				A9D4F68E1B534F9F00F937AB /* C4Movie.swift */,
-				1F75FDEE1C5B20C900EB62C2 /* C4PlayerLayer.swift */,
-				A9D4F68F1B534F9F00F937AB /* C4Polygon.swift */,
-				A9D4F6901B534F9F00F937AB /* C4QuadCurve.swift */,
-				A9D4F6911B534F9F00F937AB /* C4Rectangle.swift */,
-				A9D4F6921B534F9F00F937AB /* C4RegularPolygon.swift */,
-				A9D4F6931B534F9F00F937AB /* C4Shape+Creation.swift */,
-				A9D4F6941B534F9F00F937AB /* C4Shape.swift */,
-				A9D4F6951B534F9F00F937AB /* C4ShapeLayer.swift */,
-				A9D4F6961B534F9F00F937AB /* C4Star.swift */,
-				61BBAF621BC372BD00A03FD0 /* C4StoredAnimation.swift */,
-				A9D4F6971B534F9F00F937AB /* C4TextShape.swift */,
-				1F8252CB1BB3C65E0090E98A /* C4Timer.swift */,
-				A9D4F6981B534F9F00F937AB /* C4Triangle.swift */,
-				A9D4F6991B534F9F00F937AB /* C4View+Animation.swift */,
-				A9D4F69A1B534F9F00F937AB /* C4View+Border.swift */,
-				A9D4F69B1B534F9F00F937AB /* C4View+Shadow.swift */,
-				A9D4F69C1B534F9F00F937AB /* C4View.swift */,
-				1F8A2FEA1C4C24FD0087063A /* C4View+Render.swift */,
-				61BBAF641BC38C1200A03FD0 /* C4View+KeyValues.swift */,
-				A9D4F69D1B534F9F00F937AB /* C4ViewAnimation.swift */,
-				A9D4F69E1B534F9F00F937AB /* C4Wedge.swift */,
+				A9D4F67E1B534F9F00F937AB /* Animation.swift */,
+				A9D4F6801B534F9F00F937AB /* Arc.swift */,
+				A9D4F6811B534F9F00F937AB /* AudioPlayer.swift */,
+				A9D4F6821B534F9F00F937AB /* CanvasController.swift */,
+				A9D4F6831B534F9F00F937AB /* Circle.swift */,
+				A9D4F6841B534F9F00F937AB /* Curve.swift */,
+				A9D4F6851B534F9F00F937AB /* Ellipse.swift */,
+				A9D4F6861B534F9F00F937AB /* Filter.swift */,
+				A9D4F6871B534F9F00F937AB /* Font.swift */,
+				A9D4F6881B534F9F00F937AB /* Generator.swift */,
+				D917E1351B83E0920084BC82 /* Gradient.swift */,
+				D917E1371B83E1DB0084BC82 /* GradientLayer.swift */,
+				A9D4F68C1B534F9F00F937AB /* Image.swift */,
+				A9D4F6891B534F9F00F937AB /* Image+Crop.swift */,
+				A9D4F68A1B534F9F00F937AB /* Image+Filter.swift */,
+				A9D4F68B1B534F9F00F937AB /* Image+Generator.swift */,
+				1F754DCA1C48EE600036D39F /* ImageLayer.swift */,
+				1FAB35E91C53745300620741 /* Layer.swift */,
+				A9D4F68D1B534F9F00F937AB /* Line.swift */,
+				A9D4F68E1B534F9F00F937AB /* Movie.swift */,
+				1FAB35E71C5372CE00620741 /* Pixel.swift */,
+				61B92B451C7B963B003BD61C /* PlayerLayer.swift */,
+				A9D4F68F1B534F9F00F937AB /* Polygon.swift */,
+				A9D4F6901B534F9F00F937AB /* QuadCurve.swift */,
+				A9D4F6911B534F9F00F937AB /* Rectangle.swift */,
+				A9D4F6921B534F9F00F937AB /* RegularPolygon.swift */,
+				1F75FE941C5CADBF00EB62C2 /* ScreenRecorder.swift */,
+				A9D4F6941B534F9F00F937AB /* Shape.swift */,
+				A9D4F6931B534F9F00F937AB /* Shape+Creation.swift */,
+				A9D4F6951B534F9F00F937AB /* ShapeLayer.swift */,
+				A9D4F6961B534F9F00F937AB /* Star.swift */,
+				61BBAF621BC372BD00A03FD0 /* StoredAnimation.swift */,
+				A9D4F6971B534F9F00F937AB /* TextShape.swift */,
+				61B92B461C7B963B003BD61C /* Timer.swift */,
+				A9D4F6981B534F9F00F937AB /* Triangle.swift */,
 				A9D4F6AA1B534F9F00F937AB /* UIGestureRecognizer+Closure.swift */,
+				A9BC57261C50ABA80068BBA3 /* UIImage+Color.swift */,
 				1FAB35EB1C53749500620741 /* UIView+AddRemove.swift */,
 				A9D4F6AB1B534F9F00F937AB /* UIViewController+C4View.swift */,
-				A9BC57261C50ABA80068BBA3 /* UIImage+Color.swift */,
-				1FAB35E71C5372CE00620741 /* Pixel.swift */,
+				A9D4F69C1B534F9F00F937AB /* View.swift */,
+				A9D4F6991B534F9F00F937AB /* View+Animation.swift */,
+				A9D4F69A1B534F9F00F937AB /* View+Border.swift */,
+				61BBAF641BC38C1200A03FD0 /* View+KeyValues.swift */,
+				61B92B471C7B963B003BD61C /* View+Render.swift */,
+				A9D4F69B1B534F9F00F937AB /* View+Shadow.swift */,
+				A9D4F69D1B534F9F00F937AB /* ViewAnimation.swift */,
+				A9D4F69E1B534F9F00F937AB /* Wedge.swift */,
 			);
 			path = UI;
 			sourceTree = "<group>";
@@ -399,16 +402,16 @@
 		A9D4F69F1B534F9F00F937AB /* Filters */ = {
 			isa = PBXGroup;
 			children = (
-				A9D4F6A01B534F9F00F937AB /* C4Bloom.swift */,
-				A9D4F6A11B534F9F00F937AB /* C4Checkerboard.swift */,
-				A9D4F6A21B534F9F00F937AB /* C4ColorBurn.swift */,
-				A9D4F6A31B534F9F00F937AB /* C4DotScreen.swift */,
-				A9D4F6A41B534F9F00F937AB /* C4GaussianBlur.swift */,
-				A9D4F6A51B534F9F00F937AB /* C4HueAdjust.swift */,
-				A9D4F6A61B534F9F00F937AB /* C4LinearGradient.swift */,
-				A9D4F6A71B534F9F00F937AB /* C4Sepia.swift */,
-				A9D4F6A81B534F9F00F937AB /* C4Sharpen.swift */,
-				A9D4F6A91B534F9F00F937AB /* C4Twirl.swift */,
+				A9D4F6A01B534F9F00F937AB /* Bloom.swift */,
+				A9D4F6A11B534F9F00F937AB /* Checkerboard.swift */,
+				A9D4F6A21B534F9F00F937AB /* ColorBurn.swift */,
+				A9D4F6A31B534F9F00F937AB /* DotScreen.swift */,
+				A9D4F6A41B534F9F00F937AB /* GaussianBlur.swift */,
+				A9D4F6A51B534F9F00F937AB /* HueAdjust.swift */,
+				A9D4F6A61B534F9F00F937AB /* LinearGradient.swift */,
+				A9D4F6A71B534F9F00F937AB /* Sepia.swift */,
+				A9D4F6A81B534F9F00F937AB /* Sharpen.swift */,
+				A9D4F6A91B534F9F00F937AB /* Twirl.swift */,
 			);
 			path = Filters;
 			sourceTree = "<group>";
@@ -580,72 +583,73 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				1F754DCB1C48EE600036D39F /* C4ImageLayer.swift in Sources */,
-				A9D4F6C81B534F9F00F937AB /* C4Line.swift in Sources */,
-				A9D4F6B01B534F9F00F937AB /* C4Math.swift in Sources */,
-				A9D4F6CD1B534F9F00F937AB /* C4RegularPolygon.swift in Sources */,
-				A9D4F6B51B534F9F00F937AB /* C4Size.swift in Sources */,
-				1F75FDEF1C5B20C900EB62C2 /* C4PlayerLayer.swift in Sources */,
-				A9D4F6C91B534F9F00F937AB /* C4Movie.swift in Sources */,
-				D917E1361B83E0920084BC82 /* C4Gradient.swift in Sources */,
-				61BBAF631BC372BD00A03FD0 /* C4StoredAnimation.swift in Sources */,
-				A9D4F6C11B534F9F00F937AB /* C4Filter.swift in Sources */,
-				A9D4F6DA1B534F9F00F937AB /* C4Bloom.swift in Sources */,
-				A9D4F6BE1B534F9F00F937AB /* C4Circle.swift in Sources */,
-				A9D4F6CA1B534F9F00F937AB /* C4Polygon.swift in Sources */,
+				1F754DCB1C48EE600036D39F /* ImageLayer.swift in Sources */,
+				A9D4F6C81B534F9F00F937AB /* Line.swift in Sources */,
+				A9D4F6B01B534F9F00F937AB /* Math.swift in Sources */,
+				A9D4F6CD1B534F9F00F937AB /* RegularPolygon.swift in Sources */,
+				61B92B4A1C7B963B003BD61C /* View+Render.swift in Sources */,
+				A9D4F6B51B534F9F00F937AB /* Size.swift in Sources */,
+				A9D4F6C91B534F9F00F937AB /* Movie.swift in Sources */,
+				D917E1361B83E0920084BC82 /* Gradient.swift in Sources */,
+				61BBAF631BC372BD00A03FD0 /* StoredAnimation.swift in Sources */,
+				A9D4F6C11B534F9F00F937AB /* Filter.swift in Sources */,
+				61B92B491C7B963B003BD61C /* Timer.swift in Sources */,
+				A9D4F6DA1B534F9F00F937AB /* Bloom.swift in Sources */,
+				A9D4F6BE1B534F9F00F937AB /* Circle.swift in Sources */,
+				A9D4F6CA1B534F9F00F937AB /* Polygon.swift in Sources */,
 				1FAB35EC1C53749500620741 /* UIView+AddRemove.swift in Sources */,
-				A9D4F6E21B534F9F00F937AB /* C4Sharpen.swift in Sources */,
+				A9D4F6E21B534F9F00F937AB /* Sharpen.swift in Sources */,
 				A9D4F6E51B534F9F00F937AB /* UIViewController+C4View.swift in Sources */,
-				A9D4F6C21B534F9F00F937AB /* C4Font.swift in Sources */,
-				A9D4F6DF1B534F9F00F937AB /* C4HueAdjust.swift in Sources */,
-				A9D4F6DD1B534F9F00F937AB /* C4DotScreen.swift in Sources */,
+				A9D4F6C21B534F9F00F937AB /* Font.swift in Sources */,
+				A9D4F6DF1B534F9F00F937AB /* HueAdjust.swift in Sources */,
+				A9D4F6DD1B534F9F00F937AB /* DotScreen.swift in Sources */,
 				A9D4F6E41B534F9F00F937AB /* UIGestureRecognizer+Closure.swift in Sources */,
-				A9D4F6D51B534F9F00F937AB /* C4View+Border.swift in Sources */,
-				A9D4F6E01B534F9F00F937AB /* C4LinearGradient.swift in Sources */,
-				A9D4F6B31B534F9F00F937AB /* C4Point.swift in Sources */,
-				A9D4F6D21B534F9F00F937AB /* C4TextShape.swift in Sources */,
-				A9D4F6D81B534F9F00F937AB /* C4ViewAnimation.swift in Sources */,
-				A9D4F6D01B534F9F00F937AB /* C4ShapeLayer.swift in Sources */,
-				A9D4F6B91B534F9F00F937AB /* C4Animation.swift in Sources */,
-				A9D4F6CE1B534F9F00F937AB /* C4Shape+Creation.swift in Sources */,
-				A9D4F6B61B534F9F00F937AB /* C4Transform.swift in Sources */,
-				D917E1381B83E1DB0084BC82 /* C4GradientLayer.swift in Sources */,
-				1FAB35EA1C53745300620741 /* C4Layer.swift in Sources */,
-				A9D4F6B71B534F9F00F937AB /* C4Vector.swift in Sources */,
-				A9D4F6C61B534F9F00F937AB /* C4Image+Generator.swift in Sources */,
-				A9D4F6E31B534F9F00F937AB /* C4Twirl.swift in Sources */,
+				A9D4F6D51B534F9F00F937AB /* View+Border.swift in Sources */,
+				A9D4F6E01B534F9F00F937AB /* LinearGradient.swift in Sources */,
+				A9D4F6B31B534F9F00F937AB /* Point.swift in Sources */,
+				A9D4F6D21B534F9F00F937AB /* TextShape.swift in Sources */,
+				A9D4F6D81B534F9F00F937AB /* ViewAnimation.swift in Sources */,
+				A9D4F6D01B534F9F00F937AB /* ShapeLayer.swift in Sources */,
+				A9D4F6B91B534F9F00F937AB /* Animation.swift in Sources */,
+				A9D4F6CE1B534F9F00F937AB /* Shape+Creation.swift in Sources */,
+				A9D4F6B61B534F9F00F937AB /* Transform.swift in Sources */,
+				D917E1381B83E1DB0084BC82 /* GradientLayer.swift in Sources */,
+				1FAB35EA1C53745300620741 /* Layer.swift in Sources */,
+				A9D4F6B71B534F9F00F937AB /* Vector.swift in Sources */,
+				A9D4F6C61B534F9F00F937AB /* Image+Generator.swift in Sources */,
+				A9D4F6E31B534F9F00F937AB /* Twirl.swift in Sources */,
 				A9BC57271C50ABA80068BBA3 /* UIImage+Color.swift in Sources */,
-				61BBAF651BC38C1200A03FD0 /* C4View+KeyValues.swift in Sources */,
-				A9D4F6AF1B534F9F00F937AB /* C4Foundation.swift in Sources */,
-				A9D4F6D41B534F9F00F937AB /* C4View+Animation.swift in Sources */,
-				A9D4F6CB1B534F9F00F937AB /* C4QuadCurve.swift in Sources */,
-				A9D4F6D11B534F9F00F937AB /* C4Star.swift in Sources */,
-				A9D4F6C31B534F9F00F937AB /* C4Generator.swift in Sources */,
-				A9D4F6CF1B534F9F00F937AB /* C4Shape.swift in Sources */,
-				A9D4F6CC1B534F9F00F937AB /* C4Rectangle.swift in Sources */,
-				1F8252CC1BB3C65E0090E98A /* C4Timer.swift in Sources */,
-				A9D4F6B41B534F9F00F937AB /* C4Rect.swift in Sources */,
-				A9D4F6E11B534F9F00F937AB /* C4Sepia.swift in Sources */,
-				A9D4F6BD1B534F9F00F937AB /* C4CanvasController.swift in Sources */,
-				A9D4F6DE1B534F9F00F937AB /* C4GaussianBlur.swift in Sources */,
-				A9D4F6DC1B534F9F00F937AB /* C4ColorBurn.swift in Sources */,
-				A9D4F6D61B534F9F00F937AB /* C4View+Shadow.swift in Sources */,
-				A9D4F6C71B534F9F00F937AB /* C4Image.swift in Sources */,
-				A9D4F6D31B534F9F00F937AB /* C4Triangle.swift in Sources */,
+				61BBAF651BC38C1200A03FD0 /* View+KeyValues.swift in Sources */,
+				A9D4F6AF1B534F9F00F937AB /* Foundation.swift in Sources */,
+				A9D4F6D41B534F9F00F937AB /* View+Animation.swift in Sources */,
+				A9D4F6CB1B534F9F00F937AB /* QuadCurve.swift in Sources */,
+				A9D4F6D11B534F9F00F937AB /* Star.swift in Sources */,
+				A9D4F6C31B534F9F00F937AB /* Generator.swift in Sources */,
+				A9D4F6CF1B534F9F00F937AB /* Shape.swift in Sources */,
+				A9D4F6CC1B534F9F00F937AB /* Rectangle.swift in Sources */,
+				A9D4F6B41B534F9F00F937AB /* Rect.swift in Sources */,
+				A9D4F6E11B534F9F00F937AB /* Sepia.swift in Sources */,
+				A9D4F6BD1B534F9F00F937AB /* CanvasController.swift in Sources */,
+				A9D4F6DE1B534F9F00F937AB /* GaussianBlur.swift in Sources */,
+				61B92B481C7B963B003BD61C /* PlayerLayer.swift in Sources */,
+				A9D4F6DC1B534F9F00F937AB /* ColorBurn.swift in Sources */,
+				A9D4F6D61B534F9F00F937AB /* View+Shadow.swift in Sources */,
+				A9D4F6C71B534F9F00F937AB /* Image.swift in Sources */,
+				A9D4F6D31B534F9F00F937AB /* Triangle.swift in Sources */,
 				1FAB35E81C5372CE00620741 /* Pixel.swift in Sources */,
-				A9D4F6AE1B534F9F00F937AB /* C4EventSource.swift in Sources */,
-				A9D4F6C41B534F9F00F937AB /* C4Image+Crop.swift in Sources */,
-				A9D4F6AD1B534F9F00F937AB /* C4Color.swift in Sources */,
-				A9D4F6C51B534F9F00F937AB /* C4Image+Filter.swift in Sources */,
-				A9D4F6BF1B534F9F00F937AB /* C4Curve.swift in Sources */,
-				1F8A2FEB1C4C24FD0087063A /* C4View+Render.swift in Sources */,
-				A9D4F6BC1B534F9F00F937AB /* C4AudioPlayer.swift in Sources */,
-				A9D4F6B21B534F9F00F937AB /* C4Path.swift in Sources */,
-				A9D4F6D71B534F9F00F937AB /* C4View.swift in Sources */,
-				A9D4F6C01B534F9F00F937AB /* C4Ellipse.swift in Sources */,
-				A9D4F6DB1B534F9F00F937AB /* C4Checkerboard.swift in Sources */,
-				A9D4F6BB1B534F9F00F937AB /* C4Arc.swift in Sources */,
-				A9D4F6D91B534F9F00F937AB /* C4Wedge.swift in Sources */,
+				A9D4F6AE1B534F9F00F937AB /* EventSource.swift in Sources */,
+				A9D4F6C41B534F9F00F937AB /* Image+Crop.swift in Sources */,
+				A9D4F6AD1B534F9F00F937AB /* Color.swift in Sources */,
+				A9D4F6C51B534F9F00F937AB /* Image+Filter.swift in Sources */,
+				A9D4F6BF1B534F9F00F937AB /* Curve.swift in Sources */,
+				A9D4F6BC1B534F9F00F937AB /* AudioPlayer.swift in Sources */,
+				A9D4F6B21B534F9F00F937AB /* Path.swift in Sources */,
+				A9D4F6D71B534F9F00F937AB /* View.swift in Sources */,
+				A9D4F6C01B534F9F00F937AB /* Ellipse.swift in Sources */,
+				A9D4F6DB1B534F9F00F937AB /* Checkerboard.swift in Sources */,
+				A9D4F6BB1B534F9F00F937AB /* Arc.swift in Sources */,
+				A9D4F6D91B534F9F00F937AB /* Wedge.swift in Sources */,
+				1F75FE951C5CADBF00EB62C2 /* ScreenRecorder.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -653,12 +657,12 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A96F4F481B538330002B3A46 /* C4RectTests.swift in Sources */,
-				A96F4F4A1B538330002B3A46 /* C4TransformTests.swift in Sources */,
-				A96F4F491B538330002B3A46 /* C4VectorTests.swift in Sources */,
-				A96F4F461B538330002B3A46 /* C4MathTests.swift in Sources */,
-				A96F4F451B538330002B3A46 /* C4ColorTests.swift in Sources */,
-				A96F4F471B538330002B3A46 /* C4PointTests.swift in Sources */,
+				A96F4F4A1B538330002B3A46 /* TransformTests.swift in Sources */,
+				A96F4F491B538330002B3A46 /* VectorTests.swift in Sources */,
+				A96F4F461B538330002B3A46 /* MathTests.swift in Sources */,
+				A96F4F451B538330002B3A46 /* ColorTests.swift in Sources */,
+				A96F4F471B538330002B3A46 /* PointTests.swift in Sources */,
+				61B92B4C1C7B96B8003BD61C /* RectTests.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -835,10 +839,6 @@
 		614F825A19DB5ED4001DF1D4 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(SDKROOT)/Developer/Library/Frameworks",
-					"$(inherited)",
-				);
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
@@ -856,10 +856,6 @@
 		614F825B19DB5ED4001DF1D4 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(SDKROOT)/Developer/Library/Frameworks",
-					"$(inherited)",
-				);
 				GCC_NO_COMMON_BLOCKS = YES;
 				INFOPLIST_FILE = C4Tests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 8.4;