 		}
 	}
 	
-	public func addLabel(label: String, position: CFTimeInterval = 0) {
-		labels[label] = position
+	public func addLabel(label: String, position: AnyObject = 0) {
+		var pos: CFTimeInterval = 0
+		
+		if let time = position as? CFTimeInterval {
+			pos = time
+		} else if let label = position as? NSString {
+			pos = timeFromString(label, relativeToTime: endTime)
+		}
+		
+		labels[label] = pos
+	}
+	
+	public func removeLabel(label: String) {
+		labels[label] = nil
+	}
+	
+	public func timeForLabel(label: String) -> CFTimeInterval {
+		if let time = labels[label] {
+			return time
+		}
+		return 0
 	}
 	
 	public func seekToLabel(label: String, pause: Bool = false) {

	
	private var labels = [String: CFTimeInterval]()
	
	// MARK: Public Methods
	
	public func add(tween: Tween) {
		add(tween, position: endTime)
	}
	
	public func add(tween: Tween, position: CFTimeInterval) {
//		if let time = position as? CFTimeInterval {
//			
//		} else if let label = position as? String {
//			let regex = try! NSRegularExpression(pattern: "(\\w+)?(?:+|\\-)=(\\d+)", options: [])
////			let matches = regex.matchesInString(label, options: [], range: NSRange(location: 0, length: label.length))
////			print(matches)
//		}
		
		// set startTime on tween...
		tween.startTime = position + tween.delay
		
		// remove tween from existing timeline (if `timeline` is not nil)... assign timeline to this
		if let timeline = tween.timeline {

		}
	}
	
	public func shift(amount: CFTimeInterval, afterTime time: CFTimeInterval = 0) -> Timeline {
		for tween in tweens {
			if tween.startTime >= time {
				tween.startTime += amount
				if tween.startTime <= 0 {
					tween.startTime = 0
				}
			}
		}
		for (label, var labelTime) in labels {
			if labelTime >= time {
				labelTime += amount
				if labelTime < 0 {
					labelTime = 0
				}
				labels[label] = labelTime
			}
		}
		return self
	}
	
	public func getActive() -> [Tween] {
		var tweens = [Tween]()
		for tween in self.tweens {
