diff --git a/graphmod.cabal b/graphmod.cabal
--- a/graphmod.cabal
+++ b/graphmod.cabal
@@ -1,10 +1,10 @@
 name:           graphmod
-version:        1.2.4
+version:        1.2.5
 license:        BSD3
 license-file:   LICENSE
 author:         Iavor S. Diatchki
 maintainer:     iavor.diatchki@gmail.com
-homepage:       http://github.com/yav/graphmod
+homepage:       http://github.com/yav/graphmod/wiki
 build-type:     Simple
 cabal-version:  >= 1.2
 synopsis:       Present the module dependencies of a program as a "dot" graph.
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -28,7 +28,7 @@
 
                | otherwise ->
                   do g <- graph (add_current opts) (map to_input ms)
-                     putStrLn (make_dot (color_scheme opts)
+                     putStrLn (make_dot (graph_size opts) (color_scheme opts)
                                                       (use_clusters opts) g)
               where opts = foldr ($) default_opts fs
 
@@ -204,10 +204,12 @@
 
 -- Render edges and a trie into the dot language
 --------------------------------------------------------------------------------
-make_dot :: Int -> Bool -> (Edges,NodesC) -> String
-make_dot col cl (es,t) =
+make_dot :: String -> Int -> Bool -> (Edges,NodesC) -> String
+make_dot sz col cl (es,t) =
   showDot $
-  do if cl then make_clustered_dot (colors col) t
+  do attribute ("size", sz)
+     attribute ("ratio", "fill")
+     if cl then make_clustered_dot (colors col) t
            else make_unclustered_dot (colors col) "" t >> return ()
      forM_ (IMap.toList es) $ \(x,ys) ->
        forM_ (Set.toList ys) $ \y -> userNodeId x .->. userNodeId y
@@ -323,6 +325,7 @@
   , show_version  :: Bool
   , color_scheme  :: Int
   , prune_edges   :: Bool
+  , graph_size    :: String
   }
 
 type IgnoreSet  = Trie.Trie String IgnoreSpec
@@ -341,6 +344,7 @@
   , show_version    = False
   , color_scheme    = 0
   , prune_edges     = False
+  , graph_size      = "6,4"
   }
 
 options :: [OptDescr OptT]
@@ -370,8 +374,11 @@
     "Display modules NAME and NAME.* as one node"
 
   , Option ['p'] ["prune-edges"] (NoArg set_prune)
-    "Prune edges."
+    "Remove imports if the module is imported by another imported module"
 
+  , Option ['d'] ["graph-dim"] (ReqArg set_size "SIZE,SIZE")
+    "Set dimensions of the graph.  See the `size` attribute of graphvize."
+
   , Option ['s'] ["colors"] (ReqArg add_color_scheme "NUM")
     "Choose a color scheme number (0-5)"
 
@@ -430,3 +437,6 @@
 
 set_prune :: OptT
 set_prune o = o { prune_edges = True }
+
+set_size :: String -> OptT
+set_size s o = o { graph_size = s }
diff --git a/src/Utils.hs b/src/Utils.hs
--- a/src/Utils.hs
+++ b/src/Utils.hs
@@ -11,7 +11,7 @@
   , suffixes
   ) where
 
-import Language.Haskell.Lexer(lexerPass1,Token(..),PosToken)
+import Language.Haskell.Lexer(lexerPass1,Token(..),PosToken,line)
 
 import Data.Maybe(catMaybes)
 import Data.List(intersperse,isPrefixOf)
@@ -25,8 +25,30 @@
 
 -- | Get the imports from a string that represents a program.
 parseString        :: String -> (ModName,[ModName])
-parseString         = parse . lexerPass1
+parseString         = parse . dropApproxCPP . lexerPass1
 
+dropApproxCPP :: [PosToken] -> [PosToken]
+
+ -- this is some artifact of the lexer
+dropApproxCPP ((_, (_,"")) : more) = dropApproxCPP more
+
+dropApproxCPP ((Varsym, (_,"#")) : (_, (pos,tok)) : more)
+  | tok `elem` [ "if", "ifdef", "ifndef" ] = dropToEndif more
+  | tok `elem` [ "include", "define", "undef" ] = dropToEOL more
+  where
+  dropToEndif ((Varsym, (_,"#")) : (_, (_,"endif")) : rest)
+                         = dropApproxCPP rest
+  dropToEndif (_ : rest) = dropToEndif rest
+  dropToEndif []         = []
+
+  dropToEOL ((_, (pos1,_)) : rest)
+    | line pos == line pos1 = dropToEOL rest
+  dropToEOL xs  = dropApproxCPP xs
+
+dropApproxCPP (x : xs) = x : dropApproxCPP xs
+dropApproxCPP []       = []
+
+
 isImp              :: [PosToken] -> Maybe (String, [PosToken])
 isImp (_ : (Conid, (_,x)) : xs)   = Just (x,xs)
 isImp (_ : (Qconid, (_,x)) : xs)  = Just (x,xs)
@@ -37,7 +59,7 @@
 isImp _ = Nothing
 
 parse              :: [PosToken] -> (ModName,[ModName])
-parse (_ : (Reservedid,(_,"module")) : (_,(_,m)) : is) =
+parse ((Reservedid,(_,"module")) : (_,(_,m)) : is) =
                                                   (splitModName m,imports is)
 parse is            = (([],"Main"),imports is)
 
