diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -5,11 +5,11 @@
 
 jack:
 # -n 2 is default, larger values are not supported
-	jackd -d alsa -r 44100 -n 3 -d hw:0 &
-#	jackd -d alsa -r 44100 -d hw:0 &
+	jackd --nozombies -d alsa -Xseq -r 44100 -n 3 -d hw:0 &
+#	jackd -d alsa -Xseq -r 44100 -d hw:0 &
 
 jack-stop:
-	kill `pgrep jackd`
+	pkill jackd
 
 supercollider:
 	(export SC_JACK_DEFAULT_OUTPUTS=alsa_pcm:playback_1,alsa_pcm:playback_2; \
@@ -25,7 +25,7 @@
 # block size 4096 freezes the machine
 # more than two buffer blocks (-n 2) are not supported
 #	jackd --realtime -d alsa -r 44100 -p 4096 -d hw:0 &
-	jackd --realtime -d alsa -r 44100 -d hw:0 &
+	jackd --realtime -d alsa -Xseq -r 44100 -d hw:0 &
 
 scj-rt:	jack-rt supercollider
 	echo "start with 'sudo make scj-rt'"
diff --git a/haskore-supercollider.cabal b/haskore-supercollider.cabal
--- a/haskore-supercollider.cabal
+++ b/haskore-supercollider.cabal
@@ -1,5 +1,5 @@
 Name:           haskore-supercollider
-Version:        0.1.2.2
+Version:        0.2
 License:        GPL
 License-File:   LICENSE
 Author:         Henning Thielemann <haskell@henning-thielemann.de>
@@ -26,7 +26,7 @@
 Source-Repository this
   type:     darcs
   location: http://code.haskell.org/haskore/revised/supercollider/
-  tag:      0.1.2.2
+  tag:      0.2
 
 Flag splitBase
   description: Choose the new smaller, split-up base package.
@@ -37,27 +37,27 @@
 
 Library
   Build-Depends:
-    haskore-realtime >= 0.1 && < 0.2,
+    haskore-realtime >= 0.2 && < 0.3,
     haskore >=0.1 && <0.3,
     -- for SuperCollider support
-    hosc >=0.8 && <0.9,
-    hsc3 >=0.8 && <0.9,
-    opensoundcontrol-ht >=0.1 && <0.2,
-    supercollider-ht >=0.1 && <0.2,
-    bytestring >=0.9 && <1.0,
+    hosc >=0.13 && <0.14,
+    hsc3 >=0.13 && <0.14,
+    opensoundcontrol-ht >=0.2 && <0.3,
+    supercollider-ht >=0.2 && <0.3,
+    bytestring >=0.9 && <0.11,
     -- dependency on non-negative for Haddock
     non-negative >=0.0.1 && <0.2,
     event-list >=0.0.6 && <0.2,
     data-accessor >=0.2 && <0.3,
     utility-ht >=0.0.3 && <0.1,
     unix >= 2.0 && <3,
-    transformers >=0.2 && <0.3
+    transformers >=0.2 && <0.5
 
   If flag(splitBase)
     Build-Depends:
-      process >=1.0 && <1.1,
-      array >=0.1 && <0.4,
-      containers >=0.1 && <0.4,
+      process >=1.0 && <1.2,
+      array >=0.1 && <0.5,
+      containers >=0.1 && <0.6,
       random >=1.0 && <1.1,
       base >=3 && <5
   Else
@@ -85,8 +85,6 @@
     Haskore.Interface.SuperCollider.Schedule
     Haskore.Interface.SuperCollider.Schedule.Install
     Haskore.Interface.SuperCollider.Schedule.Channel
-    -- deprecated
-    Haskore.Interface.SuperCollider.Play.Life
   Other-modules:
     Haskore.Interface.SuperCollider.Timer
     Haskore.General.IdGenerator
diff --git a/src/Haskore/Interface/SuperCollider/Channel.hs b/src/Haskore/Interface/SuperCollider/Channel.hs
--- a/src/Haskore/Interface/SuperCollider/Channel.hs
+++ b/src/Haskore/Interface/SuperCollider/Channel.hs
@@ -5,10 +5,9 @@
 
 -- import qualified Sound.OpenSoundControl.Transport.Monad as Trans
 
-import qualified Sound.SC3.UGen.UGen as SCUGen
 import qualified Sound.SC3.UGen.IO   as SCIO
 import qualified Sound.SC3.UGen.Rate as SCRate
-import Sound.SC3.UGen.UGen (UGen)
+import Sound.SC3.UGen.Type (UGen, constant, )
 
 
 type Channel = Int
@@ -36,8 +35,8 @@
 
 readUGen :: NumberChannels -> Channel -> UGen
 readUGen numChan chan =
-   SCIO.in' numChan SCRate.AR (SCUGen.Constant (fromIntegral chan))
+   SCIO.in' numChan SCRate.AR (constant chan)
 
 writeUGen :: Channel -> UGen -> UGen
 writeUGen chan =
-   SCIO.out (SCUGen.Constant (fromIntegral chan))
+   SCIO.out (constant chan)
diff --git a/src/Haskore/Interface/SuperCollider/Example.hs b/src/Haskore/Interface/SuperCollider/Example.hs
--- a/src/Haskore/Interface/SuperCollider/Example.hs
+++ b/src/Haskore/Interface/SuperCollider/Example.hs
@@ -5,7 +5,7 @@
 import qualified Haskore.Interface.SuperCollider.Schedule as Schedule
 import qualified Haskore.Interface.SuperCollider.SoundMap as SoundMap
 
-import qualified Sound.SC3.UGen.UGen       as SCUGen
+import qualified Sound.SC3.UGen.Type       as SCType
 import qualified Sound.SC3.UGen.Math       as SCMath
 import qualified Sound.SC3.UGen.Rate       as SCRate
 import qualified Sound.SC3.UGen.Oscillator as SCOsci
@@ -15,9 +15,9 @@
 import qualified Sound.SC3.UGen.Envelope.Construct as SCEnvCons
 import Sound.SC3.UGen.Enum
            (DoneAction(DoNothing, PauseSynth),
-            EnvCurve(EnvLin, EnvSin))
+            Envelope_Curve(EnvLin, EnvSin))
 
