diff --git a/storage/ndb/include/kernel/signaldata/SumaImpl.hpp b/storage/ndb/include/kernel/signaldata/SumaImpl.hpp
index 2ed9d8cddc6..94775a5f3f4 100644
--- a/storage/ndb/include/kernel/signaldata/SumaImpl.hpp
+++ b/storage/ndb/include/kernel/signaldata/SumaImpl.hpp
@@ -119,7 +119,8 @@ struct SubStartRef {
     Undefined = 1,
     NF_FakeErrorREF = 11,
     Busy = 701,
-    NotMaster = 702
+    NotMaster = 702,
+    PartiallyConnected = 1421
   };
 
   STATIC_CONST( SignalLength = 7 );
diff --git a/storage/ndb/src/kernel/blocks/suma/Suma.cpp b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
index 6de0a00d844..b8cc438f514 100644
--- a/storage/ndb/src/kernel/blocks/suma/Suma.cpp
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
@@ -2396,6 +2396,16 @@ Suma::execSUB_START_REQ(Signal* signal){
     sendSubStartRef(signal, 1412);
     DBUG_VOID_RETURN;
   }
+
+  if (c_startup.m_restart_server_node_id == 0 && 
+      !c_connected_nodes.get(refToNode(subscriberRef)))
+    
+  {
+    jam();
+    sendSubStartRef(signal, SubStartRef::PartiallyConnected);
+    return;
+  }
+  
   DBUG_PRINT("info",("c_subscriberPool  size: %d free: %d",
 		     c_subscriberPool.getSize(),
 		     c_subscriberPool.getNoOfFree()));
diff --git a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
index c7221b88132..00acfe62ad9 100644
--- a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
+++ b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
@@ -983,7 +983,7 @@ NdbEventOperationImpl::printAll()
 NdbEventBuffer::NdbEventBuffer(Ndb *ndb) :
   m_system_nodes(ndb->theImpl->theNoOfDBnodes),
   m_ndb(ndb),
-  m_latestGCI(0),
+  m_latestGCI(0), m_latest_complete_GCI(0),
   m_total_alloc(0),
   m_free_thresh(10),
   m_min_free_thresh(10),
@@ -1475,7 +1475,7 @@ NdbEventBuffer::execSUB_GCP_COMPLETE_REP(const SubGcpCompleteRep * const rep)
                                       , m_flush_gci
 #endif
                                       );
-
+  Uint32 idx = bucket - (Gci_container*)m_active_gci.getBase();
   if (unlikely(bucket == 0))
   {
     /**
@@ -1520,8 +1520,20 @@ NdbEventBuffer::execSUB_GCP_COMPLETE_REP(const SubGcpCompleteRep * const rep)
       }
       reportStatus();
       bzero(bucket, sizeof(Gci_container));
-      bucket->m_gci = gci + ACTIVE_GCI_DIRECTORY_SIZE;
-      bucket->m_gcp_complete_rep_count = m_system_nodes;
+      if (likely(idx < ACTIVE_GCI_DIRECTORY_SIZE))
+      {
+        /**
+         * Only "prepare" next GCI if we're in
+         *   the first 4 highest GCI's...else
+         *   this is somekind of "late" GCI...
+         *   which is only initialized to 0
+         *
+         *   This to make sure we dont get several buckets with same GCI
+         */
+        bucket->m_gci = gci + ACTIVE_GCI_DIRECTORY_SIZE;
+        bucket->m_gcp_complete_rep_count = m_system_nodes;
+      }
+      
       if(unlikely(m_latest_complete_GCI > gci))
       {
 	complete_outof_order_gcis();
diff --git a/storage/ndb/src/ndbapi/ndberror.c b/storage/ndb/src/ndbapi/ndberror.c
index b21b64156c8..df9778b1c73 100644
--- a/storage/ndb/src/ndbapi/ndberror.c
+++ b/storage/ndb/src/ndbapi/ndberror.c
@@ -491,6 +491,7 @@ ErrorBundle ErrorCodes[] = {
   { 1419, DMEC, SE, "Subscription already dropped" },
 
   { 1420, DMEC, TR, "Subscriber manager busy with adding/removing a table" },
+  { 1421, DMEC, SE, "Partially connected API in NdbOperation::execute()" },
 
   { 4004, DMEC, AE, "Attribute name or id not found in the table" },