diff --git a/midi.cabal b/midi.cabal
--- a/midi.cabal
+++ b/midi.cabal
@@ -1,10 +1,11 @@
 Name:             midi
-Version:          0.0.5
+Version:          0.0.6
 License:          GPL
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
 Maintainer:       Henning Thielemann <haskell@henning-thielemann.de>
-Homepage:         http://darcs.haskell.org/midi/
+Homepage:         http://www.haskell.org/haskellwiki/MIDI
+Package-URL:      http://darcs.haskell.org/midi/
 Category:         Sound
 Build-Type:       Simple
 Synopsis:         Handling of MIDI messages and files
@@ -14,7 +15,7 @@
    reading and writing MIDI files.
    It contains no sending and receiving of MIDI messages. Cf. alsa-midi package.
    For music composition with MIDI output, see Haskore.
-Tested-With:      GHC==6.4.1
+Tested-With:      GHC==6.4.1 && ==6.8.2
 Cabal-Version:    >=1.2
 Build-Type:       Simple
 
@@ -22,10 +23,12 @@
   description: Choose the new smaller, split-up base package.
 
 Library
+  Build-Depends: event-list >=0.0.6 && < 0.1, non-negative>=0.0.1 && <0.1
+  Build-Depends: mtl >=1 && <2, QuickCheck >=1 && <2
   If flag(splitBase)
-    Build-Depends: base >= 2, event-list==0.0.6, non-negative==0.0.1, mtl, QuickCheck, random
+    Build-Depends: base >= 2, random
   Else
-    Build-Depends: base >= 1.0 && < 2, event-list==0.0.6, non-negative==0.0.1, mtl, QuickCheck
+    Build-Depends: base >= 1.0 && < 2
     -- Instead of the full-blown Monad Template Library with multi-parameter type classes with functional dependencies
     -- we also be happy with the less expensive
     -- http://darcs.haskell.org/packages/mtl-split/Control/Monad/Trans/State.hs
diff --git a/src/Sound/MIDI/General.hs b/src/Sound/MIDI/General.hs
--- a/src/Sound/MIDI/General.hs
+++ b/src/Sound/MIDI/General.hs
@@ -9,6 +9,9 @@
 import qualified Sound.MIDI.Event as MidiEvent
 import           Data.Ix(Ix)
 import qualified Data.List as List
+
+import Sound.MIDI.Utility (mapFst, mapSnd, )
+import Test.QuickCheck (Gen, Arbitrary(..), choose, )
 import System.Random (Random(random,randomR), RandomGen)
 
 
@@ -173,8 +176,12 @@
    random  = boundedEnumRandom
    randomR = enumRandomR
 
+instance Arbitrary Instrument where
+   arbitrary = chooseEnum
+   coarbitrary = error "GeneralMIDI.Instrument.coarbitrary not implemented"
 
 
+
 {- * Drum definitions -}
 
 
@@ -218,13 +225,21 @@
       | OpenTriangle      -- Midi Key 82
    deriving (Show, Eq, Ord, Ix, Enum, Bounded)
 
+-- http://oxygen.cside6.com/gallery/ins_gm.html
+
 instance Random Drum where
    random  = boundedEnumRandom
    randomR = enumRandomR
 
--- http://oxygen.cside6.com/gallery/ins_gm.html
+instance Arbitrary Drum where
+   arbitrary = chooseEnum
+   coarbitrary = error "GeneralMIDI.Drum.coarbitrary not implemented"
 
 
+
+
+-- auxiliary functions
+
 enumRandomR :: (Enum a, RandomGen g) => (a,a) -> g -> (a,g)
 enumRandomR (l,r) =
    mapFst toEnum . randomR (fromEnum l, fromEnum r)
@@ -232,8 +247,5 @@
 boundedEnumRandom :: (Enum a, Bounded a, RandomGen g) => g -> (a,g)
 boundedEnumRandom  =  enumRandomR (minBound, maxBound)
 
-mapFst :: (a -> c) -> (a,b) -> (c,b)
-mapFst f ~(x,y) = (f x, y)
-
-mapSnd :: (b -> d) -> (a,b) -> (a,d)
-mapSnd g ~(x,y) = (x, g y)
+chooseEnum :: (Enum a, Bounded a, Random a) => Gen a
+chooseEnum = choose (minBound, maxBound)
diff --git a/src/Sound/MIDI/Utility.hs b/src/Sound/MIDI/Utility.hs
--- a/src/Sound/MIDI/Utility.hs
+++ b/src/Sound/MIDI/Utility.hs
@@ -1,17 +1,32 @@
 module Sound.MIDI.Utility where
 
+
+{-# INLINE mapFst #-}
+mapFst :: (a -> c) -> (a,b) -> (c,b)
+mapFst f ~(x,y) = (f x, y)
+
+{-# INLINE mapSnd #-}
+mapSnd :: (b -> d) -> (a,b) -> (a,d)
+mapSnd g ~(x,y) = (x, g y)
+
+
+{-# INLINE fst3 #-}
 fst3 :: (a,b,c) -> a
 fst3 (x,_,_) = x
 
+{-# INLINE snd3 #-}
 snd3 :: (a,b,c) -> b
 snd3 (_,x,_) = x
 
+{-# INLINE thd3 #-}
 thd3 :: (a,b,c) -> c
 thd3 (_,_,x) = x
 
+{-# INLINE toMaybe #-}
 toMaybe :: Bool -> a -> Maybe a
 toMaybe False _ = Nothing
 toMaybe True  x = Just x
 
+{-# INLINE swap #-}
 swap :: (a,b) -> (b,a)
 swap (a,b) = (b,a)
