diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+0.5.3 - 110413
+* updated for the latest parseargs
+* cleaned up warnings
+
 0.5.2 - 091121
 * updated for the latest OpenGL
 
diff --git a/hp2any-graph.cabal b/hp2any-graph.cabal
--- a/hp2any-graph.cabal
+++ b/hp2any-graph.cabal
@@ -1,5 +1,5 @@
 Name:          hp2any-graph
-Version:       0.5.2
+Version:       0.5.3
 Cabal-Version: >= 1.2
 Synopsis:      Real-time heap graphing utility and profile stream server with a reusable graphing module.
 Category:      profiling, development, utils
@@ -12,8 +12,8 @@
   as well in the form of a library module.
 
 Author:        Patai Gergely
-Maintainer:    Patai Gergely (patai@iit.bme.hu)
-Copyright:     (c) 2009, Patai Gergely
+Maintainer:    Patai Gergely (patai.gergely@gmail.com)
+Copyright:     (c) 2009-2011, Patai Gergely
 Homepage:      http://www.haskell.org/haskellwiki/Hp2any
 License:       BSD3
 License-File:  LICENSE
@@ -33,19 +33,17 @@
     Profiling.Heap.OpenGL
 
 Executable hp2any-graph
-  Executable:      hp2any-graph
   HS-Source-Dirs:  src
   Main-IS:         Graph.hs
   GHC-Options:     -Wall -O2
   Extra-Libraries: glut
   Build-Depends:   base >= 4 && < 5, process, directory, filepath, containers,
-                   bytestring, hp2any-core, parseargs, network,
+                   bytestring, hp2any-core, parseargs >= 0.1.3.1, network,
                    OpenGL, GLUT
 
 Executable hp2any-relay
-  Executable:     hp2any-relay
   HS-Source-Dirs: src
   Main-IS:        Relay.hs
   Build-Depends:  base >= 4 && < 5, process, directory, filepath, containers,
-                  bytestring, hp2any-core, parseargs, network
+                  bytestring, hp2any-core, parseargs >= 0.1.3.1, network
   GHC-Options:    -Wall -O2
diff --git a/src/Graph.hs b/src/Graph.hs
--- a/src/Graph.hs
+++ b/src/Graph.hs
@@ -21,7 +21,7 @@
 
 import Control.Applicative
 import Control.Concurrent
-import Control.Concurrent.MVar
+--import Control.Concurrent.MVar
 import Control.Monad
 import Control.Monad.Fix
 --import qualified Data.ByteString.Char8 as S
@@ -33,13 +33,13 @@
 import Foreign.Storable
 --import Graphics.UI.GLFW
 import Graphics.UI.GLUT
-import Graphics.Rendering.OpenGL hiding (Arg)
+--import Graphics.Rendering.OpenGL hiding (Arg)
 import Network
 import Profiling.Heap.OpenGL
 import Profiling.Heap.Read
 import Profiling.Heap.Process
 import Profiling.Heap.Types
-import System.IO
+--import System.IO
 
 import HandleArgs
 
@@ -71,10 +71,10 @@
 main = withSocketsDo $ do
   profInfo <- graphArgs
 
-  initialize "hp2any-graph" []
+  _ <- initialize "hp2any-graph" []
   initialDisplayMode $= [RGBMode, DoubleBuffered]
   initialWindowSize $= Size 800 600
-  createWindow "hp2any live graph"
+  _ <- createWindow "hp2any live graph"
 
   clearColor $= Color4 1 1 1 1
   lineWidth $= 4
@@ -143,9 +143,9 @@
   profileCallback procData (putMVar profData) >>= \cbres -> case cbres of
     Just (stop,_) -> do
       closeCallback $== stop
-      
+
       -- Looping as long as the other process is running.
-      forkIO $ fix $ \consume -> do
+      _ <- forkIO $ fix $ \consume -> do
         prof <- takeMVar profData
         keepGoing <- glProtect $ accumGraph graphData prof
         when keepGoing consume
@@ -155,7 +155,7 @@
     Nothing -> putStrLn "Error starting profile reader thread. Did you enable heap profiling?"
 
 -- RGB values under the mouse cursor.
-hoverColour (Position x y) = allocaBytes 4 $ \colData -> do    
+hoverColour (Position x y) = allocaBytes 4 $ \colData -> do
   Size _ h <- get windowSize
   readPixels (Position x (fromIntegral h-y)) (Size 1 1) (PixelData RGBA UnsignedByte colData)
   r <- peekElemOff colData 0
@@ -192,12 +192,12 @@
   renderGraph (uisGraphMode uis) graph
 
   let magn = 1
