diff --git a/src/face.cpp b/src/face.cpp
index 7d40345..fe509c4 100644
--- a/src/face.cpp
+++ b/src/face.cpp
@@ -86,6 +86,8 @@
   if (!m_transport->isConnected())
     m_transport->connect(*m_ioService,
                         bind(&Face::onReceiveElement, this, _1));
+  else if (!m_transport->isExpectingData())
+      m_transport->resume();
 
   shared_ptr<const Interest> interestToExpress(new Interest(interest));
 
@@ -194,7 +196,7 @@
   if (i != m_registeredPrefixTable.end())
     {
       m_fwController->selfDeregisterPrefix((*i)->getPrefix(),
-                                           bind(&Face::finalizeUnsertInterestFilter, this, i),
+                                           bind(&Face::finalizeUnsetInterestFilter, this, i),
                                            Controller::FailCallback());
     }
 
@@ -202,13 +204,13 @@
 }
 
 void
-Face::finalizeUnsertInterestFilter(RegisteredPrefixTable::iterator item)
+Face::finalizeUnsetInterestFilter(RegisteredPrefixTable::iterator item)
 {
   m_registeredPrefixTable.erase(item);
 
   if (!m_pitTimeoutCheckTimerActive && m_registeredPrefixTable.empty())
     {
-      m_transport->close();
+      m_transport->pause();
       if (!m_ioServiceWork) {
         m_processEventsTimeoutTimer->cancel();
       }
@@ -306,7 +308,7 @@
     m_pitTimeoutCheckTimerActive = false;
 
     if (m_registeredPrefixTable.empty()) {
-      m_transport->close();
+      m_transport->pause();
       if (!m_ioServiceWork) {
         m_processEventsTimeoutTimer->cancel();
       }
diff --git a/src/face.hpp b/src/face.hpp
index 7e14ffd..fcd9bd0 100644
--- a/src/face.hpp
+++ b/src/face.hpp
@@ -220,7 +220,7 @@
   asyncUnsetInterestFilter(const RegisteredPrefixId* registeredPrefixId);
 
   void
-  finalizeUnsertInterestFilter(RegisteredPrefixTable::iterator item);
+  finalizeUnsetInterestFilter(RegisteredPrefixTable::iterator item);
   
   void 
   onReceiveElement(const Block& wire);
diff --git a/src/transport/stream-transport.hpp b/src/transport/stream-transport.hpp
index f98b988..2ab4752 100644
--- a/src/transport/stream-transport.hpp
+++ b/src/transport/stream-transport.hpp
@@ -38,10 +38,7 @@
 
     if (!error)
       {
-        m_partialDataSize = 0;
-        m_socket.async_receive(boost::asio::buffer(m_inputBuffer, MAX_LENGTH), 0,
-                               bind(&impl::handle_async_receive, this, _1, _2));
-
+        resume();
         m_transport.m_isConnected = true;
 
         for (std::list<Block>::iterator i = m_sendQueue.begin(); i != m_sendQueue.end(); ++i)
@@ -111,6 +108,28 @@
   }
 
   void
+  pause()
+  {
+    if (m_transport.m_isExpectingData)
+      {
+        m_transport.m_isExpectingData = false;
+        m_socket.cancel();
+      }
+  }
+
+  void
+  resume()
+  {
+    if (!m_transport.m_isExpectingData)
+      {
+        m_transport.m_isExpectingData = true;
+        m_partialDataSize = 0;
+        m_socket.async_receive(boost::asio::buffer(m_inputBuffer, MAX_LENGTH), 0,
+                               bind(&impl::handle_async_receive, this, _1, _2));
+      }
+  }
+
+  void
   send(const Block& wire)
   {
     if (!m_transport.m_isConnected)
diff --git a/src/transport/tcp-transport.cpp b/src/transport/tcp-transport.cpp
index 24ec85c..b0935a4 100644
--- a/src/transport/tcp-transport.cpp
+++ b/src/transport/tcp-transport.cpp
@@ -21,13 +21,13 @@
 {
 }
 
-void 
+void
 TcpTransport::connect(boost::asio::io_service& ioService,
                       const ReceiveCallback& receiveCallback)
 {
   if (!static_cast<bool>(m_impl)) {
     Transport::connect(ioService, receiveCallback);
-  
+
     m_impl = make_shared<Impl> (boost::ref(*this),
                                 boost::ref(ioService));
   }
@@ -36,7 +36,7 @@
   m_impl->connect(query);
 }
 
-void 
+void
 TcpTransport::send(const Block& wire)
 {
   m_impl->send(wire);
@@ -48,10 +48,22 @@
   m_impl->send(header, payload);
 }
 
-void 
+void
 TcpTransport::close()
 {
   m_impl->close();
 }
 
+void
+TcpTransport::pause()
+{
+  m_impl->pause();
+}
+
+void
+TcpTransport::resume()
+{
+  m_impl->resume();
+}
+
 } // namespace ndn
diff --git a/src/transport/tcp-transport.hpp b/src/transport/tcp-transport.hpp
index b97e2a1..6795580 100644
--- a/src/transport/tcp-transport.hpp
+++ b/src/transport/tcp-transport.hpp
@@ -33,6 +33,12 @@
   virtual void 
   close();
 
+  virtual void
+  pause();
+
+  virtual void
+  resume();
+
   virtual void 
   send(const Block& wire);
 
diff --git a/src/transport/transport.hpp b/src/transport/transport.hpp
index c309288..da06da4 100644
--- a/src/transport/transport.hpp
+++ b/src/transport/transport.hpp
@@ -38,7 +38,7 @@
    * Close the connection.
    */
   virtual void 
-  close() =0;
+  close() = 0;
 
   /**
    * @brief Set data to the host
@@ -47,7 +47,7 @@
    * @param dataLength The number of bytes in data.
    */
   virtual void 
-  send(const Block& wire) =0;
+  send(const Block& wire) = 0;
 
   /**
    * @brief Alternative version of sending data, applying scatter/gather I/O concept
@@ -56,11 +56,20 @@
    * same message in datagram-oriented transports.
    */
   virtual void 
-  send(const Block& header, const Block& payload) =0;
+  send(const Block& header, const Block& payload) = 0;
+
+  virtual void
+  pause() = 0;
+
+  virtual void
+  resume() = 0;
   
   inline bool 
   isConnected();
 
+  inline bool
+  isExpectingData();
+
 protected:
   inline void
   receive(const Block& wire);
@@ -68,6 +77,7 @@
 protected:
   boost::asio::io_service* m_ioService;
   bool m_isConnected;
+  bool m_isExpectingData;
   ReceiveCallback m_receiveCallback;
 };
 
@@ -75,6 +85,7 @@
 Transport::Transport()
   : m_ioService(0)
   , m_isConnected(false)
+  , m_isExpectingData(false)
 {
 }
 
@@ -102,6 +113,12 @@
   return m_isConnected;
 }
 
+inline bool
+Transport::isExpectingData()
+{
+  return m_isExpectingData;
+}
+
 inline void
 Transport::receive(const Block& wire)
 {
diff --git a/src/transport/unix-transport.cpp b/src/transport/unix-transport.cpp
index f1e26ec..33fad1c 100644
--- a/src/transport/unix-transport.cpp
+++ b/src/transport/unix-transport.cpp
@@ -62,4 +62,16 @@
   m_impl->close();
 }
 
+void
+UnixTransport::pause()
+{
+  m_impl->pause();
+}
+
+void
+UnixTransport::resume()
+{
+  m_impl->resume();
+}
+
 }
diff --git a/src/transport/unix-transport.hpp b/src/transport/unix-transport.hpp
index 4a89bc8..f8114f5 100644
--- a/src/transport/unix-transport.hpp
+++ b/src/transport/unix-transport.hpp
@@ -36,6 +36,12 @@
   close();
 
   virtual void
+  pause();
+
+  virtual void
+  resume();
+
+  virtual void
   send(const Block& wire);
 
   virtual void
