diff --git a/midi-alsa.cabal b/midi-alsa.cabal
--- a/midi-alsa.cabal
+++ b/midi-alsa.cabal
@@ -1,5 +1,5 @@
 Name:             midi-alsa
-Version:          0.1
+Version:          0.1.1
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -24,7 +24,7 @@
 Source-Repository this
   type:     darcs
   location: http://code.haskell.org/~thielema/midi-alsa/
-  tag:      0.1
+  tag:      0.1.1
 
 Flag splitBase
   description: Choose the new smaller, split-up base package.
diff --git a/src/Sound/MIDI/ALSA.hs b/src/Sound/MIDI/ALSA.hs
--- a/src/Sound/MIDI/ALSA.hs
+++ b/src/Sound/MIDI/ALSA.hs
@@ -16,6 +16,8 @@
 import Data.Tuple.HT (mapSnd, )
 
 
+-- * value conversions
+
 toChannel :: Word8 -> Channel
 toChannel  =  ChannelMsg.toChannel . fromIntegral
 
@@ -75,6 +77,50 @@
 fromProgram  =  fromIntegral . ChannelMsg.fromProgram
 
 
+-- * construction of event data records
+
+noteEvent ::
+   Channel -> Pitch -> Velocity -> Velocity -> Word32 ->
+   Event.Note
+noteEvent chan pitch velOn velOff dur =
+   Event.Note
+      (fromChannel chan)
+      (fromPitch pitch)
+      (fromVelocity velOn)
+      (fromVelocity velOff)
+      dur
+
+controllerEvent ::
+   Channel -> Controller -> Int32 ->
+   Event.Ctrl
+controllerEvent chan ctrl value =
+   Event.Ctrl
+      (fromChannel chan)
+      (fromController ctrl)
+      value
+
+programChangeEvent ::
+   Channel -> Program ->
+   Event.Ctrl
+programChangeEvent chan pgm =
+   Event.Ctrl
+      (fromChannel chan)
+      0
+      (fromProgram pgm)
+
+modeEvent ::
+   Channel -> Mode.T ->
+   Event.Ctrl
+modeEvent chan m =
+   case Mode.toControllerValue m of
+      (param,value) ->
+         Event.Ctrl
+            (fromChannel chan)
+            param
+            (fromIntegral value)
+
+
+-- * accessors to event data fields
 
 noteChannel :: Acc.T Event.Note Channel
 noteChannel =