-import           Sound.SC3.UGen.UGen (UGen)
+import           Sound.SC3.UGen.Type (UGen, )
 
 import           Haskore.Melody.Standard   as StdMelody
 import qualified Haskore.Melody            as Melody
@@ -38,12 +38,14 @@
 
 import qualified Data.Accessor.Basic as Accessor
 
+import System.Exit (ExitCode, )
 
 import Data.List (genericLength)
-import Data.Ratio(Rational,(%))
+import Data.Ratio ((%))
 import System.Random (randomRs, mkStdGen)
 
 
+
 latency :: Schedule.Time
 latency = 0.1
 
@@ -53,30 +55,28 @@
 play =
    Play.schedule latency . snd
 
-render :: Song -> IO ()
+render :: Song -> IO ExitCode
 render (fileName, schedule) =
    do B.writeFile (fileName++".osc") (Render.byteStringFromSchedule schedule)
       Render.runSCSynth [] 2 Render.AIFF Render.Int16 44100 fileName
-      return ()
 
 
-
 glissandoStringsUGen :: UGen -> UGen -> UGen
 glissandoStringsUGen vel freq =
     let -- control = 2*freq - SCFilter.lag freq 0.2
         control = SCFilter.lag freq 0.2
         volume  = vel * 0.3
-        tone0   = SCOsci.saw SCRate.AR (control * SCUGen.MCE [0.998, 1.005])
-        tone1   = SCOsci.saw SCRate.AR (control * SCUGen.MCE [0.995, 1.002])
+        tone0   = SCOsci.saw SCRate.AR (control * SCType.mce [0.998, 1.005])
+        tone1   = SCOsci.saw SCRate.AR (control * SCType.mce [0.995, 1.002])
     in  (tone0 + tone1) * volume
 
 reverb :: UGen -> UGen -> UGen
 reverb dec x =
    0.7*x + 0.03 *
       sum (map
-         (\delfl -> let del = SCUGen.Constant delfl
+         (\delfl -> let del = SCType.constant (delfl :: Double)
                     in  SCFilter.combN x del del dec)
-         (take 8 (randomRs (0.01,0.03) (mkStdGen 2347))))
+         (take 8 (randomRs (0.01, 0.03) (mkStdGen 2347))))
 
 filterStrings :: SoundMap.Instrument
 filterStrings =
@@ -115,7 +115,7 @@
               (\detune phase -> SCOsci.lfSaw SCRate.AR (freq*detune) phase)
               detunes phases
         (tonesLeft,tonesRight) = splitAt n tones
-    in  volume * SCUGen.MCE [sum tonesLeft, sum tonesRight]
+    in  volume * SCType.mce [sum tonesLeft, sum tonesRight]
 
 modulatedStrings :: SoundMap.Instrument
 modulatedStrings =
@@ -131,7 +131,7 @@
               (randomRs (2,5)     (mkStdGen 105))
               (randomRs (0,2*pi)  (mkStdGen 234))
         (tonesLeft,tonesRight) = splitAt n $ take (2*n) tones
-    in  volume * SCUGen.MCE [sum tonesLeft, sum tonesRight]
+    in  volume * SCType.mce [sum tonesLeft, sum tonesRight]
 
 brass :: SoundMap.Instrument
 brass =
@@ -165,7 +165,7 @@
     let env = SCEnv.xLine SCRate.KR 1.5 0.1 1 DoNothing
         saw = SCEnv.xLine SCRate.KR 1 0.05 5 DoNothing
                * SCOsci.saw SCRate.AR
-                    (SCUGen.MCE [freq*(1-detune), freq*(1+detune)])
+                    (SCType.mce [freq*(1-detune), freq*(1+detune)])
         prc = SCFilter.rlpf saw (exp (2*vel*env) * freq * 1.2) 0.05
     in  prc * 0.1
 
@@ -202,7 +202,7 @@
 harpsichord =
   SoundMap.instrumentFromUGen $ \ vel freq ->
    let env = SCEnv.xLine SCRate.KR 1.5 0.03 1 PauseSynth
-       saw = SCOsci.saw SCRate.AR (SCUGen.MCE [freq*0.995, freq*1.005]) * env * vel
+       saw = SCOsci.saw SCRate.AR (SCType.mce [freq*0.995, freq*1.005]) * env * vel
    in  saw
 
 
@@ -217,7 +217,7 @@
 colorDust sampleRate =
   SoundMap.instrumentFromUGen $ \ _vel freq ->
     0.0005 * SCFilter.rlpf
-      (SCUGen.Constant sampleRate * SCNoise.dust seed SCRate.AR 10)
+      (SCType.constant sampleRate * SCNoise.dust seed SCRate.AR 10)
       freq 0.01
 
 
@@ -227,14 +227,14 @@
 
 cubicSine :: UGen -> UGen
 cubicSine freq =
-   let osci = SCOsci.sinOsc SCRate.AR (SCUGen.MCE [freq*1.003, freq*0.997]) 0
+   let osci = SCOsci.sinOsc SCRate.AR (SCType.mce [freq*1.003, freq*0.997]) 0
    in  osci*osci*osci
 
 cubicPhaserSaw :: UGen -> UGen
 cubicPhaserSaw freq =
    let osci dfreq = sum $ map (SCOsci.saw SCRate.AR) [dfreq*1.003, dfreq*0.997]
        osciCubic dfreq = osci dfreq * osci dfreq * osci dfreq
