diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+* 0.12.2.4 (2015-03-22)
+  - fixed bug that caused double quoted strings to appear in the output
+    of error messages produced by assertEqual and co.
+
 * 0.12.2.3 (2014-10-27)
   - fixed another lexing bug (issue #45)
 
diff --git a/HTF.cabal b/HTF.cabal
--- a/HTF.cabal
+++ b/HTF.cabal
@@ -1,5 +1,5 @@
 Name:             HTF
-Version:          0.12.2.3
+Version:          0.12.2.4
 License:          LGPL
 License-File:     LICENSE
 Copyright:        (c) 2005-2014 Stefan Wehr
diff --git a/Test/Framework/CmdlineOptions.hs b/Test/Framework/CmdlineOptions.hs
--- a/Test/Framework/CmdlineOptions.hs
+++ b/Test/Framework/CmdlineOptions.hs
@@ -36,6 +36,9 @@
 import Test.Framework.History
 import Test.Framework.Utils
 
+#ifndef MIN_VERSION_base
+#define MIN_VERSION_base(a,b,c) 1
+#endif
 #if !MIN_VERSION_base(4,6,0)
 import Prelude hiding ( catch )
 #endif
diff --git a/Test/Framework/Diff.hs b/Test/Framework/Diff.hs
--- a/Test/Framework/Diff.hs
+++ b/Test/Framework/Diff.hs
@@ -23,6 +23,10 @@
 
 ) where
 
+#ifndef MIN_VERSION_base
+#define MIN_VERSION_base(a,b,c) 1
+#endif
+
 #if !MIN_VERSION_base(4,6,0)
 import Prelude hiding (catch)
 #endif
diff --git a/Test/Framework/HUnitWrapper.hs b/Test/Framework/HUnitWrapper.hs
--- a/Test/Framework/HUnitWrapper.hs
+++ b/Test/Framework/HUnitWrapper.hs
@@ -106,8 +106,11 @@
   gsubAssert_, gsubAssertVerbose_,
 
   -- * HUnit re-exports
-  HU.HUnitFailure
+  HU.HUnitFailure,
 
+  -- * Tests (for internal use)
+  hunitWrapperTests
+
 ) where
 
 import Control.Exception
@@ -115,6 +118,7 @@
 import Control.Monad.Trans.Control
 import Control.Monad.Trans
 import qualified Test.HUnit.Lang as HU
+import qualified Test.HUnit.Base as HU
 
 import Data.List ( (\\) )
 import System.IO.Unsafe (unsafePerformIO)
@@ -127,6 +131,8 @@
 import Test.Framework.AssertM
 import Test.Framework.PrettyHaskell
 
