diff --git a/ndb/include/kernel/signaldata/SignalData.hpp b/ndb/include/kernel/signaldata/SignalData.hpp
index f9d3a6faa649f6c5039ef2f8e45805d7e5d13183..b0cfbc1540c7b7f1764cdb1f19f4266274a8b168 100644
--- a/ndb/include/kernel/signaldata/SignalData.hpp
+++ b/ndb/include/kernel/signaldata/SignalData.hpp
@@ -215,5 +215,6 @@ GSN_PRINT_SIGNATURE(printSCAN_FRAGREQ);
 
 GSN_PRINT_SIGNATURE(printCONTINUEB_NDBFS);
 GSN_PRINT_SIGNATURE(printCONTINUEB_DBDIH);
+GSN_PRINT_SIGNATURE(printSTART_FRAG_REQ);
 
 #endif
diff --git a/ndb/include/kernel/signaldata/StartFragReq.hpp b/ndb/include/kernel/signaldata/StartFragReq.hpp
index ec05c1ee366ddc465063337b26b4f8febd88501e..ab17a14719509b5163eeb83f754ff5bb0d6bc120 100644
--- a/ndb/include/kernel/signaldata/StartFragReq.hpp
+++ b/ndb/include/kernel/signaldata/StartFragReq.hpp
@@ -32,6 +32,8 @@ class StartFragReq {
 public:
   STATIC_CONST( SignalLength = 19 );
 
+  friend bool printSTART_FRAG_REQ(FILE *, const Uint32 *, Uint32, Uint16);
+  
 private:
   Uint32 userPtr;
   Uint32 userRef;
diff --git a/ndb/src/common/debugger/EventLogger.cpp b/ndb/src/common/debugger/EventLogger.cpp
index 979453946905e7cf78a936811832f0b0e4f34058..f7cef644c6470b9bcbb46b8d575b250f1b879a42 100644
--- a/ndb/src/common/debugger/EventLogger.cpp
+++ b/ndb/src/common/debugger/EventLogger.cpp
@@ -585,11 +585,13 @@ EventLogger::getText(char * m_text, size_t m_text_len,
     BaseString::snprintf(m_text, 
 	       m_text_len, 
 	       "%sTable ID = %u, fragment ID = %u has completed LCP "
-	       "on Node %u", 
+	       "on Node %u maxGciStarted: %d maxGciCompleted: %d", 
 	       theNodeId,
 	       theData[2], 
 	       theData[3], 
-	       theData[1]);
+	       theData[1],
+	       theData[4],
+	       theData[5]);
     break;
   case EventReport::TransReportCounters:
     // -------------------------------------------------------------------  
diff --git a/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp b/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp
index a4cee38e06f929591a3b0185b486deebb628a0f3..bd1dff074f964aa25e1556db332f8d931a6a8858 100644
--- a/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp
+++ b/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp
@@ -195,6 +195,7 @@ SignalDataPrintFunctions[] = {
   ,{ GSN_ACC_LOCKREQ, printACC_LOCKREQ }
   ,{ GSN_LQH_TRANSCONF, printLQH_TRANSCONF }
   ,{ GSN_SCAN_FRAGREQ, printSCAN_FRAGREQ }
+  ,{ GSN_START_FRAGREQ, printSTART_FRAG_REQ }
   ,{ 0, 0 }
 };
 
diff --git a/ndb/src/common/debugger/signaldata/StartRec.cpp b/ndb/src/common/debugger/signaldata/StartRec.cpp
index 482e3cb072856f54d657113935f236b30591f7de..54830e533c5df0ee76c9769d6ac3c9ffff5edc37 100644
--- a/ndb/src/common/debugger/signaldata/StartRec.cpp
+++ b/ndb/src/common/debugger/signaldata/StartRec.cpp
@@ -17,6 +17,7 @@
 
 #include <RefConvert.hpp>
 #include <signaldata/StartRec.hpp>
+#include <signaldata/StartFragReq.hpp>
 
 bool
 printSTART_REC_REQ(FILE * output, 
@@ -50,3 +51,27 @@ printSTART_REC_CONF(FILE * output,
 
   return true;
 }
+
+bool 
+printSTART_FRAG_REQ(FILE * output, 
+		    const Uint32 * theData, 
+		    Uint32 len, 
+		    Uint16 recBlockNo)
+{
+  StartFragReq* sig = (StartFragReq*)theData;
+
+  fprintf(output, " table: %d frag: %d lcpId: %d lcpNo: %d #nodes: %d \n",
+	  sig->tableId, sig->fragId, sig->lcpId, sig->lcpNo, 
+	  sig->noOfLogNodes);
+
+  for(Uint32 i = 0; i<sig->noOfLogNodes; i++)
+  {
+    fprintf(output, " (node: %d startGci: %d lastGci: %d)",
+	    sig->lqhLogNode[i],
+	    sig->startGci[i],
+	    sig->lastGci[i]);
+  }
+    
+  fprintf(output, "\n");
+  return true; 
+}
diff --git a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
index 669be2b48f05f1a5620988236466410628a65109..ca066b588e723685b2e9564ea23eb921c68d829f 100644
--- a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
+++ b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
@@ -9640,6 +9640,9 @@ void Dbdih::execLCP_FRAG_REP(Signal* signal)
   }
 
   bool tableDone = reportLcpCompletion(lcpReport);
+  
+  Uint32 started = lcpReport->maxGciStarted;
+  Uint32 completed = lcpReport->maxGciCompleted;
 
   if(tableDone){
     jam();
@@ -9673,7 +9676,9 @@ void Dbdih::execLCP_FRAG_REP(Signal* signal)
   signal->theData[1] = nodeId;
   signal->theData[2] = tableId;
   signal->theData[3] = fragId;
-  sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB);
+  signal->theData[4] = started;
+  signal->theData[5] = completed;
+  sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 6, JBB);
 #endif
   
   bool ok = false;
@@ -10790,7 +10795,9 @@ void Dbdih::findMinGci(ReplicaRecordPtr fmgReplicaPtr,
   lcpNo = fmgReplicaPtr.p->nextLcp;
   do {
     ndbrequire(lcpNo < MAX_LCP_STORED);
-    if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID) {
+    if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID &&
+	fmgReplicaPtr.p->maxGciStarted[lcpNo] <= coldgcp)
+    {
       jam();
       keepGci = fmgReplicaPtr.p->maxGciCompleted[lcpNo];
       oldestRestorableGci = fmgReplicaPtr.p->maxGciStarted[lcpNo];
@@ -10798,7 +10805,6 @@ void Dbdih::findMinGci(ReplicaRecordPtr fmgReplicaPtr,
       return;
     } else {
       jam();
-      ndbrequire(fmgReplicaPtr.p->lcpStatus[lcpNo] == ZINVALID);
       if (fmgReplicaPtr.p->createGci[0] == fmgReplicaPtr.p->initialGci) {
         jam();
 	/*-------------------------------------------------------------------
diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index 93b122b9a9967dce5517b3ded43562dbed75b373..f0861d1f0ccba0288d7acbbaf1292f675460e895 100644
--- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -4404,7 +4404,7 @@ Dbtc::DIVER_node_fail_handling(Signal* signal, UintR Tgci)
    *------------------------------------------------------------------------*/
   tabortInd = ZFALSE;
   setupFailData(signal);
-  if (tabortInd == ZFALSE) {
+  if (false && tabortInd == ZFALSE) {
     jam();
     commitGciHandling(signal, Tgci);
     toCommitHandlingLab(signal);