diff --git a/Help/analog-bubbles.hs b/Help/analog-bubbles.hs
--- a/Help/analog-bubbles.hs
+++ b/Help/analog-bubbles.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE DisambiguateRecordFields #-}
 
 import Sound.SC3
+import Sound.SC3.UGen.Dot
 import Sound.SC3.UGen.Record
 import Sound.SC3.UGen.Record.CombN
 import Sound.SC3.UGen.Record.LFSaw
@@ -24,8 +25,9 @@
                        , delaytime = 0.2
                        , decaytime = 4 }
     in ugen Out { rate = AR
-                , bus = 0
+                , bus = mce2 0 1
                 , input = c }
 
 main :: IO ()
-main = audition analog_bubbles
+main = do draw analog_bubbles
+          audition analog_bubbles
diff --git a/Help/pitch.hs b/Help/pitch.hs
--- a/Help/pitch.hs
+++ b/Help/pitch.hs
@@ -1,6 +1,6 @@
 import Sound.SC3
-import Sound.SC3.UGen.Record
-import Sound.SC3.UGen.Record.Pitch as P
+import qualified Sound.SC3.UGen.Record as R
+import qualified Sound.SC3.UGen.Record.Pitch as P
 
 main :: IO ()
 main = 
@@ -8,5 +8,5 @@
         y = mouseY KR 0.05 0.25 Linear 0.1
         s = saw AR x * y
         a = amplitude KR s 0.05 0.05
-        MCE [f, _] = ugen P.pitch { P.input = s }
+        MCE [f, _] = R.ugen P.pitch { P.input = s }
     in audition (out 0 (mce [s * 0.25, sinOsc AR (f / 2) 0 * a]))
diff --git a/README b/README
--- a/README
+++ b/README
@@ -1,8 +1,21 @@
 hsc3-rec - haskell supercollider record variants
 
-provides record constructors for all unit generators that take at
-least one parameter.  requires the record field disambiguation present
-in ghc >= 6.10.1 to be practicable.
+Provides record constructors for all unit generators
+that take at least one parameter.
 
-(c) rohan drape and others, 2008
+To be useable requires record field disambiguation
+as is present in ghc >= 6.8.2.
+
+The record variants are generated by a program using
+the database at hsc3-db.  This database is
+auto-generated from the supercollider language unit
+generator bindings and is not entirely accurate.
+
+In particular neither argument re-ordering or multiple
+channel collapse are correctly annotated, see for
+instance the Out unit generator in the help file
+analog-bubbles.hs, where explicit bus numbering is
+required.
+
+(c) rohan drape and others, 2008-2010
     gpl, http://gnu.org/copyleft/
diff --git a/Sound/SC3/UGen/Record/AudioControl.hs b/Sound/SC3/UGen/Record/AudioControl.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Record/AudioControl.hs
@@ -0,0 +1,14 @@
+module Sound.SC3.UGen.Record.AudioControl where
+import qualified Sound.SC3.UGen as S
+import Sound.SC3.UGen.Record
+data AudioControl = AudioControl {
+  values :: S.UGen
+  } deriving (Show)
+audioControl :: AudioControl
+audioControl = AudioControl {
+  values = 0.0
+  }
+mkAudioControl :: AudioControl -> S.UGen
+mkAudioControl (AudioControl  a') = S.mkOsc S.AR "AudioControl" [a'] 1
+instance Make AudioControl where
+  ugen = mkAudioControl
diff --git a/Sound/SC3/UGen/Record/Ball.hs b/Sound/SC3/UGen/Record/Ball.hs
--- a/Sound/SC3/UGen/Record/Ball.hs
+++ b/Sound/SC3/UGen/Record/Ball.hs
@@ -2,6 +2,7 @@
 import qualified Sound.SC3.UGen as S
 import Sound.SC3.UGen.Record
 data Ball = Ball {
+  rate :: S.Rate,
   input :: S.UGen,
   g :: S.UGen,
   damp :: S.UGen,
@@ -9,12 +10,13 @@
   } deriving (Show)
 ball :: Ball
 ball = Ball {
+  rate = S.AR,
   input = 0.0,
   g = 1.0,
   damp = 0.0,
   friction = 0.01
   }
 mkBall :: Ball -> S.UGen