-   in  SCUGen.MCE [osciCubic (freq*1.002), osciCubic (freq*0.998)]
+   in  SCType.mce [osciCubic (freq*1.002), osciCubic (freq*0.998)]
 
 
 
@@ -243,7 +243,7 @@
 midiInstrMap :: SoundMap.InstrumentTable MidiMusic.Instr
 midiInstrMap =
   [(MidiMusic.AcousticGrandPiano, sawPerc),
-   (MidiMusic.SynthBass1,         dynPerc (SCUGen.Constant 0.003)),
+   (MidiMusic.SynthBass1,         dynPerc 0.003),
    (MidiMusic.SynthBrass1,        brass),
    (MidiMusic.StringEnsemble1,    strings)]
 
@@ -334,18 +334,18 @@
         env     = SCEnv.envGen SCRate.KR 1 2 0 1 PauseSynth
                      (SCEnvCons.envSine totalDur 1)
                      -- (bridge 1 dur 1)
-        tone0   = SCOsci.saw SCRate.AR (freq * SCUGen.MCE [0.998, 1.005])
-        tone1   = SCOsci.saw SCRate.AR (freq * SCUGen.MCE [0.995, 1.002])
+        tone0   = SCOsci.saw SCRate.AR (freq * SCType.mce [0.998, 1.005])
+        tone1   = SCOsci.saw SCRate.AR (freq * SCType.mce [0.995, 1.002])
     in  filtered
 
-bridge :: UGen -> UGen -> UGen -> [UGen]
+bridge :: UGen -> UGen -> UGen -> SCEnv.Envelope UGen
 bridge fadeDur sustainDur lvl =
    let segTypes = [EnvSin, EnvLin, EnvSin]
        clippedFadeDur = min fadeDur sustainDur
-   in  SCEnvCons.env
+   in  SCEnv.Envelope
           [0, lvl, lvl, 0]
           [clippedFadeDur, max 0 (sustainDur-fadeDur), clippedFadeDur]
-          segTypes (-1) (-1)
+          segTypes (Just (-1)) (Just (-1))
 
 seed :: Int
 seed = 0
@@ -354,7 +354,7 @@
 hihat =
   SoundMap.drumFromUGen $ \ vel ->
    let noise = SCNoise.whiteNoise seed SCRate.AR
-   in  SCFilter.hpf noise (SCUGen.MCE [4000, 4001]) *
+   in  SCFilter.hpf noise (SCType.mce [4000, 4001]) *
        SCEnv.xLine SCRate.KR 1 0.01 0.2 DoNothing * vel * 0.25
 
 bassdrum :: SoundMap.Drum
@@ -362,7 +362,7 @@
   SoundMap.drumFromUGen $ \ vel ->
    let freq = SCEnv.xLine SCRate.KR 100 10 0.5 DoNothing
        env  = SCEnv.xLine SCRate.KR 1 0.1 0.5 DoNothing * vel * 0.8
-       osci = SCOsci.sinOsc SCRate.AR freq 0 * SCUGen.MCE [env,env]
+       osci = SCOsci.sinOsc SCRate.AR freq 0 * SCType.mce [env,env]
    in  SCMath.clip2 0.5 osci
 --   in  0.7 * tanh osci
 
@@ -372,7 +372,7 @@
   SoundMap.drumFromUGen $ \ vel ->
    let freq = SCEnv.xLine SCRate.KR 100 10 0.5 DoNothing
        env  = SCEnv.xLine SCRate.KR 1.5 0.1 0.5 DoNothing * vel * 0.8
-       osci = SCOsci.sinOsc SCRate.AR freq 0 * SCUGen.MCE [env,env]
+       osci = SCOsci.sinOsc SCRate.AR freq 0 * SCType.mce [env,env]
        distorted = sin (osci^(3::Int))
    in  distorted
 
@@ -384,7 +384,7 @@
        env  = SCEnv.xLine SCRate.KR 1 0.1 0.5 DoNothing * vel * 0.8
        modu = SCOsci.sinOsc SCRate.AR (2.17*freq) 0 * (2*env)
        osci = SCOsci.sinOsc SCRate.AR freq modu
-   in  osci * SCUGen.MCE [env,env]
+   in  osci * SCType.mce [env,env]
 
 
 bassdrumNoisy :: SoundMap.Drum
@@ -399,7 +399,7 @@
                SCEnv.xLine SCRate.KR 2 0.00001 0.15 PauseSynth
        noise = SCFilter.lpf (SCNoise.whiteNoise seed SCRate.AR) 5000 * nsenv
        drm   = SCMath.clip2 0.5 (osci + noise) * vel * 0.8
-   in  SCUGen.MCE [drm,drm]
+   in  SCType.mce [drm,drm]
 
 
 
