 		}
 		return false
 	}
+	
+	// MARK: Private Methods
+	
+	private func timeFromString(string: NSString, relativeToTime time: CFTimeInterval = 0) -> CFTimeInterval {
+		var position: CFTimeInterval = time
+		
+		let regex = try! NSRegularExpression(pattern: "(\\w+)?([\\+,\\-]=)(\\d+)", options: [])
+		let match = regex.firstMatchInString(string as String, options: [], range: NSRange(location: 0, length: string.length))
+		if let match = match {
+			var idx = 1
+			var multiplier: CFTimeInterval = 1
+			while idx < match.numberOfRanges {
+				let range = match.rangeAtIndex(idx)
+				if range.length <= string.length && range.location < string.length {
+					let val = string.substringWithRange(range)
+					// label
+					if idx == 1 {
+						position = timeForLabel(val)
+					} else if idx == 2 {
+						if val == "-=" {
+							multiplier = -1
+						}
+					} else if idx == 3 {
+						position += CFTimeInterval(val)!
+					}
+					print(range)
+					print(string.substringWithRange(range))
+				}
+				idx++
+			}
+			position *= multiplier
+		}
+		
+		return position
+	}
 }
		}
	}
	
	public func getActive() -> [Tween] {
		var tweens = [Tween]()
		for tween in self.tweens {

	
	private var labels = [String: CFTimeInterval]()
	
	// MARK: Lifecycle
	
	convenience init(tweens: [Tween]?) {
		self.init()
		
		if let tweens = tweens {
			for tween in tweens {
				add(tween)
			}
		}
	}
	
	// MARK: Public Methods
	
	public func add(tween: Tween) {
		add(tween, position: endTime)
	}
	
	public func add(tween: Tween, position: AnyObject) {
		var pos: CFTimeInterval = 0
		
		if let time = position as? CFTimeInterval {
			pos = time
		} else if let label = position as? NSString {
			pos = timeFromString(label, relativeToTime: endTime)
		}
		tween.startTime = pos + tween.delay
		
		// remove tween from existing timeline (if `timeline` is not nil)... assign timeline to this
		if let timeline = tween.timeline {