-mkBall (Ball  a' b' c' d') = S.mkOsc S.AR "Ball" [a',b',c',d'] 1
+mkBall (Ball r a' b' c' d') = S.mkOsc r "Ball" [a',b',c',d'] 1
 instance Make Ball where
   ugen = mkBall
diff --git a/Sound/SC3/UGen/Record/BasicOpUGen.hs b/Sound/SC3/UGen/Record/BasicOpUGen.hs
deleted file mode 100644
--- a/Sound/SC3/UGen/Record/BasicOpUGen.hs
+++ /dev/null
@@ -1,14 +0,0 @@
-module Sound.SC3.UGen.Record.BasicOpUGen where
-import qualified Sound.SC3.UGen as S
-import Sound.SC3.UGen.Record
-data BasicOpUGen = BasicOpUGen {
-  maxSize :: S.UGen
-  } deriving (Show)
-basicOpUGen :: BasicOpUGen
-basicOpUGen = BasicOpUGen {
-  maxSize = 0.0
-  }
-mkBasicOpUGen :: BasicOpUGen -> S.UGen
-mkBasicOpUGen (BasicOpUGen  a') = S.mkOsc S.AR "BasicOpUGen" [a'] 1
-instance Make BasicOpUGen where
-  ugen = mkBasicOpUGen
diff --git a/Sound/SC3/UGen/Record/Dgeom.hs b/Sound/SC3/UGen/Record/Dgeom.hs
--- a/Sound/SC3/UGen/Record/Dgeom.hs
+++ b/Sound/SC3/UGen/Record/Dgeom.hs
@@ -10,7 +10,7 @@
 dgeom = Dgeom {
   start = 1.0,
   grow = 2.0,
-  length_ = 100.0
+  length_ = 100000000.0
   }
 mkDgeom :: Dgeom -> S.UGen
 mkDgeom (Dgeom  a' b' c') = S.mkOsc S.DR "Dgeom" [a',b',c'] 1
diff --git a/Sound/SC3/UGen/Record/Dpoll.hs b/Sound/SC3/UGen/Record/Dpoll.hs
--- a/Sound/SC3/UGen/Record/Dpoll.hs
+++ b/Sound/SC3/UGen/Record/Dpoll.hs
@@ -2,13 +2,19 @@
 import qualified Sound.SC3.UGen as S
 import Sound.SC3.UGen.Record
 data Dpoll = Dpoll {
-  input :: S.UGen
+  input :: S.UGen,
+  label :: S.UGen,
+  run :: S.UGen,
+  trigid :: S.UGen
   } deriving (Show)
 dpoll :: Dpoll
 dpoll = Dpoll {
-  input = 0.0
+  input = 0.0,
+  label = 0.0,
+  run = 1.0,
+  trigid = -1.0
   }
 mkDpoll :: Dpoll -> S.UGen
-mkDpoll (Dpoll  a') = S.mkOsc S.DR "Dpoll" [a'] 1
+mkDpoll (Dpoll  a' b' c' d') = S.mkOsc S.DR "Dpoll" [a',b',c',d'] 1
 instance Make Dpoll where
   ugen = mkDpoll
diff --git a/Sound/SC3/UGen/Record/Dseries.hs b/Sound/SC3/UGen/Record/Dseries.hs
--- a/Sound/SC3/UGen/Record/Dseries.hs
+++ b/Sound/SC3/UGen/Record/Dseries.hs
@@ -10,7 +10,7 @@
 dseries = Dseries {
   start = 1.0,
   step = 1.0,
-  length_ = 100.0
+  length_ = 100000000.0
   }
 mkDseries :: Dseries -> S.UGen
 mkDseries (Dseries  a' b' c') = S.mkOsc S.DR "Dseries" [a',b',c'] 1
