diff --git a/ndb/src/kernel/blocks/dbtc/Dbtc.hpp b/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
index fb90ccc8c90c78b9f2cba649f82dad2f8065da2c..fbd181cae24c94ab07fcde78d47934d00cf437b0 100644
--- a/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
+++ b/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
@@ -585,34 +585,8 @@ public:
    */
   ArrayPool<TcIndexOperation> c_theIndexOperationPool;
 
-  /**
-   * The list of index operations
-   */  
-  ArrayList<TcIndexOperation> c_theIndexOperations;
-
   UintR c_maxNumberOfIndexOperations;   
 
-  struct TcSeizedIndexOperation {
-    /**
-     * Next ptr (used in pool/list)
-     */
-    union {
-      Uint32 nextPool;
-      Uint32 nextList;
-    };
-    /**
-     * Prev pointer (used in list)
-     */
-    Uint32 prevList;
-  };
-
-  /**
-   * Pool of seized index operations
-   */
-  ArrayPool<TcSeizedIndexOperation> c_theSeizedIndexOperationPool;
-
-  typedef Ptr<TcSeizedIndexOperation> TcSeizedIndexOperationPtr;
-
   /************************** API CONNECT RECORD ***********************
    * The API connect record contains the connection record to which the
    * application connects.  
@@ -650,7 +624,7 @@ public:
 
   struct ApiConnectRecord {
     ApiConnectRecord(ArrayPool<TcFiredTriggerData> & firedTriggerPool,
-		     ArrayPool<TcSeizedIndexOperation> & seizedIndexOpPool):
+		     ArrayPool<TcIndexOperation> & seizedIndexOpPool):
       theFiredTriggers(firedTriggerPool),
       isIndexOp(false),
       theSeizedIndexOperations(seizedIndexOpPool) 
@@ -763,7 +737,7 @@ public:
     UintR accumulatingIndexOp;
     UintR executingIndexOp;
     UintR tcIndxSendArray[6];
-    ArrayList<TcSeizedIndexOperation> theSeizedIndexOperations;
+    ArrayList<TcIndexOperation> theSeizedIndexOperations;
   };
   
   typedef Ptr<ApiConnectRecord> ApiConnectRecordPtr;
diff --git a/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp b/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp
index 59c8237f20a6fd853442a419891450a5eacc410a..f99b4bf15afe5d1ea54bec8c142a2222ba0e4c6a 100644
--- a/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp
+++ b/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp
@@ -65,7 +65,6 @@ void Dbtc::initData()
   c_theFiredTriggerPool.setSize(c_maxNumberOfFiredTriggers);
   c_theIndexPool.setSize(c_maxNumberOfIndexes);
   c_theIndexOperationPool.setSize(c_maxNumberOfIndexOperations);
-  c_theSeizedIndexOperationPool.setSize(c_maxNumberOfIndexOperations);
   c_theAttributeBufferPool.setSize(c_transactionBufferSpace);
   c_firedTriggerHash.setSize((c_maxNumberOfFiredTriggers+10)/10);
 }//Dbtc::initData()
@@ -85,7 +84,7 @@ void Dbtc::initRecords()
   for(unsigned i = 0; i<capiConnectFilesize; i++) {
     p = &apiConnectRecord[i];
     new (p) ApiConnectRecord(c_theFiredTriggerPool, 
-			     c_theSeizedIndexOperationPool);
+			     c_theIndexOperationPool);
   }
   // Init all fired triggers
   DLFifoList<TcFiredTriggerData> triggers(c_theFiredTriggerPool);
@@ -177,7 +176,6 @@ Dbtc::Dbtc(const class Configuration & conf):
   c_maxNumberOfFiredTriggers(0),
   c_theIndexes(c_theIndexPool),
   c_maxNumberOfIndexes(0),
-  c_theIndexOperations(c_theIndexOperationPool),
   c_maxNumberOfIndexOperations(0),
   m_commitAckMarkerHash(m_commitAckMarkerPool)
 {
diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index efd4c2a46d01291a60cf5f5110342c13ffa6d525..c1ce1613b35bcd67b99d6b9ae42dd58021d87a35 100644
--- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -11161,16 +11161,21 @@ void Dbtc::execTCINDXREQ(Signal* signal)
     jam();
     // This is a newly started transaction, clean-up
     releaseAllSeizedIndexOperations(regApiPtr);
+
+    regApiPtr->transid[0] = tcIndxReq->transId1;
+    regApiPtr->transid[1] = tcIndxReq->transId2;
   }//if
-  if (!seizeIndexOperation(regApiPtr, indexOpPtr)) {
+  ndbout_c("here");
+
+  if (ERROR_INSERTED(8036) || !seizeIndexOperation(regApiPtr, indexOpPtr)) {
     jam();
     // Failed to allocate index operation
     TcIndxRef * const tcIndxRef = (TcIndxRef *)signal->getDataPtrSend();
-
+    
     tcIndxRef->connectPtr = tcIndxReq->senderData;
     tcIndxRef->transId[0] = regApiPtr->transid[0];
     tcIndxRef->transId[1] = regApiPtr->transid[1];
-    tcIndxRef->errorCode = 4000;
+    tcIndxRef->errorCode = 288;
     sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal, 
 	       TcIndxRef::SignalLength, JBB);
     return;
@@ -11307,15 +11312,17 @@ void Dbtc::execINDXKEYINFO(Signal* signal)
   TcIndexOperationPtr indexOpPtr;
   TcIndexOperation* indexOp;
 
-  indexOpPtr.i = regApiPtr->accumulatingIndexOp;
-  indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
-  if (saveINDXKEYINFO(signal,
-                      indexOp, 
-                      src, 
-                      keyInfoLength)) {
-    jam();
-    // We have received all we need
-    readIndexTable(signal, regApiPtr, indexOp);
+  if((indexOpPtr.i = regApiPtr->accumulatingIndexOp) != RNIL)
+  {
+    indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
+    if (saveINDXKEYINFO(signal,
+			indexOp, 
+			src, 
+			keyInfoLength)) {
+      jam();
+      // We have received all we need
+      readIndexTable(signal, regApiPtr, indexOp);
+    }
   }
 }
 
@@ -11338,15 +11345,17 @@ void Dbtc::execINDXATTRINFO(Signal* signal)
   TcIndexOperationPtr indexOpPtr;
   TcIndexOperation* indexOp;
 
-  indexOpPtr.i = regApiPtr->accumulatingIndexOp;
-  indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
-  if (saveINDXATTRINFO(signal,
-                       indexOp, 
-                       src, 
-                       attrInfoLength)) {
-    jam();
-    // We have received all we need
-    readIndexTable(signal, regApiPtr, indexOp);
+  if((indexOpPtr.i = regApiPtr->accumulatingIndexOp) != RNIL)
+  {
+    indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
+    if (saveINDXATTRINFO(signal,
+			 indexOp, 
+			 src, 
+			 attrInfoLength)) {
+      jam();
+      // We have received all we need
+      readIndexTable(signal, regApiPtr, indexOp);
+    }
   }
 }
 
@@ -11371,7 +11380,7 @@ bool Dbtc::saveINDXKEYINFO(Signal* signal,
     releaseIndexOperation(apiConnectptr.p, indexOp);
     terrorCode = 4000;
     abortErrorLab(signal);
-    return true;
+    return false;
   }
   if (receivedAllINDXKEYINFO(indexOp) && receivedAllINDXATTRINFO(indexOp)) {
     jam();
@@ -11404,7 +11413,7 @@ bool Dbtc::saveINDXATTRINFO(Signal* signal,
     releaseIndexOperation(apiConnectptr.p, indexOp);
     terrorCode = 4000;
     abortErrorLab(signal);
-    return true;
+    return false;
   }
   if (receivedAllINDXKEYINFO(indexOp) && receivedAllINDXATTRINFO(indexOp)) {
     jam();
@@ -11464,7 +11473,7 @@ void Dbtc::execTCKEYCONF(Signal* signal)
 
   jamEntry();
   indexOpPtr.i = tcKeyConf->apiConnectPtr;
-  TcIndexOperation* indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
+  TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
   Uint32 confInfo = tcKeyConf->confInfo;
 
   /**
@@ -11553,7 +11562,7 @@ void Dbtc::execTCKEYREF(Signal* signal)
 
   jamEntry();
   indexOpPtr.i = tcKeyRef->connectPtr;
-  TcIndexOperation* indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
+  TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
   indexOpPtr.p = indexOp;
   if (!indexOp) {
     jam();    
@@ -11654,7 +11663,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
   jamEntry();
   TcIndexOperationPtr indexOpPtr;
   indexOpPtr.i = transIdAI->connectPtr;
-  TcIndexOperation* indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
+  TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
   indexOpPtr.p = indexOp;
   if (!indexOp) {
     jam();
@@ -11762,7 +11771,7 @@ void Dbtc::execTCROLLBACKREP(Signal* signal)
   jamEntry();
   TcIndexOperationPtr indexOpPtr;
   indexOpPtr.i = tcRollbackRep->connectPtr;
-  TcIndexOperation* indexOp = c_theIndexOperations.getPtr(indexOpPtr.i);
+  TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
   indexOpPtr.p = indexOp;
   tcRollbackRep =  (TcRollbackRep *)signal->getDataPtrSend();
   tcRollbackRep->connectPtr = indexOp->tcIndxReq.senderData;
@@ -12090,16 +12099,7 @@ void Dbtc::executeIndexOperation(Signal* signal,
 bool Dbtc::seizeIndexOperation(ApiConnectRecord* regApiPtr,
 			       TcIndexOperationPtr& indexOpPtr)
 {
-  bool seizeOk;
-
-  seizeOk = c_theIndexOperations.seize(indexOpPtr);
-  if (seizeOk) {
-    jam();
-    TcSeizedIndexOperationPtr seizedIndexOpPtr;
-    seizeOk &= regApiPtr->theSeizedIndexOperations.seizeId(seizedIndexOpPtr,
-							   indexOpPtr.i);
-  }
-  return seizeOk;
+  return regApiPtr->theSeizedIndexOperations.seize(indexOpPtr);
 }
 
 void Dbtc::releaseIndexOperation(ApiConnectRecord* regApiPtr,
@@ -12113,18 +12113,16 @@ void Dbtc::releaseIndexOperation(ApiConnectRecord* regApiPtr,
   indexOp->expectedTransIdAI = 0;
   indexOp->transIdAI.release();
   regApiPtr->theSeizedIndexOperations.release(indexOp->indexOpId);
-  c_theIndexOperations.release(indexOp->indexOpId);
 }
 
 void Dbtc::releaseAllSeizedIndexOperations(ApiConnectRecord* regApiPtr)
 {
-  TcSeizedIndexOperationPtr seizedIndexOpPtr;
+  TcIndexOperationPtr seizedIndexOpPtr;
 
   regApiPtr->theSeizedIndexOperations.first(seizedIndexOpPtr);
   while(seizedIndexOpPtr.i != RNIL) {
     jam();
-    TcIndexOperation* indexOp = 
-      c_theIndexOperations.getPtr(seizedIndexOpPtr.i);
+    TcIndexOperation* indexOp = seizedIndexOpPtr.p;
 
     indexOp->indexOpState = IOS_NOOP;
     indexOp->expectedKeyInfo = 0;
@@ -12133,7 +12131,6 @@ void Dbtc::releaseAllSeizedIndexOperations(ApiConnectRecord* regApiPtr)
     indexOp->attrInfo.release();
     indexOp->expectedTransIdAI = 0;
     indexOp->transIdAI.release();
-    c_theIndexOperations.release(seizedIndexOpPtr.i);  
     regApiPtr->theSeizedIndexOperations.next(seizedIndexOpPtr);    
   }
   regApiPtr->theSeizedIndexOperations.release();
diff --git a/ndb/src/kernel/error/ErrorReporter.cpp b/ndb/src/kernel/error/ErrorReporter.cpp
index 35cd3f099d941730e399930fe9d7dccaa1fcb206..38088fe8f3eef5803c4e96049893702370f349e2 100644
--- a/ndb/src/kernel/error/ErrorReporter.cpp
+++ b/ndb/src/kernel/error/ErrorReporter.cpp
@@ -130,7 +130,7 @@ ErrorReporter::formatMessage(ErrorCategory type,
 	   "Date/Time: %s\nType of error: %s\n"
 	   "Message: %s\nFault ID: %d\nProblem data: %s"
 	   "\nObject of reference: %s\nProgramName: %s\n"
-	   "ProcessID: %d\nTraceFile: %s\n***EOM***\n", 
+	   "ProcessID: %d\nTraceFile: %s\n%s\n***EOM***\n", 
 	   formatTimeStampString() , 
 	   errorType[type], 
 	   lookupErrorMessage(faultID),
@@ -139,7 +139,8 @@ ErrorReporter::formatMessage(ErrorCategory type,
 	   objRef, 
 	   my_progname, 
 	   processId, 
-	   theNameOfTheTraceFile ? theNameOfTheTraceFile : "<no tracefile>");
+	   theNameOfTheTraceFile ? theNameOfTheTraceFile : "<no tracefile>",
+		       NDB_VERSION_STRING);
 
   // Add trailing blanks to get a fixed lenght of the message
   while (strlen(messptr) <= MESSAGE_LENGTH-3){
diff --git a/ndb/src/ndbapi/NdbIndexOperation.cpp b/ndb/src/ndbapi/NdbIndexOperation.cpp
index 39da9c5f5d0b6cbedf576db8fd925a4737e68a55..c24e7db5942d7ee9af9bd80b46c650ca7d755300 100644
--- a/ndb/src/ndbapi/NdbIndexOperation.cpp
+++ b/ndb/src/ndbapi/NdbIndexOperation.cpp
@@ -752,5 +752,5 @@ NdbIndexOperation::receiveTCINDXREF( NdbApiSignal* aSignal)
   Uint32 errorCode = tcIndxRef->errorCode;
   theError.code = errorCode;
   theNdbCon->setOperationErrorCodeAbort(errorCode);
-  return theNdbCon->OpCompleteFailure(theNdbCon->m_abortOption);
+  return theNdbCon->OpCompleteFailure(AbortOnError);
 }//NdbIndexOperation::receiveTCINDXREF()
diff --git a/ndb/src/ndbapi/ndberror.c b/ndb/src/ndbapi/ndberror.c
index bbc82a213249fd210939b2fa63ca582772b5ba71..71b0ed6a82f3c104c6ae28d22da98c9b4a0cf4a4 100644
--- a/ndb/src/ndbapi/ndberror.c
+++ b/ndb/src/ndbapi/ndberror.c
@@ -169,7 +169,7 @@ ErrorBundle ErrorCodes[] = {
   { 4021, TR, "Out of Send Buffer space in NDB API" },
   { 4022, TR, "Out of Send Buffer space in NDB API" },
   { 4032, TR, "Out of Send Buffer space in NDB API" },
-
+  {  288, TR, "Out of index operations in transaction coordinator (increase MaxNoOfConcurrentIndexOperations)" },
   /**
    * InsufficientSpace
    */