@@ -528,7 +528,7 @@
        (SoundMap.registerInstrument dynPercAssign $ \dynPercUG ->
         SoundMap.registerInstrument sawPercAssign $ \sawPercUG ->
           let lfoSine   = exp (SCOsci.sinOsc SCRate.KR 0.2 (-pi/2) * 0.5) * 1000
-              lfoSquare = exp (SCOsci.pulse SCRate.KR 5.1 0.5 * 1) * 1000
+              lfoSquare = exp (SCOsci.impulse SCRate.KR 5.1 0.5 * 1) * 1000
               mix =
                  SCFilter.rlpf (0.5 * sawPercUG) lfoSine 0.1 +
                  SCFilter.rlpf (0.5 * dynPercUG) lfoSquare 0.1
diff --git a/src/Haskore/Interface/SuperCollider/Example/Air.hs b/src/Haskore/Interface/SuperCollider/Example/Air.hs
--- a/src/Haskore/Interface/SuperCollider/Example/Air.hs
+++ b/src/Haskore/Interface/SuperCollider/Example/Air.hs
@@ -1,11 +1,10 @@
 {- |
-Demonstration song using with SuperCollider and global effects.
+Demonstration song using SuperCollider and global effects.
 This was arranged for the HAL2 meeting in July 2007, Leipzig.
 -}
 module Haskore.Interface.SuperCollider.Example.Air where
 
 -- import qualified Sound.SC3 as SC
-import qualified Sound.SC3.UGen.UGen       as SCUGen
 import qualified Sound.SC3.UGen.Oscillator as SCOsci
 import qualified Sound.SC3.UGen.Filter     as SCFilt
 import qualified Sound.SC3.UGen.Envelope   as SCUGEnv
@@ -14,7 +13,8 @@
 import Sound.SC3.UGen.Enum (DoneAction(PauseSynth))
 import Sound.SC3.UGen.Rate (Rate(KR))
 
-import Sound.SC3.UGen.UGen (UGen)
+import qualified Sound.SC3.UGen.Type as SCType
+import Sound.SC3.UGen.Type (UGen)
 
 import qualified Haskore.Interface.SuperCollider.Example  as Example
 import qualified Haskore.Interface.SuperCollider.Play     as Play
@@ -304,9 +304,9 @@
 schedule =
    CSchedule.fromRhythmicMusic $
    do bass     <- installSound SoundMap.with0Attributes "bass"
-                     (Example.fmBass (SCUGen.MCE [0.99,1.01]))
+                     (Example.fmBass (SCType.mce [0.99,1.01]))
       guitar   <- installSound SoundMap.with0Attributes "guitar"
-                     (Example.fmGuitar (SCUGen.MCE [2.99,3.01]))
+                     (Example.fmGuitar (SCType.mce [2.99,3.01]))
       strings  <- installSound SoundMap.with1Attribute "strings"
                      envelopedStrings
       harpsichord <- installSound SoundMap.with0Attributes "harpsichord"
@@ -320,7 +320,7 @@
       bassdrum <- installSound SoundMap.with0Attributes "bassdrum"
                      Example.bassdrum
       let lfoSine = 1000 * exp
-             (0.3 * SCOsci.sinOsc KR 0.1 (SCUGen.MCE [-pi/2, 0]) +
+             (0.3 * SCOsci.sinOsc KR 0.1 (SCType.mce [-pi/2, 0]) +
               0.3 * SCOsci.sinOsc KR (sqrt 0.03) 0)
           mix = flip SCMath.clip2 1 $ 0.2 * (
             ugenFromSound bass +
diff --git a/src/Haskore/Interface/SuperCollider/Example/Morph.hs b/src/Haskore/Interface/SuperCollider/Example/Morph.hs
--- a/src/Haskore/Interface/SuperCollider/Example/Morph.hs
+++ b/src/Haskore/Interface/SuperCollider/Example/Morph.hs
@@ -6,7 +6,6 @@
 module Haskore.Interface.SuperCollider.Example.Morph where
 
 -- import qualified Sound.SC3 as SC
-import qualified Sound.SC3.UGen.UGen       as SCUGen
 import qualified Sound.SC3.UGen.Oscillator as SCOsci
 import qualified Sound.SC3.UGen.Filter     as SCFilt
 -- import qualified Sound.SC3.UGen.Math       as SCMath
@@ -16,7 +15,8 @@
 import Sound.SC3.UGen.Enum (DoneAction(PauseSynth), {- EnvCurve(EnvSin,EnvExp) -} )
 import Sound.SC3.UGen.Rate (Rate(KR,AR))
 
-import Sound.SC3.UGen.UGen (UGen)
+import qualified Sound.SC3.UGen.Type as SCType
+import Sound.SC3.UGen.Type (UGen)
 
 import qualified Haskore.Interface.SuperCollider.Example  as Example
 import qualified Haskore.Interface.SuperCollider.Play     as Play
@@ -51,9 +51,9 @@
      let dur = 0.3
          env = SCEnv.envGen KR 1 1 0 1 PauseSynth
                      (SCEnvCons.envSine dur 1)
-     in  0.2 * env * SCUGen.MCE [1+pan,1-pan] *
+     in  0.2 * env * SCType.mce [1+pan,1-pan] *
          SCFilt.hpf
-            (SCOsci.pulse AR (SCUGen.MCE [freq*0.995, freq*1.005]) 0.5)
+            (SCOsci.pulse AR (SCType.mce [freq*0.995, freq*1.005]) 0.5)
             (4000 * 0.5**env)
 -}
 
@@ -70,9 +70,9 @@
                       [EnvSin, EnvExp]
                       (-1) (-1)
 -}
-     in  vel * env * SCUGen.MCE [1+pan,1-pan] *
+     in  vel * env * SCType.mce [1+pan,1-pan] *
          SCFilt.hpf
-            (SCOsci.saw AR (SCUGen.MCE [freq*0.995, freq*1.005]))
+            (SCOsci.saw AR (SCType.mce [freq*0.995, freq*1.005]))
             (2000 * 0.5**env)
 
 
@@ -114,7 +114,7 @@
 bassSquare :: SoundMap.Instrument
 bassSquare =
   SoundMap.instrumentFromUGen $ \ vel freq ->
-     vel * SCOsci.pulse AR (SCUGen.MCE [freq*0.999, freq*1.001])
+     vel * SCOsci.pulse AR (SCType.mce [freq*0.999, freq*1.001])
             (0.5 + 0.3 * SCOsci.sinOsc KR 0.3 0)
 
 infix 7 +:
diff --git a/src/Haskore/Interface/SuperCollider/Play.hs b/src/Haskore/Interface/SuperCollider/Play.hs
--- a/src/Haskore/Interface/SuperCollider/Play.hs
+++ b/src/Haskore/Interface/SuperCollider/Play.hs
@@ -25,8 +25,8 @@
 
 -- import Sound.SC3.UGen.UGen (UGen)
 
-import qualified Sound.OpenSoundControl.Transport.Monad as Trans
-import Sound.OpenSoundControl.OSC (OSC(Bundle))
+import Sound.OSC.Transport.Monad (Transport, waitReply, )
+import qualified Sound.OpenSoundControl.Type as OSC
 import qualified Sound.OpenSoundControl.Time as OSCTime
 
 
@@ -83,9 +83,9 @@
    Schedule.fromMelody sound
 
 
-performanceTrans :: (Trans.C m, MonadIO m) =>
+performanceTrans :: (Transport m, MonadIO m) =>
    Time ->
-   [OSC] ->
+   [OSC.Message] ->
    SCPf.T Time ->
    m ()
 performanceTrans latency installMsgs =
@@ -95,7 +95,7 @@
 
 performance ::
    Time ->
-   [OSC] ->
+   [OSC.Message] ->
    SCPf.T Time ->
    IO ()
 performance latency installMsgs =
@@ -128,14 +128,13 @@
 defaultLatency :: Time
 defaultLatency = 0.1
 
-
 -- should be moved to Hsc or supercollider-ht
-timeStamp :: Time -> Time -> [OSC] -> OSC
-timeStamp start t = Bundle $ OSCTime.UTCr $ NonNeg.toNumber (start+t)
+timeStamp :: Time -> Time -> [OSC.Message] -> OSC.Bundle
+timeStamp start t msgs = OSC.Bundle (OSCTime.ut_to_ntpr $ NonNeg.toNumber (start+t)) msgs
 
 
 installSound ::
-   (Trans.C m, SoundMap.SoundParameters params) =>
+   (Transport m, SoundMap.SoundParameters params) =>
    String ->
    Sound params ->
    m ()
@@ -143,13 +142,13 @@
    SCPlay.simpleSync $ Schedule.installSoundMsg name Schedule.defaultChannel instr
 
 
-playAtom :: Trans.C m =>
+playAtom :: Transport m =>
       SCPlay.NodeId
    -> String
    -> [(String,Double)]
    -> m ()
 playAtom sid name params =
-   Trans.send (Schedule.atomPlayMsg sid name params)
+   SCPlay.send (Schedule.atomPlayMsg sid name params)
 
 
 
@@ -186,8 +185,8 @@
 
 -}
 
