 	}
 
 	// An overload of timer that immediately sets the handler and schedules the timer
-	public class func repeatingTimer(interval: DispatchTimeInterval, since time: DispatchTime = DispatchTime.now(), leeway: DispatchTimeInterval = .nanoseconds(0), queue: DispatchQueue = DispatchQueue.global(), handler: @escaping () -> Void) -> DispatchSourceTimer {
+    class func repeatingTimer(interval: DispatchTimeInterval, since time: DispatchTime = DispatchTime.now(), leeway: DispatchTimeInterval = .nanoseconds(0), queue: DispatchQueue = DispatchQueue.global(), handler: @escaping () -> Void) -> DispatchSourceTimer {
 		let result = DispatchSource.makeTimerSource(queue: queue)
 		result.setEventHandler(handler: handler)
         result.schedule(deadline: time + interval, repeating: interval, leeway: leeway)

}

public extension DispatchTime {
	public func since(_ previous: DispatchTime) -> DispatchTimeInterval {
        let difference = Int64(uptimeNanoseconds) - Int64(previous.uptimeNanoseconds)
		return .nanoseconds(Int(difference))
	}


public extension DispatchTimeInterval {
    
    static func fromSeconds(_ seconds: Double) -> DispatchTimeInterval {
		return .nanoseconds(Int(seconds * Double(NSEC_PER_SEC)))
	}

    var inSeconds: Double {
		switch self {
		case .seconds(let t):
            return Double(t)
