diff --git a/Network/Netclock/Client.hs b/Network/Netclock/Client.hs
--- a/Network/Netclock/Client.hs
+++ b/Network/Netclock/Client.hs
@@ -31,14 +31,33 @@
 
 scport = 57120
 
+logicalTime :: BpsChange -> Double -> Double
+logicalTime change beat = 
+  changeTime change + ((beat - changeBeat change) / changeBps change)
+
 waitBeat :: BpsChange -> Double -> IO ()
 waitBeat change beat = 
-    do let logicalTime = changeTime change + ((beat - changeBeat change) / changeBps change)
+    do let logicalNow = logicalTime change beat
        realNow <- utcr
-       let diff = logicalTime - realNow
+       let diff = logicalNow - realNow
        let delay = floor $ diff * 1000000.0
        when (diff > 0) $ threadDelay delay
        return ()
+
+sched :: String -> String -> String -> Int -> IO () -> IO ()
+sched username clientIp serverIp t f = 
+  do mBps <- newEmptyMVar
+     forkIO $ bpsListen username clientIp serverIp mBps
+     change <- updateBps mBps 0
+     realNow <- utcr
+     let diff = realNow - changeTime change
+         bps = changeBps change
+         beat = changeBeat change + (diff * bps)
+         nextbeat = fromIntegral $ ((floor beat) + t*2) - ((floor beat) `mod` t)
+     current <- updateBps mBps nextbeat
+     forkIO $ do waitBeat current (nextbeat - 1/32) 
+                 f
+     return()
 
 clocked :: String -> String -> String -> Int -> (BpsChange -> Int -> IO ()) -> IO ()
 clocked username clientIp serverIp tpb f = 
diff --git a/netclock.cabal b/netclock.cabal
--- a/netclock.cabal
+++ b/netclock.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.2
+Version:             0.3
 
 -- A short (one-line) description of the package.
 Synopsis:            Netclock protocol
