diff --git a/csrc/codec.c b/csrc/codec.c
--- a/csrc/codec.c
+++ b/csrc/codec.c
@@ -1179,7 +1179,8 @@
     int res = 0;
 
     for(i = 0, *dstlen = 0; i < srclen && *dstlen < od; i++, (*dstlen)++) {
-        if((33 <= src[i] && src[i] <= 60) ||
+        if((9 == src[i]) ||
+            (32 <= src[i] && src[i] <= 60) ||
             (62 <= src[i] && src[i] <= 126)) {
             dst[*dstlen] = src[i];
         } else if('=' == src[i]) {
diff --git a/sandi.cabal b/sandi.cabal
--- a/sandi.cabal
+++ b/sandi.cabal
@@ -1,5 +1,5 @@
 name: sandi
-version: 0.3.5
+version: 0.3.6
 license: BSD3
 license-file: LICENSE
 cabal-version: >= 1.8
diff --git a/test-src/Codec/Binary/QuotedPrintableTest.hs b/test-src/Codec/Binary/QuotedPrintableTest.hs
--- a/test-src/Codec/Binary/QuotedPrintableTest.hs
+++ b/test-src/Codec/Binary/QuotedPrintableTest.hs
@@ -20,11 +20,14 @@
 case_enc_foobar = do
     BS.empty          @=? QP.encode BS.empty
     BSC.pack "foobar" @=? QP.encode (BSC.pack "foobar")
+    BSC.pack "foo=20bar" @=? QP.encode (BSC.pack "foo bar")
 
 case_dec_foobar :: IO ()
 case_dec_foobar = do
     Right BS.empty            @=? QP.decode BS.empty
     Right (BSC.pack "foobar") @=? QP.decode (BSC.pack "foobar")
+    Right (BSC.pack "foo bar") @=? QP.decode (BSC.pack "foo bar")
+    Right (BSC.pack "foo bar") @=? QP.decode (BSC.pack "foo=20bar")
 
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ QP.decode $ QP.encode $ BS.pack ws)