-scheduleWithPlayer :: Trans.C m =>
-   (TimeList.T Time OSC -> m ()) ->
+scheduleWithPlayer :: Transport m =>
+   (TimeList.T Time OSC.Message -> m ()) ->
    Schedule.T ->
    m ()
 scheduleWithPlayer player sc =
@@ -203,8 +202,8 @@
       http://lists.lurk.org/pipermail/haskell-art/2008-February/000102.html
       -}
       let isc = Schedule.initial sc
-      mapM_ Trans.send isc
-      mapM_ (const (Trans.wait "/done" >> return ())) isc
+      mapM_ SCPlay.send isc
+      mapM_ (const (waitReply "/done" >> return ())) isc
 
       player (Schedule.body sc)
       return ()
@@ -218,18 +217,18 @@
 that is, the maximal expected delay of creating and sending messages
 to the SuperCollider server.
 -}
-messagesGrouped :: (Trans.C m) =>
+messagesGrouped :: (Transport m) =>
    Timer.T m ->
    Time ->
-   TimeList.T Time OSC -> m ()
+   TimeList.T Time OSC.Message -> m ()
 messagesGrouped timer latency =
    liftM (const ()) .
    TimeList.runTimeStampGrouped timer
-      (\time -> Trans.send . timeStamp latency time)
+      (\time -> SCPlay.send . timeStamp latency time)
 {-
       (\time msgs ->
          liftIO (print time) >>
-         Trans.send (timeStamp latency time msgs))
+         SCPlay.send (timeStamp latency time msgs))
 -}
 
 {-
@@ -237,10 +236,10 @@
 This results in splitted events which actually should occur at the same time.
 This makes SuperCollider switching the order messages in certain occasions.
 -}
-messagesGroupedManual :: (Trans.C m) =>
+messagesGroupedManual :: (Transport m) =>
    Timer.T m ->
    Time ->
-   TimeList.T Time OSC -> m ()
+   TimeList.T Time OSC.Message -> m ()
 messagesGroupedManual timer latency =
    liftM (const ()) .
    -- (\ pf -> liftIO Timer.getTimeSeconds >>= \startTime ->
@@ -255,25 +254,25 @@
          (liftIO $ putStr (show (time-startTime) ++ ": ") >>
                    (print $ map eventToMark es)) >>
          -}
-         (Trans.send . timeStamp latency time)) -- pf)
+         (SCPlay.send . timeStamp latency time)) -- pf)
      . TimeList.collectCoincident
 
-messagesSingly :: (Trans.C m) =>
+messagesSingly :: (Transport m) =>
    Timer.T m ->
    Time ->
-   TimeList.T Time OSC -> m ()
+   TimeList.T Time OSC.Message -> m ()
 messagesSingly timer latency =
    liftM (const ()) .
    TimeList.runTimeStamp timer
       (\time ->
          -- (liftIO $ print $ eventToMark e) >>
-         (Trans.send . timeStamp latency time . (:[])))
+         (SCPlay.send . timeStamp latency time . (:[])))
 
 
-messagesSimple :: (Trans.C m) =>
+messagesSimple :: (Transport m) =>
    Timer.T m ->
-   TimeList.T Time OSC ->
+   TimeList.T Time OSC.Message ->
    m ()
 messagesSimple timer =
    liftM (const ()) .