-  
+
   loadIdentity
   Size w h <- get windowSize
   scale2 (magn/fromIntegral w) (magn/fromIntegral h)
   translate2 0 (fromIntegral h/magn-16)
-  
+
   color3 0 0 0
   currentRasterPosition $= Vertex4 0 0 0 1
   renderString Fixed8By13 (fromMaybe "" (IM.lookup (uisCcid uis) (graphNames graph)))
diff --git a/src/HandleArgs.hs b/src/HandleArgs.hs
--- a/src/HandleArgs.hs
+++ b/src/HandleArgs.hs
@@ -25,7 +25,7 @@
   return (exec,dir,argsRest args)
 
 graphArgs = do
-  args <- parseArgsIO ArgsTrailing
+  args <- parseArgsIO (ArgsTrailing "rest")
           [ Arg Exec (Just 'e') (Just "exec")
             (argDataOptional "executable" ArgtypeString)
             "Executable to profile."
@@ -36,7 +36,7 @@
             (argDataOptional "address:port" ArgtypeString)
             "Server to connect to."
           ]
-  
+
   let port = getArgString args Port
   (exec,dir,params) <- commonArgs args
 
@@ -56,7 +56,7 @@
   return retval
 
 relayArgs = do
-  args <- parseArgsIO ArgsTrailing
+  args <- parseArgsIO (ArgsTrailing "rest")
           [ Arg Exec (Just 'e') (Just "exec")
             (argDataRequired "executable" ArgtypeString)
             "Executable to profile."
@@ -67,7 +67,7 @@
             (argDataRequired "portnum" ArgtypeString)
             "Number of server port to listen on."
           ]
-  
+
   let Just port = getArgString args Port
   (exec,dir,params) <- commonArgs args
 
diff --git a/src/Profiling/Heap/OpenGL.hs b/src/Profiling/Heap/OpenGL.hs
--- a/src/Profiling/Heap/OpenGL.hs
+++ b/src/Profiling/Heap/OpenGL.hs
@@ -13,7 +13,7 @@
 
 In other words, these functions fill the unit square at the origin. -}
 
-module Profiling.Heap.OpenGL 
+module Profiling.Heap.OpenGL
     ( colours
     , backgroundColour
     , otherColour
@@ -39,7 +39,7 @@
 import qualified Data.IntMap as IM
 import Data.List
 import Graphics.Rendering.OpenGL hiding (samples)
-import Graphics.Rendering.OpenGL.GL.DisplayLists
+--import Graphics.Rendering.OpenGL.GL.DisplayLists
 import Profiling.Heap.Types
 
 {-| Two heap profile samples which contain the exact same cost centres
diff --git a/src/Relay.hs b/src/Relay.hs
--- a/src/Relay.hs
+++ b/src/Relay.hs
@@ -1,8 +1,8 @@
 {-# OPTIONS_GHC -fno-warn-missing-signatures #-}
 
 import Control.Concurrent
-import Control.Concurrent.Chan
-import Control.Concurrent.MVar
+--import Control.Concurrent.Chan
+--import Control.Concurrent.MVar
 import Control.Monad
 import Control.Monad.Fix
 import qualified Data.IntMap as IM
@@ -22,7 +22,7 @@
   (portNum,exec,dir,params) <- relayArgs
 
   let procData = processToProfile exec dir params []
-      port = PortNumber $ fromIntegral portNum 
+      port = PortNumber $ fromIntegral portNum
 
   profChan <- newChan
   stopServer <- newEmptyMVar
@@ -33,7 +33,7 @@
      writeChan profChan p
      -- Cleaning up the master channel that's not read by
      -- anyone.
-     readChan profChan
+     _ <- readChan profChan
 
      case p of
        SinkId ccid ccname -> modifyIORef names (IM.insert ccid ccname)
@@ -46,18 +46,18 @@
       -- A rather lazy way of avoiding the need to maintain an explicit
       -- client list and perform additional synchronisation...
       ownChan <- dupChan profChan
-      
+
       -- Start by sending the currently known name mapping.
       ccmap <- readIORef names
       mapM_ (sendMsg chdl . putStream . uncurry SinkId) (IM.toList ccmap)
-      
+
       -- Forward stream to the client.
       fix $ \sendLoop -> do
         prof <- readChan ownChan
         ok <- flip catch (const (return False)) $ do
           sendMsg chdl . putStream $ prof
           return (prof /= SinkStop)
-      
+
         when ok sendLoop
 
   return ()
@@ -74,5 +74,5 @@
 
   -- There might be some ugly race conditions here, where clients might
   -- be left without a message before leaving the runServer subroutine.
-  waitForStop
+  _ <- waitForStop
   killThread tid
