diff --git a/storage/ndb/include/util/InputStream.hpp b/storage/ndb/include/util/InputStream.hpp
index 928b8ff9aba..4aabf2d1160 100644
--- a/storage/ndb/include/util/InputStream.hpp
+++ b/storage/ndb/include/util/InputStream.hpp
@@ -50,10 +50,14 @@ class SocketInputStream : public InputStream {
   NDB_SOCKET_TYPE m_socket;
   unsigned m_timeout_ms;
   bool m_startover;
+  bool m_timedout;
 public:
   SocketInputStream(NDB_SOCKET_TYPE socket, unsigned read_timeout_ms = 1000);
   virtual ~SocketInputStream() {}
   char* gets(char * buf, int bufLen);
+  bool timedout() { return m_timedout; };
+  void reset_timeout() { m_timedout= false; };
+
 };
 
 #endif
diff --git a/storage/ndb/include/util/OutputStream.hpp b/storage/ndb/include/util/OutputStream.hpp
index d56d04adc50..072d4288229 100644
--- a/storage/ndb/include/util/OutputStream.hpp
+++ b/storage/ndb/include/util/OutputStream.hpp
@@ -45,9 +45,12 @@ public:
 class SocketOutputStream : public OutputStream {
   NDB_SOCKET_TYPE m_socket;
   unsigned m_timeout_ms;
+  bool m_timedout;
 public:
   SocketOutputStream(NDB_SOCKET_TYPE socket, unsigned write_timeout_ms = 1000);
   virtual ~SocketOutputStream() {}
+  bool timedout() { return m_timedout; };
+  void reset_timeout() { m_timedout= false; };
 
   int print(const char * fmt, ...);
   int println(const char * fmt, ...);
diff --git a/storage/ndb/src/common/util/InputStream.cpp b/storage/ndb/src/common/util/InputStream.cpp
index 016985328a1..17703eb7e52 100644
--- a/storage/ndb/src/common/util/InputStream.cpp
+++ b/storage/ndb/src/common/util/InputStream.cpp
@@ -38,10 +38,13 @@ SocketInputStream::SocketInputStream(NDB_SOCKET_TYPE socket,
   : m_socket(socket) {
   m_startover= true;
   m_timeout_ms = read_timeout_ms;
+  m_timedout= false;
 }
 
 char*
 SocketInputStream::gets(char * buf, int bufLen) {
+  if(timedout())
+    return 0;
   assert(bufLen >= 2);
   int offset= 0;
   if(m_startover)
@@ -63,7 +66,10 @@ SocketInputStream::gets(char * buf, int bufLen) {
   m_startover= true;
 
   if(res == -1)
+  {
+    m_timedout= true;
     return 0;
+  }
 
   return buf;
 }
diff --git a/storage/ndb/src/common/util/OutputStream.cpp b/storage/ndb/src/common/util/OutputStream.cpp
index 99216ba5a28..ebc352b1b50 100644
--- a/storage/ndb/src/common/util/OutputStream.cpp
+++ b/storage/ndb/src/common/util/OutputStream.cpp
@@ -45,21 +45,38 @@ SocketOutputStream::SocketOutputStream(NDB_SOCKET_TYPE socket,
 				       unsigned write_timeout_ms){
   m_socket = socket;
   m_timeout_ms = write_timeout_ms;
+  m_timedout= false;
 }
 
 int
 SocketOutputStream::print(const char * fmt, ...){
   va_list ap;
+
+  if(timedout())
+    return -1;
+
   va_start(ap, fmt);
   const int ret = vprint_socket(m_socket, m_timeout_ms, fmt, ap);
   va_end(ap);
+
+  if (errno==ETIMEDOUT)
+    m_timedout= true;
+
   return ret;
 }
 int
 SocketOutputStream::println(const char * fmt, ...){
   va_list ap;
+
+  if(timedout())
+    return -1;
+
   va_start(ap, fmt);
   const int ret = vprintln_socket(m_socket, m_timeout_ms, fmt, ap);
   va_end(ap);
+
+  if (errno==ETIMEDOUT)
+    m_timedout= true;
+
   return ret;
 }
diff --git a/storage/ndb/src/mgmsrv/Services.cpp b/storage/ndb/src/mgmsrv/Services.cpp
index e55c4ec6349..0bbdf4a9e51 100644
--- a/storage/ndb/src/mgmsrv/Services.cpp
+++ b/storage/ndb/src/mgmsrv/Services.cpp
@@ -1641,7 +1641,12 @@ MgmApiSession::get_mgmd_nodeid(Parser_t::Context &ctx,
 			       Properties const &args)
 {
   m_output->println("get mgmd nodeid reply");
-  m_output->println("nodeid:%u",m_mgmsrv.getOwnNodeId());  
+  m_output->println("nodeid:%u",m_mgmsrv.getOwnNodeId());
+  if(ERROR_INSERTED(1))
+  {
+    NdbSleep_SecSleep(10);
+  }
+
   m_output->println("");
 }
 
diff --git a/storage/ndb/test/ndbapi/testMgm.cpp b/storage/ndb/test/ndbapi/testMgm.cpp
index 08b9305f13d..35ad6c73ec1 100644
--- a/storage/ndb/test/ndbapi/testMgm.cpp
+++ b/storage/ndb/test/ndbapi/testMgm.cpp
@@ -218,16 +218,12 @@ int runTestApiTimeout1(NDBT_Context* ctx, NDBT_Step* step)
   ndb_mgm_set_connectstring(h, mgm);
   ndb_mgm_connect(h,0,0,0);
 
-  ndbout << "Connected" << endl;
-
   if(ndb_mgm_check_connection(h) < 0)
   {
     result= NDBT_FAILED;
     goto done;
   }
 
-  ndbout << "Checked Connection" << endl;
-
   ndb_mgm_reply reply;
   reply.return_code= 0;
 
@@ -238,9 +234,7 @@ int runTestApiTimeout1(NDBT_Context* ctx, NDBT_Step* step)
     goto done;
   }
 
-  ndbout << "Inserted session error" << endl;
-
-  ndb_mgm_set_timeout(h,1000,1000);
+  ndb_mgm_set_timeout(h,2500);
 
   cc= ndb_mgm_check_connection(h);
   if(cc < 0)
@@ -248,7 +242,29 @@ int runTestApiTimeout1(NDBT_Context* ctx, NDBT_Step* step)
   else
     result= NDBT_FAILED;
 
-  ndbout << "Tried check connection with result: " << cc << endl;
+  ndbout << "test 2" << endl;
+  ndb_mgm_connect(h,0,0,0);
+
+  cc= ndb_mgm_get_mgmd_nodeid(h);
+  if(cc==0)
+    result= NDBT_OK;
+  else
+    result= NDBT_FAILED;
+
+  if(ndb_mgm_insert_error(h, 3, 0, &reply)< 0)
+  {
+    ndbout << "failed to remove inserted error " << endl;
+    result= NDBT_FAILED;
+    goto done;
+  }
+
+  cc= ndb_mgm_get_mgmd_nodeid(h);
+  ndbout << "got node id: " << cc << endl;
+  if(cc==0)
+    result= NDBT_FAILED;
+  else
+    result= NDBT_OK;
+
 done:
   ndb_mgm_disconnect(h);
   ndb_mgm_destroy_handle(&h);