+import qualified Data.Text as T
+
 -- WARNING: do not forget to add a preprocessor macro for new assertions!!
 
 {- |
@@ -234,16 +240,16 @@
 -- Equality Assertions
 --
 
-equalityFailedMessage :: String -> String -> ColorString
-equalityFailedMessage exp act =
-    let !diff = unsafePerformIO (diffWithSensibleConfig expP actP)
+equalityFailedMessage' :: String -> String -> ColorString
+equalityFailedMessage' exp act =
+    let !diff = unsafePerformIO (diffWithSensibleConfig exp act)
         expected_ = colorize firstDiffColor "* expected:"
         but_got_ = colorize secondDiffColor "* but got:"
         diff_ = colorize diffColor "* diff:"
-    in ("\n" +++ expected_ +++ " " +++ noColor (withNewline expP) +++
-        "\n" +++ but_got_ +++ "  " +++ noColor (withNewline actP) +++
+    in ("\n" +++ expected_ +++ " " +++ noColor (withNewline exp) +++
+        "\n" +++ but_got_ +++ "  " +++ noColor (withNewline act) +++
         "\n" +++ diff_ +++ "     " +++ newlineBeforeDiff diff +++ diff +++
-        (if stringEq
+        (if (exp == act)
          then "\nWARNING: strings are equal but actual values differ!"
          else ""))
     where
@@ -257,26 +263,33 @@
                       Just _ -> "\n"
                       Nothing -> ""
           in noColor' (f True) (f False)
-      (expP, actP, stringEq) =
+
+equalityFailedMessage :: (Show a) => a -> a -> ColorString
+equalityFailedMessage exp act =
+    equalityFailedMessage' expP actP
+    where
+      (expP, actP) =
           case (prettyHaskell' exp, prettyHaskell' act) of
-            (Nothing, _) -> (exp, act, exp == act)
-            (_, Nothing) -> (exp, act, exp == act)
+            (Nothing, _) -> (show exp, show act)
+            (_, Nothing) -> (show exp, show act)
             (Just expP, Just actP)
                 | expP == actP ->
-                    if exp /= act
-                       then (exp, act, exp == act)
-                       else (expP, actP, True)
-                | otherwise -> (expP, actP, False)
+                    (show exp, show act)
+                | otherwise -> (expP, actP)
 
-notEqualityFailedMessage :: String -> String
+notEqualityFailedMessage :: Show a => a -> String
 notEqualityFailedMessage exp =
-    (": Objects are equal\n" ++ prettyHaskell exp)
+    notEqualityFailedMessage' (prettyHaskell exp)
 
+notEqualityFailedMessage' :: String -> String
+notEqualityFailedMessage' exp =
+    (": Objects are equal\n" ++ exp)
+
 _assertEqual_ :: (Eq a, Show a, AssertM m)
                  => String -> Location -> String -> a -> a -> m ()
 _assertEqual_ name loc s expected actual =
     if expected /= actual
-       then do let x = equalityFailedMessage (show expected) (show actual)
+       then do let x = equalityFailedMessage expected actual
                genericAssertFailure__ loc (mkColorMsg name s $
                                            noColor ("failed at " ++ showLoc loc) +++ x)
        else return ()
@@ -290,7 +303,7 @@
                  => String -> Location -> String -> a -> a -> m ()
 _assertNotEqual_ name loc s expected actual =
     if expected == actual
-       then do let x = notEqualityFailedMessage (show expected)
+       then do let x = notEqualityFailedMessage expected
                genericAssertFailure__ loc (mkMsg name s $ "failed at " ++ showLoc loc ++ x)
        else return ()
 
@@ -303,7 +316,7 @@
                        => String -> Location -> String -> a -> a -> m ()
 _assertEqualPretty_ name loc s expected actual =
     if expected /= actual
-       then do let x = equalityFailedMessage (showPretty expected) (showPretty actual)
+       then do let x = equalityFailedMessage' (showPretty expected) (showPretty actual)
                genericAssertFailure__ loc (mkColorMsg name s
                                            (noColor ("failed at " ++ showLoc loc) +++ x))
        else return ()
@@ -317,7 +330,7 @@
                        => String -> Location -> String -> a -> a -> m ()
 _assertNotEqualPretty_ name loc s expected actual =
     if expected == actual
-       then do let x = notEqualityFailedMessage (showPretty expected)
+       then do let x = notEqualityFailedMessage' (showPretty expected)
                genericAssertFailure__ loc (mkMsg name s $ "failed at " ++ showLoc loc ++ x)
        else return ()
 DocAssertion(assertNotEqualPretty, Fail if the two values of type @a@ are equal.
@@ -360,7 +373,7 @@
         na = length actual
         in case () of
             _| ne /= na ->
-                 do let x = equalityFailedMessage (show expected) (show actual)
+                 do let x = equalityFailedMessage expected actual
                     genericAssertFailure__ loc (mkColorMsg name s
                                                 (noColor
                                                  ("failed at " ++ showLoc loc
@@ -369,7 +382,7 @@
                                                   (if maxLength x < 5000
                                                    then x else emptyColorString)))
              | not (unorderedEq expected actual) ->
-                 do let x = equalityFailedMessage (show expected) (show actual)
+                 do let x = equalityFailedMessage expected actual
                     genericAssertFailure__ loc (mkColorMsg "assertSetEqual" s
                                                 (noColor ("failed at " ++ showLoc loc) +++ x))
              | otherwise -> return ()
@@ -576,3 +589,23 @@
 -- | Generic variant of 'subAssertVerbose_'.
 gsubAssertVerbose_ :: AssertM m => Location -> String -> m a -> m a
 gsubAssertVerbose_ loc msg ass = genericSubAssert loc (Just msg) ass
+
+testEqualityFailedMessage1 :: IO ()
+testEqualityFailedMessage1 =
+    let msg = T.unpack $ renderColorString (equalityFailedMessage [1,2,3] [1,2,3,4]) False
+    in HU.assertEqual "error" msg exp
+    where
+      exp = "\n* expected: [1, 2, 3]\n* but got:  [1, 2, 3, 4]\n* " ++
+            "diff:     \nC <...[1, 2, 3...>C \nS , 4\nC ]<......>C "
+
+testEqualityFailedMessage2 :: IO ()
+testEqualityFailedMessage2 =
+    let msg = T.unpack $ renderColorString (equalityFailedMessage [1,2,3] [1,2,3]) False
+    in HU.assertEqual "error" msg exp
+    where
+      exp = "\n* expected: [1,2,3]\n* but got:  [1,2,3]\n* " ++
+            "diff:     \nWARNING: strings are equal but actual values differ!"
+
+hunitWrapperTests =
+    [("testEqualityFailedMessage1", testEqualityFailedMessage1)
+    ,("testEqualityFailedMessage2", testEqualityFailedMessage2)]
diff --git a/Test/Framework/XmlOutput.hs b/Test/Framework/XmlOutput.hs
--- a/Test/Framework/XmlOutput.hs
+++ b/Test/Framework/XmlOutput.hs
@@ -17,11 +17,16 @@
 
 import qualified Data.ByteString.Lazy as BSL
 import qualified Data.List as List
+
+#ifndef MIN_VERSION_containers
+#define MIN_VERSION_containers(a,b,c) 1
+#endif
 #if MIN_VERSION_containers(0,5,0)
 import qualified Data.Map.Strict as Map
 #else
 import qualified Data.Map as Map
 #endif
+
 import qualified Data.Text as T
 import Text.Printf
 
diff --git a/tests/MiscTest.hs b/tests/MiscTest.hs
--- a/tests/MiscTest.hs
+++ b/tests/MiscTest.hs
@@ -20,10 +20,11 @@
 import Test.Framework.History
 import Test.Framework.Preprocessor
 import Test.Framework.PrettyHaskell
+import Test.Framework.HUnitWrapper
 import System.Exit
 import Test.HUnit
 
-allTests = historyTests ++ preprocessorTests ++ prettyHaskellTests
+allTests = historyTests ++ preprocessorTests ++ prettyHaskellTests ++ hunitWrapperTests
 
 main :: IO ()
 main =