diff --git a/Sound/SC3/UGen/Record/Dshuf.hs b/Sound/SC3/UGen/Record/Dshuf.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Record/Dshuf.hs
@@ -0,0 +1,16 @@
+module Sound.SC3.UGen.Record.Dshuf where
+import qualified Sound.SC3.UGen as S
+import Sound.SC3.UGen.Record
+data Dshuf = Dshuf {
+  list :: S.UGen,
+  repeats :: S.UGen
+  } deriving (Show)
+dshuf :: Dshuf
+dshuf = Dshuf {
+  list = 0.0,
+  repeats = 1.0
+  }
+mkDshuf :: Dshuf -> S.UGen
+mkDshuf (Dshuf  a' b') = S.mkOsc S.DR "Dshuf" [a',b'] 1
+instance Make Dshuf where
+  ugen = mkDshuf
diff --git a/Sound/SC3/UGen/Record/IFFT.hs b/Sound/SC3/UGen/Record/IFFT.hs
--- a/Sound/SC3/UGen/Record/IFFT.hs
+++ b/Sound/SC3/UGen/Record/IFFT.hs
@@ -2,17 +2,19 @@
 import qualified Sound.SC3.UGen as S
 import Sound.SC3.UGen.Record
 data IFFT = IFFT {
+  rate :: S.Rate,
   buffer :: S.UGen,
   wintype :: S.UGen,
   winsize :: S.UGen
   } deriving (Show)
 iFFT :: IFFT
 iFFT = IFFT {
+  rate = S.AR,
   buffer = 0.0,
   wintype = 0.0,
   winsize = 0.0
   }
 mkIFFT :: IFFT -> S.UGen
-mkIFFT (IFFT  a' b' c') = S.mkOsc S.AR "IFFT" [a',b',c'] 1
+mkIFFT (IFFT r a' b' c') = S.mkOsc r "IFFT" [a',b',c'] 1
 instance Make IFFT where
   ugen = mkIFFT
diff --git a/Sound/SC3/UGen/Record/LFGauss.hs b/Sound/SC3/UGen/Record/LFGauss.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Record/LFGauss.hs
@@ -0,0 +1,24 @@
+module Sound.SC3.UGen.Record.LFGauss where
+import qualified Sound.SC3.UGen as S
+import Sound.SC3.UGen.Record
+data LFGauss = LFGauss {
+  rate :: S.Rate,
+  duration :: S.UGen,
+  width :: S.UGen,
+  iphase :: S.UGen,
+  loop :: S.UGen,
+  doneAction :: S.UGen
+  } deriving (Show)
+lFGauss :: LFGauss
+lFGauss = LFGauss {
+  rate = S.AR,
+  duration = 1.0,
+  width = 0.1,
+  iphase = 0.0,
+  loop = 1.0,
+  doneAction = 0.0
+  }
+mkLFGauss :: LFGauss -> S.UGen
+mkLFGauss (LFGauss r a' b' c' d' e') = S.mkOsc r "LFGauss" [a',b',c',d',e'] 1
+instance Make LFGauss where
+  ugen = mkLFGauss
diff --git a/Sound/SC3/UGen/Record/LocalBuf.hs b/Sound/SC3/UGen/Record/LocalBuf.hs
deleted file mode 100644
--- a/Sound/SC3/UGen/Record/LocalBuf.hs
+++ /dev/null
@@ -1,18 +0,0 @@
-module Sound.SC3.UGen.Record.LocalBuf where
-import qualified Sound.SC3.UGen as S
-import Sound.SC3.UGen.Record
-data LocalBuf = LocalBuf {
-  numFrames :: S.UGen,
-  numChannels :: S.UGen,
-  maxLocalBufs :: S.UGen
-  } deriving (Show)
-localBuf :: LocalBuf
-localBuf = LocalBuf {
-  numFrames = 1.0,
-  numChannels = 1.0,
-  maxLocalBufs = 8.0
-  }
-mkLocalBuf :: LocalBuf -> S.UGen
-mkLocalBuf (LocalBuf  a' b' c') = S.mkOsc S.IR "LocalBuf" [a',b',c'] 1
-instance Make LocalBuf where
-  ugen = mkLocalBuf
diff --git a/Sound/SC3/UGen/Record/PV_Conj.hs b/Sound/SC3/UGen/Record/PV_Conj.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Record/PV_Conj.hs
@@ -0,0 +1,14 @@
+module Sound.SC3.UGen.Record.PV_Conj where
+import qualified Sound.SC3.UGen as S
+import Sound.SC3.UGen.Record
+data PV_Conj = PV_Conj {
+  buffer :: S.UGen
+  } deriving (Show)
+pV_Conj :: PV_Conj
+pV_Conj = PV_Conj {
+  buffer = 0.0
+  }
+mkPV_Conj :: PV_Conj -> S.UGen
+mkPV_Conj (PV_Conj  a') = S.mkOsc S.KR "PV_Conj" [a'] 1
+instance Make PV_Conj where
+  ugen = mkPV_Conj
diff --git a/Sound/SC3/UGen/Record/PV_Div.hs b/Sound/SC3/UGen/Record/PV_Div.hs
new file mode 100644
--- /dev/null
+++ b/Sound/SC3/UGen/Record/PV_Div.hs
@@ -0,0 +1,16 @@
+module Sound.SC3.UGen.Record.PV_Div where
+import qualified Sound.SC3.UGen as S
+import Sound.SC3.UGen.Record
+data PV_Div = PV_Div {
+  bufferA :: S.UGen,
+  bufferB :: S.UGen
+  } deriving (Show)
+pV_Div :: PV_Div
+pV_Div = PV_Div {
+  bufferA = 0.0,
+  bufferB = 0.0
+  }
+mkPV_Div :: PV_Div -> S.UGen
+mkPV_Div (PV_Div  a' b') = S.mkOsc S.KR "PV_Div" [a',b'] 1
+instance Make PV_Div where
+  ugen = mkPV_Div
diff --git a/Sound/SC3/UGen/Record/PlayBuf.hs b/Sound/SC3/UGen/Record/PlayBuf.hs
--- a/Sound/SC3/UGen/Record/PlayBuf.hs
+++ b/Sound/SC3/UGen/Record/PlayBuf.hs
@@ -8,7 +8,8 @@
   rate_ :: S.UGen,
   trigger :: S.UGen,
   startPos :: S.UGen,