-   TimeList.run timer Trans.send
+   TimeList.run timer SCPlay.send
diff --git a/src/Haskore/Interface/SuperCollider/Play/Channel.hs b/src/Haskore/Interface/SuperCollider/Play/Channel.hs
--- a/src/Haskore/Interface/SuperCollider/Play/Channel.hs
+++ b/src/Haskore/Interface/SuperCollider/Play/Channel.hs
@@ -7,7 +7,6 @@
    {-# DEPRECATED "use Haskore.Interface.SuperCollider.Schedule.Channel instead" #-}
    where
 
-import qualified Sound.SC3.UGen.UGen as SCUGen
 import qualified Sound.SC3.UGen.Oscillator as SCOsci
 import qualified Sound.SC3.UGen.Filter     as SCFilt
 
@@ -16,11 +15,11 @@
 import qualified Sound.SC3.Server.PlayEasy  as SCPlay
 import qualified Sound.SC3.Server.Command   as SCCmd
 
-import Sound.SC3.UGen.UGen (UGen)
+import Sound.SC3.UGen.Type (UGen)
 
-import Sound.OpenSoundControl.Transport (Transport)
-import Sound.OpenSoundControl.Transport.UDP  (UDP)
-import qualified Sound.OpenSoundControl.Transport.File  as File
+import Sound.OSC.Transport.FD (Transport)
+import Sound.OSC.Transport.FD.UDP  (UDP)
+import qualified Sound.OpenSoundControl.Transport.File as File
 
 import qualified Haskore.Interface.SuperCollider.Channel.State as ChannelState
 import qualified Haskore.Interface.SuperCollider.Channel as Channel
@@ -48,7 +47,6 @@
 
 import qualified Haskore.General.IdGenerator      as IdGen
 
-import qualified Control.Monad.Trans.State as State
 import Control.Monad.Trans.State  (StateT, evalStateT, )
 import Control.Monad.Trans.Reader (ReaderT, )
 import Control.Monad.Trans.Class (lift, )
diff --git a/src/Haskore/Interface/SuperCollider/Play/Install.hs b/src/Haskore/Interface/SuperCollider/Play/Install.hs
--- a/src/Haskore/Interface/SuperCollider/Play/Install.hs
+++ b/src/Haskore/Interface/SuperCollider/Play/Install.hs
@@ -10,13 +10,11 @@
    {-# DEPRECATED "use Haskore.Interface.SuperCollider.Schedule.Install instead" #-}
    where
 
-import qualified Sound.SC3.UGen.UGen as SCUGen
-
 import qualified Sound.SC3.Server.PlayEasy  as SCPlay
 
-import Sound.SC3.UGen.UGen (UGen)
+import Sound.SC3.UGen.Type (UGen)
 
-import qualified Sound.OpenSoundControl.Transport.Monad as Trans
+import Sound.OSC.Transport.Monad (Transport, )
 
 import Haskore.Interface.SuperCollider.Schedule.Install
    (Sound(..),
@@ -40,7 +38,7 @@
 
 
 installSound ::
-   (Trans.C m, SoundMap.SoundParameters params) =>
+   (Transport m, SoundMap.SoundParameters params) =>
    (parameterTuple -> AttributeList, graph -> SoundMap.Sound params) ->
    String ->
    graph ->
@@ -51,7 +49,7 @@
 
 
 installSound0 ::
-   (Trans.C m, SoundMap.SoundParameters params) =>
+   (Transport m, SoundMap.SoundParameters params) =>
    String ->
    SoundMap.Sound params ->
    m (Sound params ())
@@ -59,7 +57,7 @@
    installSound SoundMap.with0Attributes
 
 installSound1 ::
-   (Trans.C m, SoundMap.SoundParameters params) =>
+   (Transport m, SoundMap.SoundParameters params) =>
    String ->
    (UGen -> SoundMap.Sound params) ->
    m (Sound params Double)
@@ -67,7 +65,7 @@
    installSound SoundMap.with1Attribute
 
 installSound2 ::
-   (Trans.C m, SoundMap.SoundParameters params) =>
+   (Transport m, SoundMap.SoundParameters params) =>
    String ->
    (UGen -> UGen -> SoundMap.Sound params) ->
    m (Sound params (Double,Double))
@@ -77,7 +75,7 @@
 
 
 
-playMusic :: (Trans.C m, MonadIO m) =>
+playMusic :: (Transport m, MonadIO m) =>
    RhyMusic.T DrumAttributes InstrumentAttributes -> m ()
 playMusic =
    Play.performanceTrans Play.defaultLatency [] .
diff --git a/src/Haskore/Interface/SuperCollider/Play/Life.hs b/src/Haskore/Interface/SuperCollider/Play/Life.hs
deleted file mode 100644
--- a/src/Haskore/Interface/SuperCollider/Play/Life.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Haskore.Interface.SuperCollider.Play.Life
-   {-# DEPRECATED "use Play.Live instead" #-}
-   (module Haskore.Interface.SuperCollider.Play.Live) where
-
-import Haskore.Interface.SuperCollider.Play.Live
diff --git a/src/Haskore/Interface/SuperCollider/Play/Live.hs b/src/Haskore/Interface/SuperCollider/Play/Live.hs
--- a/src/Haskore/Interface/SuperCollider/Play/Live.hs
+++ b/src/Haskore/Interface/SuperCollider/Play/Live.hs
@@ -29,10 +29,10 @@
 import qualified Sound.SC3.Server.PlayEasy  as SCPlay
 import qualified Sound.SC3.Server.Command   as SCCmd
 
-import Sound.SC3.UGen.UGen (UGen)
+import Sound.SC3.UGen.Type (UGen, constant, )
 
-import Sound.OpenSoundControl.Transport (Transport)
-import qualified Sound.OpenSoundControl.Transport.Monad as Trans
+import Sound.OSC.Transport.FD (Transport)
+import qualified Sound.OSC.Transport.Monad as Trans
 
 import qualified Haskore.Interface.SuperCollider.Example       as Example
 import qualified Haskore.Interface.SuperCollider.Play.Install  as IPlay
@@ -157,7 +157,7 @@
       chan <- Channel.next ChannelEnv.manager numChan
       SCPlay.withSC3 $
          SCPlay.simpleSync $ SCPlay.d_recv_synthdef name $
-         SCIO.out (SCUGen.Constant (fromIntegral chan)) ugen
+         SCIO.out (constant chan) ugen
       return (chan, numChan)
 
 
diff --git a/src/Haskore/Interface/SuperCollider/Render.hs b/src/Haskore/Interface/SuperCollider/Render.hs
--- a/src/Haskore/Interface/SuperCollider/Render.hs
+++ b/src/Haskore/Interface/SuperCollider/Render.hs
@@ -17,7 +17,7 @@
 -- import Sound.OpenSoundControl.Transport (Transport)
 -- import qualified Sound.OpenSoundControl.Transport.Monad as Trans
 
-import Sound.OpenSoundControl.OSC (OSC(Bundle))
+import qualified Sound.OpenSoundControl.Type as OSC
 import qualified Sound.OpenSoundControl.Time as OSCTime
 
 import qualified Data.ByteString.Lazy as B
@@ -105,14 +105,15 @@
 
 scheduleToStream ::
    Schedule.T ->
-   [OSC]
+   SCNRT.NRT
 scheduleToStream sc =
+   SCNRT.NRT $
    timeStamp 0 (Schedule.initial sc) :
    messagesToStream (Schedule.body sc)
 
 messagesToStream ::
-   TimeList.T Time OSC ->
-   [OSC]
+   TimeList.T Time OSC.Message ->
+   [OSC.Bundle]
 messagesToStream =
    map (uncurry timeStamp) .
    AbsoluteEventList.toPairList .
@@ -121,5 +122,5 @@
    AbsoluteEventList.collectCoincident .
    TimeList.toAbsoluteEventList 0
 
-timeStamp :: Time -> [OSC] -> OSC
-timeStamp = Bundle . OSCTime.NTPr . NonNeg.toNumber
+timeStamp :: Time -> [OSC.Message] -> OSC.Bundle
+timeStamp = OSC.Bundle . OSCTime.ut_to_ntpr . NonNeg.toNumber
diff --git a/src/Haskore/Interface/SuperCollider/Schedule.hs b/src/Haskore/Interface/SuperCollider/Schedule.hs
--- a/src/Haskore/Interface/SuperCollider/Schedule.hs
+++ b/src/Haskore/Interface/SuperCollider/Schedule.hs
@@ -17,14 +17,12 @@
     -- fromMelodyPerformance,
   ) where
 
-import qualified Sound.SC3.UGen.UGen as SCUGen
-
 import qualified Sound.SC3.Server.Command   as SCCmd
 import qualified Sound.SC3.Server.PlayEasy  as SCPlay
 
-import Sound.SC3.UGen.UGen (UGen)
+import Sound.SC3.UGen.Type (UGen)
 
-import Sound.OpenSoundControl.OSC (OSC)
+import qualified Sound.OpenSoundControl.Type as OSC
 
 import qualified Haskore.Interface.SuperCollider.Note          as Note
 import qualified Haskore.Interface.SuperCollider.Performance   as SCPf
@@ -57,10 +55,10 @@
 
 data T =
    Cons {
-      initial :: [OSC]
+      initial :: [OSC.Message]
           {- ^ All of these messages must be synchronous!
                Otherwise the player might wait forever. -},
-      body    :: TimeList.T Time OSC
+      body    :: TimeList.T Time OSC.Message
    }
     deriving Show
 
@@ -82,7 +80,7 @@
    SCPf.fromMusic makeNote
 
 fromMusicMsgs :: Ord note =>
-   (Note.FromNote NonNeg.Double note, [OSC]) ->
+   (Note.FromNote NonNeg.Double note, [OSC.Message]) ->
    Music.T note ->
    T
 fromMusicMsgs (makeNote, installSounds) =
@@ -208,8 +206,8 @@
 
 
 fromPerformance ::
-   [OSC] ->
-   [OSC] ->
+   [OSC.Message] ->
+   [OSC.Message] ->
    SCPf.T Time ->
    T
 fromPerformance installInstruments globalEffects pf =
@@ -219,10 +217,10 @@
          (resetMsgs ++ globalEffects) (messagesFromPerformance pf))
 
 
-prependInitialMsgs :: [OSC] -> TimeList.T Time OSC -> TimeList.T Time OSC
+prependInitialMsgs :: [OSC.Message] -> TimeList.T Time OSC.Message -> TimeList.T Time OSC.Message
 prependInitialMsgs = flip (foldr (TimeList.cons 0))
 
-messagesFromPerformance :: SCPf.T Time -> TimeList.T Time OSC
+messagesFromPerformance :: SCPf.T Time -> TimeList.T Time OSC.Message
 messagesFromPerformance =
    flip TimeListPad.snocBody stopMsg .
    TimeListPad.mapBody (uncurry eventToMsg)
@@ -231,11 +229,11 @@
 
 {- * Construction of OpenSoundControl messages -}
 
-stopMsg :: OSC
+stopMsg :: OSC.Message
 stopMsg = SCCmd.g_freeAll [SCPlay.homeId]
 
 
-resetMsgs :: [OSC]
+resetMsgs :: [OSC.Message]
 resetMsgs =
    [SCCmd.g_freeAll [SCPlay.rootId],
     SCCmd.g_new [(SCPlay.homeId, SCCmd.AddToTail, SCPlay.rootId)]]
@@ -245,7 +243,7 @@
    SCPlay.NodeId ->
    String ->
    [(String, Double)] ->
-   OSC
+   OSC.Message
 atomPlayMsg sid name =
    SCCmd.s_new name sid SCCmd.AddToHead SCPlay.homeId
    -- adding to head is necessary for allowing global effects like in the Live module
@@ -255,7 +253,7 @@
    String ->
    Channel ->
    UGen ->
-   OSC
+   OSC.Message
 installUGenMsg name chan =
    SCPlay.d_recv_synthdef name .
    Channel.writeUGen chan
@@ -265,7 +263,7 @@
    String ->
    Channel ->
    Sound params ->
-   OSC
+   OSC.Message
 installSoundMsg name chan =
    installUGenMsg name chan . SoundMap.ugenFromSound
 
@@ -277,14 +275,14 @@
 installSoundsMsg ::
    Channel ->
    [SoundAssign] ->
-   [OSC]
+   [OSC.Message]
 installSoundsMsg channel =
    map (\(name,sound) ->
            installUGenMsg name channel sound)
 
 installChannelSoundsMsg ::
    [(SoundMap.Name, Channel, UGen)] ->
-   [OSC]
+   [OSC.Message]
 installChannelSoundsMsg =
    map (\(name, channel, ugen) ->
            installUGenMsg name channel ugen)
@@ -309,7 +307,7 @@
 eventToMark (sid, note) =
    (sid, maybe False (const True) note)
 
-eventToMsg :: SCPlay.NodeId -> Maybe (Time, Note.T) -> OSC
+eventToMsg :: SCPlay.NodeId -> Maybe (Time, Note.T) -> OSC.Message
 eventToMsg sid =
    maybe
       (SCCmd.n_free [sid])
diff --git a/src/Haskore/Interface/SuperCollider/Schedule/Channel.hs b/src/Haskore/Interface/SuperCollider/Schedule/Channel.hs
--- a/src/Haskore/Interface/SuperCollider/Schedule/Channel.hs
+++ b/src/Haskore/Interface/SuperCollider/Schedule/Channel.hs
@@ -5,7 +5,6 @@
 -}
 module Haskore.Interface.SuperCollider.Schedule.Channel where
 
-import qualified Sound.SC3.UGen.UGen       as SCUGen
 import qualified Sound.SC3.UGen.Oscillator as SCOsci
 import qualified Sound.SC3.UGen.Filter     as SCFilt
 
@@ -14,9 +13,9 @@
 import qualified Sound.SC3.Server.PlayEasy  as SCPlay
 import qualified Sound.SC3.Server.Command   as SCCmd
 
-import Sound.SC3.UGen.UGen (UGen)
+import Sound.SC3.UGen.Type (UGen)
 
-import Sound.OpenSoundControl.OSC (OSC)
+import qualified Sound.OpenSoundControl.Type as OSC
 
 import qualified Haskore.Interface.SuperCollider.Channel as Channel
 import Haskore.Interface.SuperCollider.Channel (Channel, NumberChannels)
@@ -42,7 +41,6 @@
 
 import qualified Haskore.General.IdGenerator      as IdGen
 
-import qualified Control.Monad.Trans.State as State
 import Control.Monad.Trans.State  (StateT, runStateT, get, put, )
 import Control.Monad.Trans.Writer (Writer, tell, runWriter, )
 import Control.Monad.Trans.Class (lift, )
@@ -55,13 +53,13 @@
 
 newtype Environment a =
    Environment {unwrapEnvironment ::
-      StateT (Channel, NumberChannels) (Writer [OSC]) a}
+      StateT (Channel, NumberChannels) (Writer [OSC.Message]) a}
 
 instance Monad Environment where
    x >>= y  = Environment $ unwrapEnvironment . y =<< unwrapEnvironment x
    return   = Environment . return
 
