diff --git a/README b/README
new file mode 100644
--- /dev/null
+++ b/README
@@ -0,0 +1,10 @@
+hsc3-unsafe - haskell supercollider
+
+hsc3 provides Sound.SC3.UGen.Unsafe.  
+
+  http://slavepianos.org/rd/f/207949/
+  http://haskell.org/
+  http://audiosynth.com/
+
+(c) rohan drape, 2006-2008
+    gpl, http://gnu.org/copyleft/
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,3 @@
+#!/usr/bin/env runhaskell
+> import Distribution.Simple
+> main = defaultMain
diff --git a/Sound/SC3/UGen/Demand/Unsafe.hs b/Sound/SC3/UGen/Demand/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Demand/Unsafe.hs
@@ -0,0 +1,66 @@
+module Sound.SC3.UGen.Demand.Unsafe where
+
+import Sound.SC3.UGen.UGen
+import Sound.SC3.UGen.UGen.Lift
+import qualified Sound.SC3.UGen.Demand.Monadic as D
+import Sound.SC3.UGen.Enum
+
+-- | Buffer demand ugen.
+dbufrd :: UGen -> UGen -> Loop -> UGen
+dbufrd = liftP3 D.dbufrd
+
+-- | Buffer write on demand unit generator.
+dbufwr :: UGen -> UGen -> UGen -> Loop -> UGen
+dbufwr = liftP4 D.dbufwr
+
+-- | Demand rate white noise.
+dwhite :: UGen -> UGen -> UGen -> UGen
+dwhite = liftP3 D.dwhite
+
+-- | Demand rate integer white noise.
+diwhite :: UGen -> UGen -> UGen -> UGen
+diwhite = liftP3 D.diwhite
+
+-- | Demand rate brown noise.
+dbrown :: UGen -> UGen -> UGen -> UGen -> UGen
+dbrown = liftP4 D.dbrown
+
+-- | Demand rate integer brown noise.
+dibrown :: UGen -> UGen -> UGen -> UGen -> UGen
+dibrown = liftP4 D.dibrown
+
+-- | Demand rate random selection.
+drand :: UGen -> UGen -> UGen
+drand = liftP2 D.drand
+
+-- | Demand rate random selection with no immediate repetition.
+dxrand :: UGen -> UGen -> UGen
+dxrand = liftP2 D.dxrand
+
+-- | Demand rate arithmetic series.
+dseries :: UGen -> UGen -> UGen -> UGen
+dseries = liftP3 D.dseries
+
+-- | Demand rate geometric series.
+dgeom :: UGen -> UGen -> UGen -> UGen
+dgeom = liftP3 D.dgeom
+
+-- | Demand rate sequence generator.
+dseq :: UGen -> UGen -> UGen
+dseq = liftP2 D.dseq
+
+-- | Demand rate series generator.
+dser :: UGen -> UGen -> UGen
+dser = liftP2 D.dser
+
+-- | Demand input replication
+dstutter :: UGen -> UGen -> UGen
+dstutter = liftP2 D.dstutter
+
+-- | Demand rate input switching.
+dswitch1 :: UGen -> UGen -> UGen
+dswitch1 = liftP2 D.dswitch1
+
+-- | Demand rate input switching.
+dswitch :: UGen -> UGen -> UGen
+dswitch = liftP2 D.dswitch
diff --git a/Sound/SC3/UGen/FFT/Unsafe.hs b/Sound/SC3/UGen/FFT/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/FFT/Unsafe.hs
@@ -0,0 +1,17 @@
+module Sound.SC3.UGen.FFT.Unsafe where
+
+import Sound.SC3.UGen.UGen
+import Sound.SC3.UGen.UGen.Lift
+import qualified Sound.SC3.UGen.FFT.Monadic as F
+
+-- | Randomize order of bins.
+pv_BinScramble :: UGen -> UGen -> UGen -> UGen -> UGen
+pv_BinScramble = liftP4 F.pv_BinScramble
+
+-- | Randomly clear bins.
+pv_RandComb :: UGen -> UGen -> UGen -> UGen
+pv_RandComb = liftP3 F.pv_RandComb
+
+-- | Cross fade, copying bins in random order.
+pv_RandWipe :: UGen -> UGen -> UGen -> UGen -> UGen
+pv_RandWipe = liftP4 F.pv_RandWipe
diff --git a/Sound/SC3/UGen/Noise/Unsafe.hs b/Sound/SC3/UGen/Noise/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Noise/Unsafe.hs
@@ -0,0 +1,110 @@
+module Sound.SC3.UGen.Noise.Unsafe where
+
+import Sound.SC3.UGen.Rate
+import Sound.SC3.UGen.UGen
+import Sound.SC3.UGen.UGen.Lift
+import qualified Sound.SC3.UGen.Noise.Monadic as N
+
+-- | Brown noise.
+brownNoise :: Rate -> UGen
+brownNoise = liftP N.brownNoise
+
+-- | Clip noise.
+clipNoise :: Rate -> UGen
+clipNoise = liftP N.clipNoise
+
+-- | Randomly pass or block triggers.
+coinGate :: UGen -> UGen -> UGen
+coinGate = liftP2 N.coinGate
+
+-- | Random impulses in (-1, 1).
+dust2 :: Rate -> UGen -> UGen
+dust2 = liftP2 N.dust2
+
+-- | Random impulse in (0,1).
+dust :: Rate -> UGen -> UGen
+dust = liftP2 N.dust
+
+-- | Random value in exponential distribution.
+expRand :: UGen -> UGen -> UGen
+expRand = liftP2 N.expRand
+
+-- | Gray noise.
+grayNoise :: Rate -> UGen
+grayNoise = liftP N.grayNoise
+
+-- | Random integer in uniform distribution.
+iRand :: UGen -> UGen -> UGen
+iRand = liftP2 N.iRand
+
+-- | Clip noise.
+lfClipNoise :: Rate -> UGen -> UGen
+lfClipNoise = liftP2 N.lfClipNoise
+
+-- | Dynamic clip noise.
+lfdClipNoise :: Rate -> UGen -> UGen
+lfdClipNoise = liftP2 N.lfdClipNoise
+
+-- | Dynamic step noise.
+lfdNoise0 :: Rate -> UGen -> UGen
+lfdNoise0 = liftP2 N.lfdNoise0
+
+-- | Dynamic ramp noise.
+lfdNoise1 :: Rate -> UGen -> UGen
+lfdNoise1 = liftP2 N.lfdNoise1
+
+-- | Dynamic quadratic noise
+lfdNoise2 :: Rate -> UGen -> UGen
+lfdNoise2 = liftP2 N.lfdNoise2
+
+-- | Dynamic cubic noise
+lfdNoise3 :: Rate -> UGen -> UGen
+lfdNoise3 = liftP2 N.lfdNoise3
+
+-- | Step noise.
+lfNoise0 :: Rate -> UGen -> UGen
+lfNoise0 = liftP2 N.lfNoise0
+
+-- | Ramp noise.
+lfNoise1 :: Rate -> UGen -> UGen
+lfNoise1 = liftP2 N.lfNoise1
+
+-- | Quadratic noise.
+lfNoise2 :: Rate -> UGen -> UGen
+lfNoise2 = liftP2 N.lfNoise2
+
+-- | Random value in skewed linear distribution.
+linRand :: UGen -> UGen -> UGen -> UGen
+linRand = liftP3 N.linRand
+
+-- | Random value in sum of n linear distribution.
+nRand :: UGen -> UGen -> UGen -> UGen
+nRand = liftP3 N.nRand
+
+-- | Pink noise.
+pinkNoise :: Rate -> UGen
+pinkNoise = liftP N.pinkNoise
+
+-- | Random value in uniform distribution.
+rand :: UGen -> UGen -> UGen
+rand = liftP2 N.rand
+
+-- | Random value in exponential distribution on trigger.
+tExpRand :: UGen -> UGen -> UGen -> UGen
+tExpRand = liftP3 N.tExpRand
+
+-- | Random integer in uniform distribution on trigger.
+tiRand :: UGen -> UGen -> UGen -> UGen
+tiRand = liftP3 N.tiRand
+
+-- | Random value in uniform distribution on trigger.
+tRand :: UGen -> UGen -> UGen -> UGen
+tRand = liftP3 N.tRand
+
+-- | Triggered windex.
+twindex :: UGen -> UGen -> UGen -> UGen
+twindex = liftP3 N.twindex
+
+-- | White noise.
+whiteNoise :: Rate -> UGen
+whiteNoise = liftP N.whiteNoise
diff --git a/Sound/SC3/UGen/Unsafe.hs b/Sound/SC3/UGen/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Unsafe.hs
@@ -0,0 +1,7 @@
+module Sound.SC3.UGen.Unsafe (module Sound.SC3.UGen.Demand.Unsafe,
+                              module Sound.SC3.UGen.FFT.Unsafe,
+                              module Sound.SC3.UGen.Noise.Unsafe) where
+
+import Sound.SC3.UGen.Demand.Unsafe
+import Sound.SC3.UGen.FFT.Unsafe
+import Sound.SC3.UGen.Noise.Unsafe
diff --git a/hsc3-unsafe.cabal b/hsc3-unsafe.cabal
new file mode 100644
--- /dev/null
+++ b/hsc3-unsafe.cabal
@@ -0,0 +1,24 @@
+Name:              hsc3-unsafe
+Version:           0.5
+Synopsis:          Unsafe Haskell SuperCollider
+Description:       hsc3 provides Sound.SC3.UGen.Unsafe.  
+License:           GPL
+Category:          Sound
+Copyright:         (c) Rohan Drape, 2006-2008
+Author:            Rohan Drape
+Maintainer:        rd@slavepianos.org
+Stability:         Experimental
+Homepage:          http://slavepianos.org/rd/f/207949/
+Tested-With:       GHC==6.10.1
+Build-Type:        Simple
+Cabal-Version:     >= 1.2
+
+Data-files:        README
+
+Library
+  Build-Depends:   base, hsc3 == 0.5
+  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