-  loop :: S.UGen
+  loop :: S.UGen,
+  doneAction :: S.UGen
   } deriving (Show)
 playBuf :: PlayBuf
 playBuf = PlayBuf {
@@ -18,9 +19,10 @@
   rate_ = 1.0,
   trigger = 1.0,
   startPos = 0.0,
-  loop = 0.0
+  loop = 0.0,
+  doneAction = 0.0
   }
 mkPlayBuf :: PlayBuf -> S.UGen
-mkPlayBuf (PlayBuf r a' b' c' d' e' f') = S.mkOsc r "PlayBuf" [a',b',c',d',e',f'] 1
+mkPlayBuf (PlayBuf r a' b' c' d' e' f' g') = S.mkOsc r "PlayBuf" [a',b',c',d',e',f',g'] 1
 instance Make PlayBuf where
   ugen = mkPlayBuf
diff --git a/Sound/SC3/UGen/Record/RecordBuf.hs b/Sound/SC3/UGen/Record/RecordBuf.hs
--- a/Sound/SC3/UGen/Record/RecordBuf.hs
+++ b/Sound/SC3/UGen/Record/RecordBuf.hs
@@ -10,7 +10,8 @@
   preLevel :: S.UGen,
   run :: S.UGen,
   loop :: S.UGen,
-  trigger :: S.UGen
+  trigger :: S.UGen,
+  doneAction :: S.UGen
   } deriving (Show)
 recordBuf :: RecordBuf
 recordBuf = RecordBuf {
@@ -22,9 +23,10 @@
   preLevel = 0.0,
   run = 1.0,
   loop = 1.0,
-  trigger = 1.0
+  trigger = 1.0,
+  doneAction = 0.0
   }
 mkRecordBuf :: RecordBuf -> S.UGen
