diff --git a/Hs2lib.cabal b/Hs2lib.cabal
--- a/Hs2lib.cabal
+++ b/Hs2lib.cabal
@@ -1,5 +1,5 @@
 Name:           Hs2lib
-Version:        0.5.1
+Version:        0.5.2
 Cabal-Version:  >= 1.10
 Build-Type:     Custom
 License:        BSD3
diff --git a/LIMITS.txt b/LIMITS.txt
--- a/LIMITS.txt
+++ b/LIMITS.txt
@@ -1,3 +1,7 @@
+Version 0.5.2
+ - No longer frees Strings, in order to prevent heap corruptions on calls
+   from C#.
+
 Version 0.5.1
  - Library bug fix which cauzed an error in marshalling
 
diff --git a/WinDll/CodeGen/C.hs b/WinDll/CodeGen/C.hs
--- a/WinDll/CodeGen/C.hs
+++ b/WinDll/CodeGen/C.hs
@@ -71,8 +71,10 @@
                                     else []
                      debugdefs = if debugging session 
                                     then case callconv of
-                                           StdCall -> [HaskellExport callconv ann $ Export "Ex.freeS" "freeS" ftType ftType modnm]
-                                           CCall   -> [HaskellExport callconv ann $ Export "Ex.freeC" "freeC" ftType ftType modnm]
+                                            StdCall -> [HaskellExport callconv ann $ Export "Ex.freeS"   "freeS"   ftType ftType modnm
+                                                       ,HaskellExport callconv ann $ Export "Ex.recordS" "recordS" ftType ftType modnm]
+                                            CCall   -> [HaskellExport callconv ann $ Export "Ex.freeC"   "freeC"   ftType ftType modnm
+                                                       ,HaskellExport callconv ann $ Export "Ex.recordS" "recordS" ftType ftType modnm]
                                     else []
                  
                  inform _detail "Creating export definition file"
diff --git a/WinDll/CodeGen/CSharp/CSharp.hs b/WinDll/CodeGen/CSharp/CSharp.hs
--- a/WinDll/CodeGen/CSharp/CSharp.hs
+++ b/WinDll/CodeGen/CSharp/CSharp.hs
@@ -71,8 +71,10 @@
                                      else []
                       debugdefs = if debugging session 
                                      then case callconv of
-                                            StdCall -> [HaskellExport callconv ann $ Export "Ex.freeS" "freeS" ftType ftType modnm]
-                                            CCall   -> [HaskellExport callconv ann $ Export "Ex.freeC" "freeC" ftType ftType modnm]
+                                            StdCall -> [HaskellExport callconv ann $ Export "Ex.freeS"   "freeS"   ftType ftType modnm
+                                                       ,HaskellExport callconv ann $ Export "Ex.recordS" "recordS" ftType ftType modnm]
+                                            CCall   -> [HaskellExport callconv ann $ Export "Ex.freeC"   "freeC"   ftType ftType modnm
+                                                       ,HaskellExport callconv ann $ Export "Ex.recordS" "recordS" ftType ftType modnm]
                                      else []
                  
                   inform _detail "Creating C# structures & function header file"
diff --git a/WinDll/Debug/Exports.xhs b/WinDll/Debug/Exports.xhs
--- a/WinDll/Debug/Exports.xhs
+++ b/WinDll/Debug/Exports.xhs
@@ -26,8 +26,17 @@
 foreign export stdcall "freeS" freeS :: Ptr () -> IO ()
 foreign export ccall "freeC" freeC :: Ptr () -> IO ()
 
+foreign export stdcall "recordS" freeS :: Ptr () -> IO ()
+foreign export ccall "recordC" freeC :: Ptr () -> IO ()
+
 freeS :: Ptr () -> IO ()
 freeS ptr = F.freeUnknown "[External Source]" ptr G.free
 
 freeC :: Ptr () -> IO ()
-freeC ptr = F.freeUnknown "[External Source]" ptr G.free
+freeC ptr = F.freeUnknown "[External Source]" ptr G.free
+
+recordS :: Ptr () -> IO ()
+recordS ptr = F.freeUnknown "[External Source]" ptr (const (return ()))
+
+recordC :: Ptr () -> IO ()
+recordC ptr = F.freeUnknown "[External Source]" ptr (const (return ()))
diff --git a/WinDll/Lib/NativeMapping_Base.cpphs b/WinDll/Lib/NativeMapping_Base.cpphs
--- a/WinDll/Lib/NativeMapping_Base.cpphs
+++ b/WinDll/Lib/NativeMapping_Base.cpphs
@@ -244,7 +244,7 @@
     toNative   = RECORDM(__FILE__, __LINE__, "newCWString" , newCWString)
     fromNative _ST_ ptr = do {(RECORD( __FILE__, __LINE__, "peekCWString", id)) _ST_ ptr;
                               str <- peekCWString ptr;
-                              freeFFI _ST_ "" ptr;
+                              -- freeFFI _ST_ "" ptr;
                               return str;}
                         
     freeFFI    = FREE(   __FILE__, __LINE__, "freeCWString", F.free)
diff --git a/WinDll/Version/Hs2lib.hs b/WinDll/Version/Hs2lib.hs
--- a/WinDll/Version/Hs2lib.hs
+++ b/WinDll/Version/Hs2lib.hs
@@ -19,7 +19,7 @@
 
 -- | Version Number
 verNum :: [Int]
-verNum = [0,5,1]
+verNum = [0,5,2]
 
 -- | Version string
 verStr :: String
