diff --git a/Help/Graphs/rzblp.lhs b/Help/Graphs/rzblp.lhs
new file mode 100644
--- /dev/null
+++ b/Help/Graphs/rzblp.lhs
@@ -0,0 +1,22 @@
+rzblp (rd)
+
+> import Sound.SC3
+> import qualified Sound.SC3.UGen.Unsafe as U
+
+> let { wrp i l r = let m = (r - l) / 2
+>                   in i * m + l + m
+>     ; lfn f l r = wrp (U.lfNoise0 kr f) l r
+>     ; hpb q = mixFill 2 (\_ -> let { f = lfn q 1330 1395
+>                                    ; a = lfn q 0.001 0.007 }
+>                                in blip ar f 24 * a)
+>     ; mk_f d = let { q = lfn 5.2 5.2 5.21
+>                    ; a = d dinf (mce [1, 3, 2, 7, 8])
+>                    ; tr = impulse kr q 0
+>                    ; freq = demand tr 0 a * 30 + 340 }
+>                in sum [ blip ar freq 3 * lfn q 0.001 0.01
+>                       , resonz (impulse ar q (mce2 0 0))
+>                                    (lfn 5 30 640)
+>                                    (lfn q 0.1 0.5) * lfn q 0.01 1.8
+>                       , hpb q * lfn q 1.2 1.8
+>                       , blip ar (lfn q 16 36) 3 * mce2 0.03 0.09 ] }
+> in audition (out 0 (mk_f U.drand + mk_f U.dxrand))
diff --git a/Help/Graphs/trmlo.lhs b/Help/Graphs/trmlo.lhs
new file mode 100644
--- /dev/null
+++ b/Help/Graphs/trmlo.lhs
@@ -0,0 +1,40 @@
+trmlo (rd)
+
+> import Sound.SC3
+> import qualified Sound.SC3.UGen.Unsafe as U
+
+> let { mWrp i l r = linLin i (-1) 1 (midiCPS l) (midiCPS r)
+>     ; mWrp1 i m = mWrp i m (m + 1)
+>     ; mWrpN i m n = mWrp i m (m + n)
+>     ; o1 = let { f = 5
+>                ; d = 3
+>                ; s = envSine d 0.1
+>                ; e = envGen kr 1 1 0 1 DoNothing s
+>                ; n = 65
+>                ; m = sinOsc kr f 0 }
+>            in pan2 (sinOsc ar (mWrp1 m n) 0) m e
+>     ; o2 = let { f = U.iRand 5 9
+>                ; d = U.iRand 5 9
+>                ; s = envSine d (U.rand 0.1 0.2)
+>                ; e = envGen kr 1 1 0 1 DoNothing s
+>                ; n = U.iRand 69 72
+>                ; m = sinOsc kr f 0 }
+>            in pan2 (sinOsc ar (mWrp1 m n) 0) m e
+>     ; o3 = let { f = U.iRand 5 9
+>                ; d = U.iRand 9 12
+>                ; s = envSine d (U.rand 0.1 0.2)
+>                ; e = envGen kr 1 1 0 1 DoNothing s
+>                ; n = U.iRand 69 72
+>                ; m = sinOsc kr f 0
+>                ; l = line kr 0 (U.iRand 1 5) d DoNothing }
+>            in pan2 (blip ar (mWrp1 m (n + l)) (linLin m (-1) 1 1 2)) m e
+>     ; o4 = let { f = U.iRand 5 18
+>                ; d = U.iRand 12 15
+>                ; s = envSine d (U.rand 0.1 0.2)
+>                ; e = envGen kr 1 5e-2 0 1 DoNothing s
+>                ; n = U.iRand 69 72
+>                ; m = sinOsc kr f 0
+>                ; l = line kr 0 (U.iRand 1 5) d RemoveSynth
+>                ; fr = mWrpN m (n + l) (U.iRand 1 5) }
+>            in pan2 (blip ar fr (linLin m (-1) 1 1 (U.iRand 2 24))) m e }
+> in audition (out 0 (o1 + o2 + o3 + o4))
diff --git a/Help/Graphs/voscil.lhs b/Help/Graphs/voscil.lhs
new file mode 100644
--- /dev/null
+++ b/Help/Graphs/voscil.lhs
@@ -0,0 +1,30 @@
+voscil (rd)
+
+> import Sound.SC3
+> import qualified Sound.SC3.UGen.Unsafe as U
+> import System.Random
+
+> let { rrand l r = getStdRandom (randomR (l, r))
+>     ; lfn r = U.lfNoise0 kr r
+>     ; b = 32
+>     ; hb = (constant b - 1) / 2
+>     ; bn = 8192 * 4
+>     ; rt = 6
+>     ; f = 600
+>     ; s = let { v = vOsc ar (lfn rt * hb + hb) (f * 2) 0
+>               ; o = let { bf = lfn rt * 40 + 600
+>                         ; nh = lfn rt * 16 + 24 }
+>                     in blip ar bf nh * (lfn rt * 0.1 + 0.1)
+>               ; p = pan2 (v + o) (lfn rt) (lfn rt * 0.5 + 0.5)
+>               ; w = vOsc ar (lfSaw kr (1 / rt) 0 * hb + hb) f 0
+>               ; q = pan2 w (lfn rt) (lfn rt * 0.5 + 0.5) }
+>           in p + q
+>     ; run fd = let r_set i = 
+>                        do { m <- rrand 2 512
+>                           ; j <- sequence (replicate m (rrand 0 bn))
+>                           ; k <- sequence (replicate m (rrand (-1) 1))
+>                           ; async fd (b_alloc i bn 1)
+>                           ; send fd (b_set i (zip j k)) }
+>                in do { mapM_ r_set [0 .. (b - 1)]
+>                      ; play fd (out 0 s) } }
+> in withSC3 run
diff --git a/README b/README
--- a/README
+++ b/README
@@ -1,10 +1,10 @@
 hsc3-unsafe - haskell supercollider
 
