diff --git a/examples/simple.hs b/examples/simple.hs
--- a/examples/simple.hs
+++ b/examples/simple.hs
@@ -1,19 +1,14 @@
 module Main where
 
 import Sound.Csound
-import Sound.Csound.Interface (csoundCreate, csoundDestroy, csoundCompile, csoundPerform, CsoundPerformStatus)
 import Control.Monad.Error
 
 main :: IO ()
-main = (runErrorT $ runCsound "-W -otest.wav test1.csd") >>= reportResult
+main = runner "-W -otest.wav test1.csd" >>= reportResult
 
-runCsound :: String -> CsoundMonad ()
-runCsound args = do
-        ptr <- csoundCreate
-        csoundCompile ptr args
-        csoundPerform ptr
-	csoundDestroy ptr
+runner :: String -> IO (Either CsoundError ())
+runner args = runCsound (compile args >> perform >> destroy) 
 
-reportResult :: Either String () -> IO ()
+reportResult :: Either CsoundError () -> IO ()
 reportResult (Right _) = putStrLn ("Csound Ran! " )
 reportResult (Left e) = putStrLn ("csound didn't run... " ++ (show e))
diff --git a/examples/test2.hs b/examples/test2.hs
--- a/examples/test2.hs
+++ b/examples/test2.hs
@@ -1,24 +1,14 @@
 module Main where
 
-import Prelude
-import Sound.Csound
-import Sound.Csound.Interface
-import Control.Monad.Error
-import Data.Binary.Put
-import Data.Word
-import qualified Data.ByteString.Lazy as L
-import Foreign.Marshal.Array (peekArray, pokeArray)
+import           Sound.Csound
+import qualified Data.Vector.Storable as V
 
 main :: IO ()
-main = do
-	runErrorT (runCsound "-W -o test2.wav test1.csd")
-	return ()
-
-runCsound :: String -> CsoundMonad ()
-runCsound args = do
-        ptr <- csoundCreate
-	liftIO $ csoundSetHostImplementedAudioIO ptr 1 512
-        csoundCompile ptr args
-	csoundPerformKsmpsIO ptr (\x _ -> return $ replicate x 1) (\_ _ _ -> return () )
-	csoundDestroy ptr
+main = runCsound (runner "-W -o test2.wav test1.csd")
+  >>= either print (const $ print "ok")
 
+runner :: String -> Csound ()
+runner args = do
+  setHostImplementedAudioIO 1 512
+  compile args
+  performKsmpsIO (\x _ -> return $ V.replicate x 1) (\_ _ _ -> return () )
diff --git a/examples/test3.hs b/examples/test3.hs
--- a/examples/test3.hs
+++ b/examples/test3.hs
@@ -1,24 +1,21 @@
 module Main where
 
-import Prelude
-import Sound.Csound
-import Sound.Csound.Interface
-import Control.Monad.Error
+import           Sound.Csound
+import qualified Data.Vector.Storable as V
 
 main :: IO ()
-main = (runErrorT $ runCsound "-W -otest3.wav test1.csd") >>= reportResult
+main = (runCsound $ runner "-W -otest3.wav test1.csd") >>= reportResult
 
-runCsound :: String -> CsoundMonad ()
-runCsound args = do
-        ptr <- csoundCreate
-        csoundPreCompile ptr
-        liftIO $ csoundSetHostImplementedAudioIO ptr 1 512
-        csoundCompile ptr args
-        csoundPerformBufferIO ptr (\x y -> return $ replicate x 1) (\_ _ _ -> return ())
-        csoundDestroy ptr
+runner :: String -> Csound ()
+runner args = do
+  preCompile
+  setHostImplementedAudioIO 1 512
+  compile args
+  performBufferIO (\x y -> return $ V.replicate x 1) (\_ _ _ -> return ())
+  destroy 
 
 outFn l i b = putStrLn ("Buffer Length: " ++ (show l) ++ "Position: " ++ (show i))
 
-reportResult :: Either String a -> IO ()
+reportResult :: Either CsoundError a -> IO ()
 reportResult (Right _) = (putStrLn "Csound Ran! ")
 reportResult (Left e) = putStrLn ("csound didn't run... " ++ (show e))
diff --git a/hCsound.cabal b/hCsound.cabal
--- a/hCsound.cabal
+++ b/hCsound.cabal
@@ -1,5 +1,5 @@
 Name:           hCsound
-Version:        0.3.0
+Version:        0.3.1
 Cabal-Version:  >= 1.2
 Description:    Haskell interface to Csound API.
 License:        LGPL
