diff --git a/Text/JSON/YAJL.chs b/Text/JSON/YAJL.chs
--- a/Text/JSON/YAJL.chs
+++ b/Text/JSON/YAJL.chs
@@ -151,15 +151,15 @@
 
 freeParserCallbacks :: Ptr () -> IO ()
 freeParserCallbacks raw = do
-	{# get yajl_callbacks->yajl_null #} raw >>= freeHaskellFunPtr
-	{# get yajl_callbacks->yajl_boolean #} raw >>= freeHaskellFunPtr
-	{# get yajl_callbacks->yajl_number #} raw >>= freeHaskellFunPtr
-	{# get yajl_callbacks->yajl_string #} raw >>= freeHaskellFunPtr
-	{# get yajl_callbacks->yajl_start_map #} raw >>= freeHaskellFunPtr
-	{# get yajl_callbacks->yajl_map_key #} raw >>= freeHaskellFunPtr
-	{# get yajl_callbacks->yajl_end_map #} raw >>= freeHaskellFunPtr
-	{# get yajl_callbacks->yajl_start_array #} raw >>= freeHaskellFunPtr
-	{# get yajl_callbacks->yajl_end_array #} raw >>= freeHaskellFunPtr
+	{# get yajl_callbacks->yajl_null #} raw >>= freeFunPtr
+	{# get yajl_callbacks->yajl_boolean #} raw >>= freeFunPtr
+	{# get yajl_callbacks->yajl_number #} raw >>= freeFunPtr
+	{# get yajl_callbacks->yajl_string #} raw >>= freeFunPtr
+	{# get yajl_callbacks->yajl_start_map #} raw >>= freeFunPtr
+	{# get yajl_callbacks->yajl_map_key #} raw >>= freeFunPtr
+	{# get yajl_callbacks->yajl_end_map #} raw >>= freeFunPtr
+	{# get yajl_callbacks->yajl_start_array #} raw >>= freeFunPtr
+	{# get yajl_callbacks->yajl_end_array #} raw >>= freeFunPtr
 
 foreign import ccall "yajl/yajl_parse.h &yajl_free"
 	cParserFree :: FunPtr (Ptr ParserHandle -> IO ())
@@ -243,6 +243,11 @@
 foreign import ccall "wrapper"
 	allocCallbackUBuf :: CallbackUBuf -> IO (FunPtr CallbackUBuf)
 
+freeFunPtr :: FunPtr a -> IO ()
+freeFunPtr ptr = if ptr == nullFunPtr
+	then return ()
+	else freeHaskellFunPtr ptr
+
 callback :: (Parser m -> a -> IO (FunPtr b))
          -> (Ptr () -> IO (FunPtr b))
          -> (Ptr () -> FunPtr b -> IO ())
@@ -254,11 +259,7 @@
 	clear parser = withForeignPtr (parserCallbacks parser) $ \p -> do
 		free p
 		setPtr p nullFunPtr
-	free p = do
-		cb <- getPtr p
-		if cb == nullFunPtr
-			then return ()
-			else freeHaskellFunPtr cb
+	free p = getPtr p >>= freeFunPtr
 
 parsedBeginArray :: Callback m (m Bool)
 parsedBeginArray = callback wrapCallback0
diff --git a/yajl.cabal b/yajl.cabal
--- a/yajl.cabal
+++ b/yajl.cabal
@@ -1,5 +1,5 @@
 name: yajl
-version: 0.3
+version: 0.3.0.1
 synopsis: Bindings for YAJL, an event-based JSON implementation
 license: GPL-3
 license-file: license.txt