-mkRecordBuf (RecordBuf r a' b' c' d' e' f' g' h') = S.mkOsc r "RecordBuf" [a',b',c',d',e',f',g',h'] 1
+mkRecordBuf (RecordBuf r a' b' c' d' e' f' g' h' i') = S.mkOsc r "RecordBuf" [a',b',c',d',e',f',g',h',i'] 1
 instance Make RecordBuf where
   ugen = mkRecordBuf
diff --git a/Sound/SC3/UGen/Record/Spring.hs b/Sound/SC3/UGen/Record/Spring.hs
--- a/Sound/SC3/UGen/Record/Spring.hs
+++ b/Sound/SC3/UGen/Record/Spring.hs
@@ -2,17 +2,19 @@
 import qualified Sound.SC3.UGen as S
 import Sound.SC3.UGen.Record
 data Spring = Spring {
+  rate :: S.Rate,
   input :: S.UGen,
   spring_ :: S.UGen,
   damp :: S.UGen
   } deriving (Show)
 spring :: Spring
 spring = Spring {
+  rate = S.AR,
   input = 0.0,
   spring_ = 1.0,
   damp = 0.0
   }
 mkSpring :: Spring -> S.UGen
-mkSpring (Spring  a' b' c') = S.mkOsc S.AR "Spring" [a',b',c'] 1
+mkSpring (Spring r a' b' c') = S.mkOsc r "Spring" [a',b',c'] 1
 instance Make Spring where
   ugen = mkSpring
diff --git a/Sound/SC3/UGen/Record/TBall.hs b/Sound/SC3/UGen/Record/TBall.hs
--- a/Sound/SC3/UGen/Record/TBall.hs
+++ b/Sound/SC3/UGen/Record/TBall.hs
@@ -2,6 +2,7 @@
 import qualified Sound.SC3.UGen as S
 import Sound.SC3.UGen.Record
 data TBall = TBall {
+  rate :: S.Rate,
   input :: S.UGen,
   g :: S.UGen,
   damp :: S.UGen,
@@ -9,12 +10,13 @@
   } deriving (Show)
 tBall :: TBall
 tBall = TBall {
+  rate = S.AR,
   input = 0.0,
   g = 10.0,
   damp = 0.0,
   friction = 0.01
   }
 mkTBall :: TBall -> S.UGen
-mkTBall (TBall  a' b' c' d') = S.mkOsc S.AR "TBall" [a',b',c',d'] 1
+mkTBall (TBall r a' b' c' d') = S.mkOsc r "TBall" [a',b',c',d'] 1
 instance Make TBall where
   ugen = mkTBall
diff --git a/Sound/SC3/UGen/Record/VDiskIn.hs b/Sound/SC3/UGen/Record/VDiskIn.hs
--- a/Sound/SC3/UGen/Record/VDiskIn.hs
+++ b/Sound/SC3/UGen/Record/VDiskIn.hs
@@ -5,16 +5,18 @@
   numChannels :: S.UGen,
   bufnum :: S.UGen,
   rate_ :: S.UGen,
-  loop :: S.UGen
+  loop :: S.UGen,
+  sendID :: S.UGen
   } deriving (Show)
 vDiskIn :: VDiskIn
 vDiskIn = VDiskIn {
   numChannels = 0.0,
   bufnum = 0.0,
   rate_ = 1.0,
-  loop = 0.0
+  loop = 0.0,
+  sendID = 0.0
   }
 mkVDiskIn :: VDiskIn -> S.UGen
-mkVDiskIn (VDiskIn  a' b' c' d') = S.mkOsc S.AR "VDiskIn" [a',b',c',d'] 1
+mkVDiskIn (VDiskIn  a' b' c' d' e') = S.mkOsc S.AR "VDiskIn" [a',b',c',d',e'] 1
 instance Make VDiskIn where
   ugen = mkVDiskIn
diff --git a/hsc3-rec.cabal b/hsc3-rec.cabal
--- a/hsc3-rec.cabal
+++ b/hsc3-rec.cabal
@@ -1,16 +1,16 @@
 Name:              hsc3-rec
-Version:           0.7
+Version:           0.8
 Synopsis:          Haskell SuperCollider Record Variants
-Description:       hsc3-rsc provides record variants of the 
+Description:       hsc3-rec provides record variants of the
                    unit generator constructors at hsc3.
 License:           GPL
 Category:          Sound
