diff --git a/Graphics/DynamicGraph/FillLine.hs b/Graphics/DynamicGraph/FillLine.hs
--- a/Graphics/DynamicGraph/FillLine.hs
+++ b/Graphics/DynamicGraph/FillLine.hs
@@ -7,6 +7,7 @@
 > import Control.Monad
 > import Control.Monad.Trans.Either
 > import Control.Concurrent
+> import Control.Applicative
 > import Pipes
 > import qualified Pipes.Prelude as P
 > import System.Random
@@ -23,7 +24,7 @@
 > 
 > main = eitherT putStrLn return $ do
 >     setupGLFW
->     lineGraph  <- window 1024 480 $ fmap (for cat . (lift . )) $ renderFilledLine 1000 jet_mod
+>     lineGraph  <- window 1024 480 $ pipeify <$> renderFilledLine 1000 jet_mod
 > 
 >     lift $ runEffect $ randomVect >-> lineGraph
 
diff --git a/Graphics/DynamicGraph/Line.hs b/Graphics/DynamicGraph/Line.hs
--- a/Graphics/DynamicGraph/Line.hs
+++ b/Graphics/DynamicGraph/Line.hs
@@ -9,6 +9,7 @@
 > import Control.Monad
 > import Control.Monad.Trans.Either
 > import Control.Concurrent
+> import Control.Applicative
 > import Pipes
 > import qualified Pipes.Prelude as P
 > import System.Random
@@ -25,7 +26,7 @@
 > 
 > main = eitherT putStrLn return $ do
 >     setupGLFW
->     lineGraph <- window 1024 480 $ fmap (for cat . (lift .)) $ renderLine 1000 1024
+>     lineGraph <- window 1024 480 $ pipeify <$> renderLine 1000 1024
 > 
 >     lift $ runEffect $ randomVect >-> lineGraph
 
diff --git a/Graphics/DynamicGraph/Util.hs b/Graphics/DynamicGraph/Util.hs
--- a/Graphics/DynamicGraph/Util.hs
+++ b/Graphics/DynamicGraph/Util.hs
@@ -1,28 +1,32 @@
 {-| Various utility functions -}
 module Graphics.DynamicGraph.Util (
     setupGLFW,
+    checkVertexTextureUnits,
     replaceMVar,
-    checkVertexTextureUnits
+    pipeify
     ) where
 
 import Control.Monad
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.Either
 import Control.Concurrent.MVar
-import Control.DeepSeq
+import Control.Applicative
 
 import Graphics.Rendering.OpenGL
 import Graphics.UI.GLFW as G
+import Pipes
 
--- | Utility function to setup GLFW for graph drawing
-setupGLFW :: EitherT String IO ()
+-- | Utility function to setup GLFW for graph drawing. Returns True on success.
+setupGLFW :: IO Bool
 setupGLFW = do
-    lift $ setErrorCallback $ Just $ \error msg -> do
+    setErrorCallback $ Just $ \error msg -> do
         print error
         putStrLn msg
-
-    res <- lift $ G.init
-    unless res (left "error initializing glfw")
+    G.init
+    
+-- | Returns True if texture units are accessible from the vertex shader. Needed  by Graphics.DynamicGraph.Line.
+checkVertexTextureUnits :: IO Bool
+checkVertexTextureUnits = (> 0) <$> get maxVertexTextureImageUnits
 
 -- | `tryTakeMVar` then `putMVar`
 replaceMVar :: MVar a -> a -> IO ()
@@ -30,9 +34,6 @@
     tryTakeMVar mv
     putMVar mv val
 
--- | Check if texture units are accessible from the vertex shader. Needed  by Graphics.DynamicGraph.Line.
-checkVertexTextureUnits :: EitherT String IO ()
-checkVertexTextureUnits = do
-    mtu <- lift $ get maxVertexTextureImageUnits
-    when (mtu <= 0) $ left "No texture units accessible from vertex shader"
-
+-- | Convert a function that performs a monadic action to a Consumer
+pipeify :: Monad m => (a -> m ()) -> Consumer a m ()
+pipeify = for cat . (lift .)
diff --git a/dynamic-graph.cabal b/dynamic-graph.cabal
--- a/dynamic-graph.cabal
+++ b/dynamic-graph.cabal
@@ -1,5 +1,5 @@
 name:                dynamic-graph
-version:             0.1.0.6
+version:             0.1.0.7
 synopsis:            Draw and update graphs in real time with OpenGL
 description:         
     Draw and update graphs in real time with OpenGL. Suitable for displaying large amounts of frequently changing data. Line graphs and waterfall plots are supported, as well as axis drawing.
@@ -25,10 +25,28 @@
     location: https://github.com/adamwalker/dynamic-graph
 
 library
-  exposed-modules:     Graphics.DynamicGraph.Line, Graphics.DynamicGraph.Waterfall, Graphics.DynamicGraph.Util, Graphics.DynamicGraph.FillLine, Graphics.DynamicGraph.Axis, Graphics.DynamicGraph.RenderCairo, Graphics.DynamicGraph.ColorMaps, Graphics.DynamicGraph.Window
-  -- other-modules:       
-  -- other-extensions:    
-  build-depends:       base >=4.6 && <4.8, GLFW-b >=1.4 && <1.5, OpenGL >=2.9 && <2.13, GLUtil >=0.7 && <0.9, transformers >=0.3 && <0.5, either >=4.1 && <4.4, pipes >=4.1 && <4.2, pango >=0.13 && <0.14, cairo >=0.13 && <0.14, colour >=2.3 && <2.4, bytestring >=0.10 && <0.11, deepseq >=1.3 && <1.5
-  -- hs-source-dirs:      
-  default-language:    Haskell2010
-  other-modules:       Paths_dynamic_graph
+    exposed-modules:     
+        Graphics.DynamicGraph.Line, 
+        Graphics.DynamicGraph.Waterfall, 
+        Graphics.DynamicGraph.Util, 
+        Graphics.DynamicGraph.FillLine, 
+        Graphics.DynamicGraph.Axis, 
+        Graphics.DynamicGraph.RenderCairo, 
+        Graphics.DynamicGraph.ColorMaps, 
+        Graphics.DynamicGraph.Window
+    -- other-modules:       
+    -- other-extensions:    
+    build-depends:       
+        base         >=4.6  && <4.9, 
+        GLFW-b       >=1.4  && <1.5, 
+        OpenGL       >=2.9  && <2.13, 
+        GLUtil       >=0.7  && <0.9, 
+        transformers >=0.3  && <0.5, 
+        either       >=4.1  && <4.4, 
+        pipes        >=4.1  && <4.2, 
+        pango        >=0.13 && <0.14, 
+        cairo        >=0.13 && <0.14, 
+        colour       >=2.3  && <2.4
+    -- hs-source-dirs:      
+    default-language:    Haskell2010
+    other-modules:       Paths_dynamic_graph
