diff --git a/Text/Regex/Posix/Wrap.hsc b/Text/Regex/Posix/Wrap.hsc
--- a/Text/Regex/Posix/Wrap.hsc
+++ b/Text/Regex/Posix/Wrap.hsc
@@ -100,6 +100,9 @@
 
 #include <sys/types.h>
 -- string.h is needed for memset
+
+#include "myfree.h"
+
 #include "string.h"
 
 #ifndef _POSIX_C_SOURCE
@@ -333,9 +336,14 @@
 -- -----------------------------------------------------------------------------
 -- The POSIX regex C interface
 
-foreign import ccall unsafe "string.h memset"
+-- string.h
+foreign import ccall unsafe "memset"
   c_memset :: Ptr CRegex -> CInt -> CSize -> IO (Ptr CRegex)
 
+-- c-finalizer/myfree.h and c-finalizer/myfree.c
+foreign import ccall unsafe "&myregfree"
+  c_myregfree :: FunPtr (Ptr CRegex -> IO ())
+
 #if __GLASGOW_HASKELL__ || __HUGS__
 
 foreign import ccall unsafe "regcomp"
@@ -457,7 +465,7 @@
     Left ioerror -> return (Left (retOk,"Text.Regex.Posix.Wrap.wrapCompile: IOError from mallocBytes(regex_t) : "++show ioerror))
     Right raw_regex_ptr -> do
       zero_regex_ptr <- c_memset raw_regex_ptr 0 (#const sizeof(regex_t)) -- no calloc, so clear the new area to zero
-      regex_fptr <- newForeignPtr c_regfree zero_regex_ptr -- once pointed-to area is clear it should be safe to add finalizer
+      regex_fptr <- newForeignPtr c_myregfree zero_regex_ptr -- once pointed-to area is clear it should be safe to add finalizer
       withForeignPtr regex_fptr $ \regex_ptr -> do  -- withForeignPtr is best hygiene here
         errCode <- c_regcomp regex_ptr pattern flags
         if (errCode == retOk)
diff --git a/c-finalizer/myfree.c b/c-finalizer/myfree.c
new file mode 100644
--- /dev/null
+++ b/c-finalizer/myfree.c
@@ -0,0 +1,13 @@
+#include "myfree.h"
+#include "regex.h"
+#include "stdlib.h"
+
+/* 
+void free(void *ptr);
+void regfree(regex_t *preg);
+*/
+
+void myregfree(void *preg) {
+  regfree(preg);
+  free(preg);
+}
diff --git a/c-finalizer/myfree.h b/c-finalizer/myfree.h
new file mode 100644
--- /dev/null
+++ b/c-finalizer/myfree.h
@@ -0,0 +1,2 @@
+void myregfree(void *);
+
diff --git a/regex-posix.cabal b/regex-posix.cabal
--- a/regex-posix.cabal
+++ b/regex-posix.cabal
@@ -1,7 +1,7 @@
 Name:                   regex-posix
 -- Keep the Version below in sync with ./Text/Regex/Posix.hs value
 -- getVersion_Text_Regex_Posix :: Version
-Version:                0.95.0
+Version:                0.95.1
 Cabal-Version:          >=1.2
 Build-Type:             Custom
 License:                BSD3
@@ -19,6 +19,7 @@
 Build-Type:             Simple
 Extra-Source-Files:     cbits/engine.c cbits/cclass.h cbits/cname.h
                         cbits/regex2.h cbits/regex.h cbits/utils.h
+                        c-finalizer/myfree.h c-finalizer/myfree.c
 
 flag newBase
   description: Choose base >= 4
@@ -56,6 +57,8 @@
       Build-Depends:      regex-base >= 0.93, base < 3.0
       Extensions:         MultiParamTypeClasses, FunctionalDependencies, CPP
 
+  C-Sources:            c-finalizer/myfree.c
+  Include-Dirs:         c-finalizer
   if !os(windows)
     CC-Options:           -DHAVE_REGEX_H
   else