-writeOSC :: [OSC] -> Environment ()
+writeOSC :: [OSC.Message] -> Environment ()
 writeOSC = Environment . lift . tell
 
 nextChannel :: NumberChannels -> Environment Channel
diff --git a/src/Haskore/Interface/SuperCollider/Schedule/Install.hs b/src/Haskore/Interface/SuperCollider/Schedule/Install.hs
--- a/src/Haskore/Interface/SuperCollider/Schedule/Install.hs
+++ b/src/Haskore/Interface/SuperCollider/Schedule/Install.hs
@@ -6,9 +6,9 @@
 -}
 module Haskore.Interface.SuperCollider.Schedule.Install where
 
-import Sound.SC3.UGen.UGen (UGen)
+import Sound.SC3.UGen.Type (UGen)
 
-import Sound.OpenSoundControl.OSC (OSC)
+import qualified Sound.OpenSoundControl.Type as OSC
 
 import qualified Haskore.Interface.SuperCollider.Example       as Example
 import qualified Haskore.Interface.SuperCollider.Play          as Play
@@ -33,18 +33,18 @@
 
 
 {- |
-The @[OSC]@ state is used for messages for installing the instruments.
+The @[OSC.Message]@ state is used for messages for installing the instruments.
 We cannot use a Writer monad for this purpose
 because we have to read the generated messages for 'playMusic'.
 -}
 newtype Environment a =
-   Environment {unwrapEnvironment :: Writer [OSC] a}
+   Environment {unwrapEnvironment :: Writer [OSC.Message] a}
 
 instance Monad Environment where
    x >>= y  = Environment $ unwrapEnvironment . y =<< unwrapEnvironment x
    return   = Environment . return
 
-writeOSC :: [OSC] -> Environment ()
+writeOSC :: [OSC.Message] -> Environment ()
 writeOSC = Environment . tell
 
 
diff --git a/src/Haskore/Interface/SuperCollider/SoundMap.hs b/src/Haskore/Interface/SuperCollider/SoundMap.hs
--- a/src/Haskore/Interface/SuperCollider/SoundMap.hs
+++ b/src/Haskore/Interface/SuperCollider/SoundMap.hs
@@ -11,7 +11,7 @@
 import qualified Sound.SC3.UGen.Rate as SCRate
 import qualified Sound.SC3.UGen.UGen as SCUGen
 
-import Sound.SC3.UGen.UGen (UGen)
+import Sound.SC3.UGen.Type (UGen)
 
 import Data.Maybe.HT (toMaybe, )
 import Data.Maybe (mapMaybe, )
