diff --git a/Network/Netclock/Client.hs b/Network/Netclock/Client.hs
--- a/Network/Netclock/Client.hs
+++ b/Network/Netclock/Client.hs
@@ -1,10 +1,8 @@
 module Network.Netclock.Client where
 
 import Sound.OpenSoundControl
-import Control.Concurrent (threadDelay)
-import Sound.OpenSoundControl
+import Control.Concurrent (threadDelay, forkIO)
 import Control.Concurrent.MVar
-import Control.Concurrent (forkIO)
 import Data.List
 import Data.Maybe
 import qualified Network.Socket as N
@@ -17,7 +15,7 @@
                             }
 
 instance Show BpsChange where
-    show change = "bps " ++ show (changeBps change)
+     show change = "bps " ++ show (changeBps change)
                   ++ " time " ++ show (changeTime change) 
                   ++ " beat " ++ show (changeBeat change)
 
@@ -31,6 +29,8 @@
 
 -- Wait until the the given beat value.
 
+scport = 57120
+
 waitBeat :: BpsChange -> Double -> IO ()
 waitBeat change beat = 
     do let logicalTime = changeTime change + ((beat - changeBeat change) / changeBps change)
@@ -40,8 +40,7 @@
        when (diff > 0) $ threadDelay delay
        return ()
 
-
-clocked :: String -> String -> String -> Int -> (Int -> IO ()) -> IO ()
+clocked :: String -> String -> String -> Int -> (BpsChange -> Int -> IO ()) -> IO ()
 clocked username clientIp serverIp tpb f = 
     do mBps <- newEmptyMVar
        forkIO $ bpsListen username clientIp serverIp mBps
@@ -51,15 +50,15 @@
            bps = changeBps change
            beat = changeBeat change + (diff * bps)
            tick = floor beat * tpb
-       forkIO $ loop mBps tick
-       return ()
+       loop mBps tick
     where 
       loop :: MVar (BpsChange, [BpsChange]) -> Int -> IO ()
       loop mBps tick = 
           do let beat = fromIntegral tick / fromIntegral tpb
              current <- updateBps mBps beat
+             let bps = changeBps current
              waitBeat current beat
-             f tick
+             f current tick
              loop mBps (tick + 1)
 
 updateBps :: MVar (BpsChange, [BpsChange]) -> Double -> IO (BpsChange)
@@ -96,7 +95,7 @@
 
 register :: String -> String -> String -> Int -> IO (UDP)
 register username clientIp serverIp localPort = 
-    do sc <- openUDP serverIp 57120
+    do sc <- openUDP serverIp scport
        let m = Message "/clock/register" [String username, 
                                           String clientIp,
                                           Int localPort,
@@ -104,7 +103,6 @@
                                          ]
        send sc m
        return sc
-
 
 toFloat (Float f) = f
 toFloat (Int f) = fromIntegral 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.1
+Version:             0.2
 
 -- A short (one-line) description of the package.
 Synopsis:            Netclock protocol
@@ -51,7 +51,7 @@
   Exposed-modules:     Network.Netclock.Client
   
   -- Packages needed in order to build this package.
-  Build-depends: base < 5, network, hosc
+  Build-depends: base < 5, network, hosc >= 0.7
   
   -- Modules not exported by this package.
   -- Other-modules:       
