diff --git a/moesocks.cabal b/moesocks.cabal
--- a/moesocks.cabal
+++ b/moesocks.cabal
@@ -1,6 +1,6 @@
 name:               moesocks
 category:           Network
-version:            0.1.0.12
+version:            0.1.0.13
 license:            Apache-2.0
 synopsis:           A functional firewall killer
 description:        A socks5 proxy using the client / server architecture.
diff --git a/readme.md b/readme.md
--- a/readme.md
+++ b/readme.md
@@ -23,6 +23,7 @@
 * IPv6
 * Socks4 / Socks4a
 * UDP over Socks5
+* Four times slower then original Python's implementation
 
 Planning features
 ------------------
diff --git a/src/Network/MoeSocks/Helper.hs b/src/Network/MoeSocks/Helper.hs
--- a/src/Network/MoeSocks/Helper.hs
+++ b/src/Network/MoeSocks/Helper.hs
@@ -337,6 +337,8 @@
   _produce 0 `onException` _shutdown
   pure ()
 
+  
+
 consumeLoop :: String -> Timeout -> Maybe Double ->
                 Socket -> TBQueue (Maybe ByteString) -> IO ()
 consumeLoop aID aTimeout aThrottle aSocket aTBQueue = do
@@ -372,15 +374,10 @@
         case _r of
           Nothing -> () <$ _shutdown
           Just _data -> do
-                          _len <- timeoutFor aID aTimeout - send aSocket _data 
-
-                          when (_len < S.length _data) - do
-                            atomically - unGetTBQueue aTBQueue -
-                                            Just - S.drop _len _data
-                            
+                          timeoutFor aID aTimeout - sendAll aSocket _data
                           yield
                           _consume - 
-                            _bytesSent + _len
+                            _bytesSent + S.length _data
   
   _consume 0 `onException` _shutdown
   pure ()
@@ -392,32 +389,6 @@
 setSocketCloseOnExec :: Socket -> IO ()
 setSocketCloseOnExec aSocket =
     setFdOption (fromIntegral $ fdSocket aSocket) CloseOnExec True
-
-
-readAll :: TBQueue (Maybe ByteString) -> STM (Maybe [ByteString])
-readAll aTBQueue = do
-  _r <- readTBQueue aTBQueue
-  case _r of
-    Nothing -> pure Nothing
-    Just _b -> do
-                fmap (Just . reverse) - readMore [_b] aTBQueue
-
-  where 
-    readMore :: [ByteString] -> TBQueue (Maybe ByteString) -> STM [ByteString]
-    readMore _acc _q = do
-      _empty <- isEmptyTBQueue _q 
-      if _empty
-        then pure - _acc
-        else 
-          do
-            _more <- readTBQueue _q 
-            case _more of
-              Nothing -> do
-                            unGetTBQueue _q Nothing
-                            pure - _acc
-              Just _r -> readMore (_r : _acc) _q
-              
-
 
 
 tryIO :: String -> IO a -> IO (Either IOException a)