-Copyright:         (c) Rohan Drape and others, 2008
+Copyright:         (c) Rohan Drape and others, 2008-2010
 Author:            Rohan Drape
 Maintainer:        rd@slavepianos.org
 Stability:         Experimental
-Homepage:          http://slavepianos.org/rd/f/197482/
-Tested-With:       GHC == 6.8.2
+Homepage:          http://slavepianos.org/rd/?t=hsc3-rec
+Tested-With:       GHC == 6.10.3
 Build-Type:        Simple
 Cabal-Version:     >= 1.6
 
@@ -20,11 +20,12 @@
                    Help/pitch.hs
 
 Library
-  Build-Depends:   base == 3.*,
-                   hsc3 == 0.7
+  Build-Depends:   base == 4.*,
+                   hsc3 == 0.8
   GHC-Options:     -Wall -fwarn-tabs
   Exposed-modules: Sound.SC3.UGen.Record
-                   -- the lines below are generate by make module_list
+                   -- the lines below are generate by running
+                   -- make module_list
                    Sound.SC3.UGen.Record.A2K
                    Sound.SC3.UGen.Record.AbstractIn
                    Sound.SC3.UGen.Record.AbstractOut
@@ -35,10 +36,10 @@
                    Sound.SC3.UGen.Record.AmpComp
                    Sound.SC3.UGen.Record.Amplitude
                    Sound.SC3.UGen.Record.APF
+                   Sound.SC3.UGen.Record.AudioControl
                    Sound.SC3.UGen.Record.Balance2
                    Sound.SC3.UGen.Record.Ball
                    Sound.SC3.UGen.Record.BAllPass
-                   Sound.SC3.UGen.Record.BasicOpUGen
                    Sound.SC3.UGen.Record.BBandPass
                    Sound.SC3.UGen.Record.BBandStop
                    Sound.SC3.UGen.Record.BeatTrack2
@@ -121,6 +122,7 @@
                    Sound.SC3.UGen.Record.Dseq
                    Sound.SC3.UGen.Record.Dser
                    Sound.SC3.UGen.Record.Dseries
+                   Sound.SC3.UGen.Record.Dshuf
                    Sound.SC3.UGen.Record.Dstutter
                    Sound.SC3.UGen.Record.Dswitch1
                    Sound.SC3.UGen.Record.Dswitch
@@ -209,6 +211,7 @@
                    Sound.SC3.UGen.Record.LFDNoise0
                    Sound.SC3.UGen.Record.LFDNoise1
                    Sound.SC3.UGen.Record.LFDNoise3
+                   Sound.SC3.UGen.Record.LFGauss
                    Sound.SC3.UGen.Record.LFNoise0
                    Sound.SC3.UGen.Record.LFNoise1
                    Sound.SC3.UGen.Record.LFNoise2
@@ -228,7 +231,6 @@
                    Sound.SC3.UGen.Record.LinRand
                    Sound.SC3.UGen.Record.LinXFade2
                    Sound.SC3.UGen.Record.ListDUGen
-                   Sound.SC3.UGen.Record.LocalBuf
                    Sound.SC3.UGen.Record.LocalIn
                    Sound.SC3.UGen.Record.LocalOut
                    Sound.SC3.UGen.Record.Logistic
@@ -284,9 +286,11 @@
                    Sound.SC3.UGen.Record.PV_BrickWall
                    Sound.SC3.UGen.Record.PV_ChainUGen
                    Sound.SC3.UGen.Record.PV_ConformalMap
+                   Sound.SC3.UGen.Record.PV_Conj
                    Sound.SC3.UGen.Record.PV_Copy
                    Sound.SC3.UGen.Record.PV_CopyPhase
                    Sound.SC3.UGen.Record.PV_Diffuser
+                   Sound.SC3.UGen.Record.PV_Div
                    Sound.SC3.UGen.Record.PV_HainsworthFoote
                    Sound.SC3.UGen.Record.PV_JensenAndersen
                    Sound.SC3.UGen.Record.PV_LocalMax