-hsc3 provides Sound.SC3.UGen.Unsafe.  
+hsc3-unsafe provides Sound.SC3.UGen.Unsafe.
 
   http://slavepianos.org/rd/f/207949/
   http://haskell.org/
   http://audiosynth.com/
 
-(c) rohan drape, 2006-2008
+(c) rohan drape, 2006-2009
     gpl, http://gnu.org/copyleft/
diff --git a/Sound/SC3/UGen/Demand/Unsafe.hs b/Sound/SC3/UGen/Demand/Unsafe.hs
--- a/Sound/SC3/UGen/Demand/Unsafe.hs
+++ b/Sound/SC3/UGen/Demand/Unsafe.hs
@@ -1,7 +1,7 @@
 module Sound.SC3.UGen.Demand.Unsafe where
 
 import Sound.SC3.UGen.UGen
-import Sound.SC3.UGen.UGen.Lift
+import Sound.SC3.UGen.Unsafe.Lift
 import qualified Sound.SC3.UGen.Demand.Monadic as D
 import Sound.SC3.UGen.Enum
 
diff --git a/Sound/SC3/UGen/FFT/Unsafe.hs b/Sound/SC3/UGen/FFT/Unsafe.hs
--- a/Sound/SC3/UGen/FFT/Unsafe.hs
+++ b/Sound/SC3/UGen/FFT/Unsafe.hs
@@ -1,7 +1,7 @@
 module Sound.SC3.UGen.FFT.Unsafe where
 
 import Sound.SC3.UGen.UGen
-import Sound.SC3.UGen.UGen.Lift
+import Sound.SC3.UGen.Unsafe.Lift
 import qualified Sound.SC3.UGen.FFT.Monadic as F
 
 -- | Randomize order of bins.
diff --git a/Sound/SC3/UGen/Noise/Unsafe.hs b/Sound/SC3/UGen/Noise/Unsafe.hs
--- a/Sound/SC3/UGen/Noise/Unsafe.hs
+++ b/Sound/SC3/UGen/Noise/Unsafe.hs
@@ -2,7 +2,7 @@
 
 import Sound.SC3.UGen.Rate
 import Sound.SC3.UGen.UGen
-import Sound.SC3.UGen.UGen.Lift
+import Sound.SC3.UGen.Unsafe.Lift
 import qualified Sound.SC3.UGen.Noise.Monadic as N
 
 -- | Brown noise.
diff --git a/Sound/SC3/UGen/Unsafe/Lift.hs b/Sound/SC3/UGen/Unsafe/Lift.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Unsafe/Lift.hs
@@ -0,0 +1,20 @@
+module Sound.SC3.UGen.Unsafe.Lift where
+
+import Sound.SC3.UGen.UGen
+import System.IO.Unsafe
+
+-- | Lift monadic UGen to unsafe form.
+liftP :: (a -> IO UGen) -> (a -> UGen)
+liftP f = unsafePerformIO . f
+
+-- | Lift monadic UGen to unsafe form.
+liftP2 :: (a -> b -> IO UGen) -> (a -> b -> UGen)
+liftP2 f a = unsafePerformIO . f a
+
+-- | Lift monadic UGen to unsafe form.
+liftP3 :: (a -> b -> c -> IO UGen) -> (a -> b -> c -> UGen)
+liftP3 f a b = unsafePerformIO . f a b
+
+-- | Lift monadic UGen to unsafe form.
+liftP4 :: (a -> b -> c -> d -> IO UGen) -> (a -> b -> c -> d -> UGen)
+liftP4 f a b c = unsafePerformIO . f a b c
diff --git a/hsc3-unsafe.cabal b/hsc3-unsafe.cabal
--- a/hsc3-unsafe.cabal
+++ b/hsc3-unsafe.cabal
@@ -1,24 +1,29 @@
 Name:              hsc3-unsafe
-Version:           0.6
+Version:           0.7
 Synopsis:          Unsafe Haskell SuperCollider
 Description:       hsc3 provides Sound.SC3.UGen.Unsafe.  
 License:           GPL
 Category:          Sound
-Copyright:         (c) Rohan Drape, 2006-2008
+Copyright:         (c) Rohan Drape, 2006-2009
 Author:            Rohan Drape
 Maintainer:        rd@slavepianos.org
 Stability:         Experimental
 Homepage:          http://slavepianos.org/rd/f/382071/
-Tested-With:       GHC==6.10.1
+Tested-With:       GHC == 6.8.2
 Build-Type:        Simple
-Cabal-Version:     >= 1.2
+Cabal-Version:     >= 1.6
 
 Data-files:        README
+                   Help/Graphs/rzblp.lhs
+                   Help/Graphs/trmlo.lhs
+                   Help/Graphs/voscil.lhs
 
 Library
-  Build-Depends:   base, hsc3 == 0.6
+  Build-Depends:   base == 3.*,
+                   hsc3 == 0.7
   GHC-Options:     -Wall -fwarn-tabs
   Exposed-modules: Sound.SC3.UGen.Demand.Unsafe
                    Sound.SC3.UGen.FFT.Unsafe
                    Sound.SC3.UGen.Noise.Unsafe
                    Sound.SC3.UGen.Unsafe
+                   Sound.SC3.UGen.Unsafe.Lift
