diff --git a/Data/LinearProgram/GLPK/IO.hs b/Data/LinearProgram/GLPK/IO.hs
--- a/Data/LinearProgram/GLPK/IO.hs
+++ b/Data/LinearProgram/GLPK/IO.hs
@@ -5,7 +5,7 @@
 -- import Data.Map
 
 import Data.LinearProgram.Common
-import Data.LinearProgram.LPMonad.Internal
+-- import Data.LinearProgram.LPMonad.Internal
 
 import Data.LinearProgram.GLPK.Common
 import Data.LinearProgram.GLPK.IO.Internal
diff --git a/Data/LinearProgram/GLPK/IO/Internal.hs b/Data/LinearProgram/GLPK/IO/Internal.hs
--- a/Data/LinearProgram/GLPK/IO/Internal.hs
+++ b/Data/LinearProgram/GLPK/IO/Internal.hs
@@ -5,8 +5,7 @@
 import Control.Monad
 import Control.Monad.Trans
 
-
-import Data.Map hiding (map)
+import Data.Map hiding (map, filter)
 
 import Data.LinearProgram.Common
 import Data.LinearProgram.GLPK.Common
@@ -73,7 +72,7 @@
 		2	-> liftM LBound (lb i)
 		3	-> liftM UBound (lb i)
 		4	-> liftM2 Bound (lb i) (ub i)
-		5	-> liftM Equ (lb i)
+		_	-> liftM Equ (lb i)
 		
 getObjCoef :: Int -> GLPK Double
 getObjCoef = getCDouble glpGetObjCoef
@@ -112,6 +111,11 @@
 		maybe constrain constrain' name 
 			(linCombination [(v, names ! j) | (j, v) <- row]) bds
 			| (i, row) <- rowContents]
+	obj <- lift $ sequence [do
+		c <- getObjCoef i
+		return (name, c) | (i, name) <- assocs names]
+	setObjective (fromList (filter ((/= 0) . snd) obj))
+		
 
 writeGLP_LP :: (Show v, Ord v, Real c) => FilePath -> LP v c -> GLPK ()
 writeGLP_LP file lp = do
diff --git a/Data/LinearProgram/GLPK/Solver.hs b/Data/LinearProgram/GLPK/Solver.hs
--- a/Data/LinearProgram/GLPK/Solver.hs
+++ b/Data/LinearProgram/GLPK/Solver.hs
@@ -19,17 +19,17 @@
 	Cuts(..)) where 
 
 import Control.Monad
-import Control.Monad.Trans
+-- import Control.Monad.Trans
 
 -- import Debug.Trace
 
 import Data.Map
-import Data.Maybe (catMaybes)
+-- import Data.Maybe (catMaybes)
 import Data.LinearProgram.Common
 import Data.LinearProgram.GLPK.Internal
 import Data.LinearProgram.GLPK.Types
 
-import Data.Time.Clock
+-- import Data.Time.Clock
 -- import System.Time
 
 import GHC.Exts(build)
diff --git a/Data/LinearProgram/LPMonad.hs b/Data/LinearProgram/LPMonad.hs
--- a/Data/LinearProgram/LPMonad.hs
+++ b/Data/LinearProgram/LPMonad.hs
@@ -14,13 +14,16 @@
 	glpSolve,
 	quickSolveMIP',
 	quickSolveLP',
-	glpSolve') where
+	glpSolve',
+	-- * File I/O
+	writeLPToFile,
+	readLPFromFile) where
 
 import Control.Monad.State.Strict
-import Control.Monad.Identity
+-- import Control.Monad.Identity
 
 import Data.Map
-import Data.Monoid
+-- import Data.Monoid
 
 import Data.LinearProgram.Common
 import Data.LinearProgram.LPMonad.Internal
diff --git a/glpk-hs.cabal b/glpk-hs.cabal
--- a/glpk-hs.cabal
+++ b/glpk-hs.cabal
@@ -1,5 +1,5 @@
 Name:           glpk-hs
-Version:        0.0.3
+Version:        0.0.4
 Author:         Louis Wasserman
 License:        GPL
 License-file:   LICENSE
@@ -20,7 +20,7 @@
 
 extra-source-files: examples/example1.hs
 
-Build-Depends:    base >= 3 && < 5, array, containers, mtl, time
+Build-Depends:    base >= 4 && < 5, array, containers, mtl, time
 Exposed-modules:  Data.LinearProgram,
                   Data.LinearProgram.Common,
                   Data.LinearProgram.GLPK,
diff --git a/glpk/glpk.c b/glpk/glpk.c
--- a/glpk/glpk.c
+++ b/glpk/glpk.c
@@ -185,9 +185,9 @@
 }
 
 int c_glp_read_lp(glp_prob *lp, const char * fname){
-  	return glp_read_lp(lp, NULL, fname);
+  	return glp_read_lp(lp, 0, fname);
 }
 
 int c_glp_write_lp(glp_prob *lp, const char * fname){
-  	return glp_write_lp(lp, NULL, fname);
+  	return glp_write_lp(lp, 0, fname);
 }
