diff --git a/mysql-test/t/ndb_restore.test b/mysql-test/t/ndb_restore.test
index 3c7b99da25a70e1ceb4c60e2804e26967d34a4af..0173fabd46f05f8105d7b756c1dbd43e32b2007a 100644
--- a/mysql-test/t/ndb_restore.test
+++ b/mysql-test/t/ndb_restore.test
@@ -214,4 +214,4 @@ drop table if exists t1_c,t2_c,t3_c,t4_c,t5_c,t6_c,t7_c,t8_c,t9_c;
 # Test BUG#10287
 #
 
---exec $NDB_TOOLS_DIR/ndb_select_all -d sys -D , SYSTAB_0 | grep 520093696
+--exec $NDB_TOOLS_DIR/ndb_select_all --no-defaults -d sys -D , SYSTAB_0 | grep 520093696
diff --git a/ndb/include/transporter/TransporterRegistry.hpp b/ndb/include/transporter/TransporterRegistry.hpp
index 363cdabe10ad619b14e04003641749278f04b250..1ae8a4068c431c6685ef123152a170aed06db66b 100644
--- a/ndb/include/transporter/TransporterRegistry.hpp
+++ b/ndb/include/transporter/TransporterRegistry.hpp
@@ -203,6 +203,13 @@ public:
   bool createSCITransporter(struct TransporterConfiguration * config);
   bool createSHMTransporter(struct TransporterConfiguration * config);
   bool createOSETransporter(struct TransporterConfiguration * config);
+
+  /**
+   * Get free buffer space
+   *
+   *   Get #free bytes in send buffer for <em>node</node>
+   */
+  Uint32 get_free_buffer(Uint32 node) const ;
   
   /**
    * prepareSend
diff --git a/ndb/src/common/transporter/SCI_Transporter.cpp b/ndb/src/common/transporter/SCI_Transporter.cpp
index 506140a887f027167a4a423c0e6d8a9ea345d7b2..c96f84a4f4fee8c769d9bca51996d265b881864f 100644
--- a/ndb/src/common/transporter/SCI_Transporter.cpp
+++ b/ndb/src/common/transporter/SCI_Transporter.cpp
@@ -1025,7 +1025,8 @@ SCI_Transporter::initSCI() {
   DBUG_RETURN(true);
 } 
  
- 
- 
- 
- 
+Uint32
+SCI_Transporter::get_free_buffer() const
+{
+  return (m_TargetSegm[m_ActiveAdapterId].writer)->get_free_buffer();
+}
diff --git a/ndb/src/common/transporter/SCI_Transporter.hpp b/ndb/src/common/transporter/SCI_Transporter.hpp
index 8d263f32a576a6461aa432943ecb7cb7f0471172..cb42e437118d39f22fcf3d040073da69a4a1bc97 100644
--- a/ndb/src/common/transporter/SCI_Transporter.hpp
+++ b/ndb/src/common/transporter/SCI_Transporter.hpp
@@ -133,7 +133,8 @@ public:
    * remote segment is mapped. Otherwize false. 
    */ 
   bool getConnectionStatus(); 
-   
+
+  virtual Uint32 get_free_buffer() const;   
 private: 
   SCI_Transporter(TransporterRegistry &t_reg,
                   const char *local_host,
diff --git a/ndb/src/common/transporter/SHM_Buffer.hpp b/ndb/src/common/transporter/SHM_Buffer.hpp
index f49b4fe73cbe2b50094ec8dc2695ac1d7e573def..27321a3191f46bb9345f4463916506e6091bccf6 100644
--- a/ndb/src/common/transporter/SHM_Buffer.hpp
+++ b/ndb/src/common/transporter/SHM_Buffer.hpp
@@ -157,6 +157,7 @@ public:
 
   inline Uint32 getWriteIndex() const { return m_writeIndex;}
   inline Uint32 getBufferSize() const { return m_bufferSize;}
+  inline Uint32 get_free_buffer() const;
   
   inline void copyIndexes(SHM_Writer * standbyWriter);
 
@@ -212,5 +213,21 @@ SHM_Writer::updateWritePtr(Uint32 sz){
   m_writeIndex = tWriteIndex;
   * m_sharedWriteIndex = tWriteIndex;
 }
+
+inline
+Uint32
+SHM_Writer::get_free_buffer() const
+{
+  Uint32 tReadIndex  = * m_sharedReadIndex;
+  Uint32 tWriteIndex = m_writeIndex;
+  
+  Uint32 free;
+  if(tReadIndex <= tWriteIndex){
+    free = m_bufferSize + tReadIndex - tWriteIndex;
+  } else {
+    free = tReadIndex - tWriteIndex;
+  }
+  return free;
+}
  
 #endif
diff --git a/ndb/src/common/transporter/SHM_Transporter.cpp b/ndb/src/common/transporter/SHM_Transporter.cpp
index e2d23cf94e27064b1abfaa162f52b31743d3b309..a225988d37f0aa191da9b6dc8d5fff9cf3111100 100644
--- a/ndb/src/common/transporter/SHM_Transporter.cpp
+++ b/ndb/src/common/transporter/SHM_Transporter.cpp
@@ -365,3 +365,9 @@ SHM_Transporter::doSend()
     kill(m_remote_pid, g_ndb_shm_signum);
   }
 }
+
+Uint32
+SHM_Transporter::get_free_buffer() const 
+{
+  return writer->get_free_buffer();
+}
diff --git a/ndb/src/common/transporter/SHM_Transporter.hpp b/ndb/src/common/transporter/SHM_Transporter.hpp
index 677bd6efc37064e7e6ce593ff9b41cc1ec2d51c2..e7a7622547140fb5d1748236e3c24cb735793a60 100644
--- a/ndb/src/common/transporter/SHM_Transporter.hpp
+++ b/ndb/src/common/transporter/SHM_Transporter.hpp
@@ -139,6 +139,8 @@ protected:
   int m_remote_pid;
   Uint32 m_last_signal;
   Uint32 m_signal_threshold;
+
+  virtual Uint32 get_free_buffer() const;
   
 private:
   bool _shmSegCreated;
diff --git a/ndb/src/common/transporter/SendBuffer.cpp b/ndb/src/common/transporter/SendBuffer.cpp
index 58cad96931f06084f8d0b59652bf167430383bf2..8f69eb4bd40932c46c2bbf9a5d044efb698efa9f 100644
--- a/ndb/src/common/transporter/SendBuffer.cpp
+++ b/ndb/src/common/transporter/SendBuffer.cpp
@@ -60,7 +60,7 @@ SendBuffer::bufferSize() {
 }
 
 Uint32
-SendBuffer::bufferSizeRemaining() {
+SendBuffer::bufferSizeRemaining() const {
   return (sizeOfBuffer - dataSize);
 }
 
diff --git a/ndb/src/common/transporter/SendBuffer.hpp b/ndb/src/common/transporter/SendBuffer.hpp
index 63a01f3de24dd80cdd589c8227297f202fe2e0dd..7ebeb6d890e3db0b727209a75f1710c94a15f65a 100644
--- a/ndb/src/common/transporter/SendBuffer.hpp
+++ b/ndb/src/common/transporter/SendBuffer.hpp
@@ -51,7 +51,7 @@ public:
   bool initBuffer(Uint32 aRemoteNodeId);  
 
   // Number of bytes remaining in the buffer
-  Uint32 bufferSizeRemaining();
+  Uint32 bufferSizeRemaining() const;
 
   // Number of bytes of data in the buffer 
   int bufferSize(); 
diff --git a/ndb/src/common/transporter/TCP_Transporter.cpp b/ndb/src/common/transporter/TCP_Transporter.cpp
index fd71cf71cd920672be4a2621cbdbe7254139b877..5db12d3985cb8dc7c15d98a8683c67bda0e371d9 100644
--- a/ndb/src/common/transporter/TCP_Transporter.cpp
+++ b/ndb/src/common/transporter/TCP_Transporter.cpp
@@ -253,6 +253,11 @@ TCP_Transporter::sendIsPossible(struct timeval * timeout) {
 #endif
 }
 
+Uint32
+TCP_Transporter::get_free_buffer() const 
+{
+  return m_sendBuffer.bufferSizeRemaining();
+}
 
 Uint32 *
 TCP_Transporter::getWritePtr(Uint32 lenBytes, Uint32 prio){
diff --git a/ndb/src/common/transporter/TCP_Transporter.hpp b/ndb/src/common/transporter/TCP_Transporter.hpp
index 9cd174150c11e0ace0c5614450c41ff1a2637f71..df4149531b4961df1861c625ef5a73485dd6d07e 100644
--- a/ndb/src/common/transporter/TCP_Transporter.hpp
+++ b/ndb/src/common/transporter/TCP_Transporter.hpp
@@ -101,6 +101,7 @@ private:
    */
   virtual void updateReceiveDataPtr(Uint32 bytesRead);
 
+  virtual Uint32 get_free_buffer() const;
 protected:
   /**
    * Setup client/server and perform connect/accept
diff --git a/ndb/src/common/transporter/Transporter.hpp b/ndb/src/common/transporter/Transporter.hpp
index 53414f1179d3b1956edfde3f00d422d5febd7cda..8c5e96226a3350fd462aa4d6c65a57ffb8a0fa6a 100644
--- a/ndb/src/common/transporter/Transporter.hpp
+++ b/ndb/src/common/transporter/Transporter.hpp
@@ -86,6 +86,8 @@ public:
       m_socket_client->set_port(port);
   };
 
+  virtual Uint32 get_free_buffer() const = 0;
+  
 protected:
   Transporter(TransporterRegistry &,
 	      TransporterType,
diff --git a/ndb/src/common/transporter/TransporterRegistry.cpp b/ndb/src/common/transporter/TransporterRegistry.cpp
index f331b1660c1d4fc3dda48e49e4029cf13af71350..5ffd3ac334ee833a19d2c49f5352ef3b47efc3f5 100644
--- a/ndb/src/common/transporter/TransporterRegistry.cpp
+++ b/ndb/src/common/transporter/TransporterRegistry.cpp
@@ -558,6 +558,18 @@ TransporterRegistry::removeTransporter(NodeId nodeId) {
   theTransporters[nodeId] = NULL;        
 }
 
+Uint32
+TransporterRegistry::get_free_buffer(Uint32 node) const
+{
+  Transporter *t;
+  if(likely((t = theTransporters[node]) != 0))
+  {
+    return t->get_free_buffer();
+  }
+  return 0;
+}
+
+
 SendStatus
 TransporterRegistry::prepareSend(const SignalHeader * const signalHeader, 
 				 Uint8 prio,
diff --git a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
index b2ed7acd3473142ed47e9054ba60946d6a7c70b6..03309f3ac674616b6ab4863515428303d62456b3 100644
--- a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
+++ b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
@@ -5072,6 +5072,7 @@ Dbdih::invalidateNodeLCP(Signal* signal, Uint32 nodeId, TabRecordPtr tabPtr)
          * And reset nextLcp
          */
         replicaPtr.p->nextLcp = 0;
+        replicaPtr.p->noCrashedReplicas = 0;
       }//if
     }//for
   }//for
diff --git a/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp b/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
index 6527864135bca38fd75709d0e082c16570e02130..6a478bea917b3ca257828524efd6c6c1be5c7398 100644
--- a/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
+++ b/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
@@ -133,6 +133,9 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
                              Uint32 ToutBufIndex,
                              const Operationrec * const regOperPtr)
 {
+  if(ToutBufIndex == 0)
+    return;
+
   const BlockReference recBlockref = regOperPtr->recBlockref;
   const Uint32 sig0 = regOperPtr->tcOperationPtr;
   const Uint32 sig1 = regOperPtr->transid1;
diff --git a/ndb/src/mgmsrv/ConfigInfo.cpp b/ndb/src/mgmsrv/ConfigInfo.cpp
index 67bf09fab108824bf928390ede1e5f12482796f3..b1fe073561248154531b061dfffc4e6d20cc0b88 100644
--- a/ndb/src/mgmsrv/ConfigInfo.cpp
+++ b/ndb/src/mgmsrv/ConfigInfo.cpp
@@ -1668,7 +1668,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
     false,
     ConfigInfo::CI_INT,
     "256K",
-    "16K",
+    "64K",
     STR_VALUE(MAX_INT_RNIL) },
 
   {
@@ -1856,7 +1856,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
     false,
     ConfigInfo::CI_INT,
     "1M",
-    "4K",
+    "64K",
     STR_VALUE(MAX_INT_RNIL) },
 
   {
diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
index baf5c7e5c836c234decc83b431c9478539e4e183..28e585b65b868ffc9970ae47dbf61c78b57953a0 100644
--- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp
+++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
@@ -1649,7 +1649,11 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
     abort();
   }
   
-  int distKeys= impl.m_noOfDistributionKeys;
+  int distKeys= impl.m_noOfDistributionKeys && 
+    impl.m_noOfDistributionKeys < impl.m_noOfKeys;
+  
+  assert(distKeys == 0 || distKeys == 1);
+
   for(i = 0; i<sz; i++){
     const NdbColumnImpl * col = impl.m_columns[i];
     if(col == 0)
@@ -1661,7 +1665,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
     tmpAttr.AttributeId = i;
     tmpAttr.AttributeKeyFlag = col->m_pk;
     tmpAttr.AttributeNullableFlag = col->m_nullable;
-    tmpAttr.AttributeDKey = col->m_distributionKey;
+    tmpAttr.AttributeDKey = distKeys * col->m_distributionKey;
 
     tmpAttr.AttributeExtType = (Uint32)col->m_type;
     tmpAttr.AttributeExtPrecision = ((unsigned)col->m_precision & 0xFFFF);
diff --git a/ndb/src/ndbapi/NdbOperationExec.cpp b/ndb/src/ndbapi/NdbOperationExec.cpp
index 4200300615d6e96a802c21b6c04780c4fd58351a..58a816e3c1afbc0db806d6b102531fbf27c00584 100644
--- a/ndb/src/ndbapi/NdbOperationExec.cpp
+++ b/ndb/src/ndbapi/NdbOperationExec.cpp
@@ -104,8 +104,9 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
 {
   Uint32 tTransId1, tTransId2;
   Uint32 tReqInfo;
-  Uint32 tInterpretInd = theInterpretIndicator;
-  
+  Uint8 tInterpretInd = theInterpretIndicator;
+  Uint8 tDirtyIndicator = theDirtyIndicator;
+  Uint32 tTotalCurrAI_Len = theTotalCurrAI_Len;
   theErrorLine = 0;
 
   if (tInterpretInd != 1) {
@@ -123,7 +124,13 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
       if (tStatus != GetValue) {
         setErrorCodeAbort(4116);
         return -1;
-      }//if
+      } 
+      else if(unlikely(tDirtyIndicator && tTotalCurrAI_Len == 0))
+      {
+	getValue(NdbDictionary::Column::FRAGMENT);
+	tTotalCurrAI_Len = theTotalCurrAI_Len;
+	assert(theTotalCurrAI_Len);
+      }
     } else {
       setErrorCodeAbort(4005);      
       return -1;
@@ -132,6 +139,7 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
     if (prepareSendInterpreted() == -1) {
       return -1;
     }//if
+    tTotalCurrAI_Len = theTotalCurrAI_Len;
   }//if
   
 //-------------------------------------------------------------
@@ -140,7 +148,6 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
 //-------------------------------------------------------------
   TcKeyReq * const tcKeyReq = CAST_PTR(TcKeyReq, theTCREQ->getDataPtrSend());
 
-  Uint32 tTotalCurrAI_Len = theTotalCurrAI_Len;
   Uint32 tTableId = m_currentTable->m_tableId;
   Uint32 tSchemaVersion = m_currentTable->m_version;
   
@@ -188,7 +195,6 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
   tcKeyReq->setStartFlag(tReqInfo, tStartIndicator);
   tcKeyReq->setInterpretedFlag(tReqInfo, tInterpretIndicator);
 
-  Uint8 tDirtyIndicator = theDirtyIndicator;
   OperationType tOperationType = theOperationType;
   Uint32 tTupKeyLen = theTupKeyLen;
   Uint8 abortOption =
diff --git a/ndb/test/ndbapi/testNdbApi.cpp b/ndb/test/ndbapi/testNdbApi.cpp
index 4867ea11a9a6d03f616a2f7da347ff5213d8b69c..ad1b1462ae7158f3d9b524b57d12740754f3e9cd 100644
--- a/ndb/test/ndbapi/testNdbApi.cpp
+++ b/ndb/test/ndbapi/testNdbApi.cpp
@@ -866,6 +866,112 @@ int runUpdateWithoutKeys(NDBT_Context* ctx, NDBT_Step* step){
   return result;
 }
 
+
+int runReadWithoutGetValue(NDBT_Context* ctx, NDBT_Step* step){
+  int result = NDBT_OK;
+  const NdbDictionary::Table* pTab = ctx->getTab();
+
+  HugoOperations hugoOps(*pTab);
+
+  Ndb* pNdb = GETNDB(step);
+  Uint32 lm;
+
+  for(Uint32 cm= 0; cm < 2; cm++)
+  {
+    for(lm= 0; lm <= NdbOperation::LM_CommittedRead; lm++)
+    {
+      NdbConnection* pCon = pNdb->startTransaction();
+      if (pCon == NULL){
+	pNdb->closeTransaction(pCon);  
+	return NDBT_FAILED;
+      }
+    
+      NdbOperation* pOp = pCon->getNdbOperation(pTab->getName());
+      if (pOp == NULL){
+	ERR(pCon->getNdbError());
+	pNdb->closeTransaction(pCon);  
+	return NDBT_FAILED;
+      }
+  
+      if (pOp->readTuple((NdbOperation::LockMode)lm) != 0){
+	pNdb->closeTransaction(pCon);
+	ERR(pOp->getNdbError());
+	return NDBT_FAILED;
+      }
+    
+      for(int a = 0; a<pTab->getNoOfColumns(); a++){
+	if (pTab->getColumn(a)->getPrimaryKey() == true){
+	  if(hugoOps.equalForAttr(pOp, a, 1) != 0){
+	    ERR(pCon->getNdbError());
+	    pNdb->closeTransaction(pCon);
+	    return NDBT_FAILED;
+	  }
+	}
+      }
+    
+      // Dont' call any getValues
+    
+      // Execute should work
+      int check = pCon->execute(cm == 0 ? NoCommit : Commit);
+      if (check == 0){
+	ndbout << "execute worked" << endl;
+      } else {
+	ERR(pCon->getNdbError());
+	result = NDBT_FAILED;
+      }
+    
+      pNdb->closeTransaction(pCon);  
+    }
+  }
+
+  /**
+   * Now test scans
+   */
+  for(lm= 0; lm <= NdbOperation::LM_CommittedRead; lm++)
+  {
+    NdbConnection* pCon = pNdb->startTransaction();
+    if (pCon == NULL){
+      pNdb->closeTransaction(pCon);  
+      return NDBT_FAILED;
+    }
+    
+    NdbScanOperation* pOp = pCon->getNdbScanOperation(pTab->getName());
+    if (pOp == NULL){
+      ERR(pCon->getNdbError());
+      pNdb->closeTransaction(pCon);  
+      return NDBT_FAILED;
+    }
+    
+    if ((pOp->readTuples((NdbOperation::LockMode)lm)) != 0){
+      pNdb->closeTransaction(pCon);
+      ERR(pOp->getNdbError());
+      return NDBT_FAILED;
+    }
+    
+    
+    // Dont' call any getValues
+    
+    // Execute should work
+    int check = pCon->execute(NoCommit);
+    if (check == 0){
+      ndbout << "execute worked" << endl;
+    } else {
+      ERR(pCon->getNdbError());
+      result = NDBT_FAILED;
+    }
+  
+    int res;
+    while((res = pOp->nextResult()) == 0);
+    pNdb->closeTransaction(pCon);  
+    
+    if(res != 1)
+      result = NDBT_FAILED;
+  }
+  
+  return result;
+}
+
+
 int runCheckGetNdbErrorOperation(NDBT_Context* ctx, NDBT_Step* step){
   int result = NDBT_OK;
   const NdbDictionary::Table* pTab = ctx->getTab();
@@ -1000,6 +1106,12 @@ TESTCASE("NdbErrorOperation",
 	 "Test that NdbErrorOperation is properly set"){
   INITIALIZER(runCheckGetNdbErrorOperation);
 }
+TESTCASE("ReadWithoutGetValue", 
+	 "Test that it's possible to perform read wo/ getvalue's\n"){ 
+  INITIALIZER(runLoadTable);
+  INITIALIZER(runReadWithoutGetValue);
+  FINALIZER(runClearTable);
+}
 NDBT_TESTSUITE_END(testNdbApi);
 
 int main(int argc, const char** argv){
diff --git a/ndb/test/run-test/daily-basic-tests.txt b/ndb/test/run-test/daily-basic-tests.txt
index b2d809ef6be6c6e72a044dcf0c701fcd964a41d2..e3d7501e6f7df7bf335158bcb61391ab5f177cdc 100644
--- a/ndb/test/run-test/daily-basic-tests.txt
+++ b/ndb/test/run-test/daily-basic-tests.txt
@@ -512,6 +512,10 @@ max-time: 500
 cmd: testNdbApi
 args: -n UpdateWithoutValues T6 
 
+max-time: 500
+cmd: testNdbApi
+args: -n ReadWithoutGetValue
+
 #max-time: 500
 #cmd: testInterpreter
 #args: T1 
diff --git a/ndb/test/run-test/ndb-autotest.sh b/ndb/test/run-test/ndb-autotest.sh
index f1c83f079cdf29cc66f3a8753d9a78759e395732..3ba4d1928d5d86ac0220c6e7b7354bd368bfc452 100755
--- a/ndb/test/run-test/ndb-autotest.sh
+++ b/ndb/test/run-test/ndb-autotest.sh
@@ -1,10 +1,20 @@
 #!/bin/sh
+#############################################################
+# This script created by Jonas does the following	    #
+# Cleans up clones and pevious builds, pulls new clones,    #
+# builds, deploys, configures the tests and launches ATRT   #
+#############################################################
+
+###############
+#Script setup #
+##############
 
 save_args=$*
 VERSION="ndb-autotest.sh version 1.04"
 
 DATE=`date '+%Y-%m-%d'`
-export DATE
+HOST=`hostname -s`
+export DATE HOST
 
 set -e
 ulimit -Sc unlimited
@@ -14,21 +24,33 @@ echo "`date` starting: $*"
 RSYNC_RSH=ssh
 export RSYNC_RSH
 
+verbose=0
 do_clone=yes
 build=yes
 deploy=yes
+run_test=yes
+config=yes
+report=yes
 
 clone=5.0-ndb
 RUN="daily-basic daily-devel"
 conf=autotest.conf
 
+############################
+# Read command line entries#
+############################
+
 while [ "$1" ]
 do
         case "$1" in
                 --no-clone) do_clone="";;
                 --no-build) build="";;
                 --no-deploy) deploy="";;
-		--clone=*) clone=`echo $1 | sed s/--clone=//`;;
+                --no-test) run_test="";;
+                --no-config) config="";;
+                --no-report) report="";;
+                --verbose) verbose=`expr $verbose + 1`;;
+                --clone=*) clone=`echo $1 | sed s/--clone=//`;;
                 --conf=*) conf=`echo $1 | sed s/--conf=//`;;
                 --version) echo $VERSION; exit;;
                 *) RUN=$*;;
@@ -36,6 +58,12 @@ do
         shift
 done
 
+#################################
+#Make sure the configfile exists#
+#if it does not exit. if it does#
+# (.) load it			# 
+#################################
+
 if [ -f $conf ]
 then
 	. $conf
@@ -44,51 +72,119 @@ else
 	exit
 fi
 
-env
+###############################
+# Validate that all interesting
+#   variables where set in conf
+###############################
+vars="target base_dir src_clone_base install_dir build_dir hosts configure"
+if [ "$report" ]
+then
+	vars="$vars result_host result_path"
+fi
+for i in $vars
+do
+  t=`echo echo \\$$i`
+  if [ -z `eval $t` ]
+  then
+      echo "Invalid config: $conf, variable $i is not set"
+      exit
+  fi
+done
+
+###############################
+#Print out the enviroment vars#
+###############################
+
+if [ $verbose -gt 0 ]
+then
+	env
+fi
+
+####################################
+# Setup the lock file name and path#
+# Setup the clone source location  #
+####################################
 
 LOCK=$HOME/.autotest-lock
 src_clone=$src_clone_base-$clone
 
+#######################################
+# Check to see if the lock file exists#
+# If it does exit. 		      #
+#######################################
+
 if [ -f $LOCK ]
 then
 	echo "Lock file exists: $LOCK"
 	exit 1
 fi
 
+#######################################
+# If the lock file does not exist then#
+# create it with date and run info    #
+#######################################
+
 echo "$DATE $RUN" > $LOCK
+
+#############################
+#If any errors here down, we#
+# trap them, and remove the #
+# Lock file before exit     #
+#############################
+
 trap "rm -f $LOCK" ERR
 
+# You can add more to this path#
+################################
+
 dst_place=${build_dir}/clone-mysql-$clone-$DATE
 
+#########################################
+# Delete source and pull down the latest#
+#########################################
+
 if [ "$do_clone" ]
 then
 	rm -rf $dst_place
 	bk clone  $src_clone $dst_place
 fi
 
+##########################################
+# Build the source, make installs, and   #
+# create the database to be rsynced	 #
+##########################################
+
 if [ "$build" ]
 then
 	cd $dst_place
-        rm -rf $run_dir/*
-        aclocal; autoheader; autoconf; automake
-	if [ -d storage ]
+        rm -rf $install_dir/*
+	if [ -x BUILD/autorun.sh ]
 	then
-	    (cd storage/innobase; aclocal; autoheader; autoconf; automake)
-	    (cd storage/bdb/dist; sh s_all)
+	    ./BUILD/autorun.sh
 	else
-	    (cd innobase; aclocal; autoheader; autoconf; automake)
-	    (cd bdb/dist; sh s_all)
+	    aclocal; autoheader; autoconf; automake
+	    if [ -d storage ]
+	    then
+		(cd storage/innobase; aclocal; autoheader; autoconf; automake)
+		(cd storage/bdb/dist; sh s_all)
+	    else
+		(cd innobase; aclocal; autoheader; autoconf; automake)
+		(cd bdb/dist; sh s_all)
+	    fi
 	fi
-	eval $configure --prefix=$run_dir
+	eval $configure --prefix=$install_dir
 	make
 	make install
-	(cd $run_dir; ./bin/mysql_install_db)
+	(cd $install_dir; ./bin/mysql_install_db) # This will be rsynced to all
 fi
 
-###
-# check script version
-#
-script=$run_dir/mysql-test/ndb/ndb-autotest.sh
+################################
+# check script version. If the #
+# version is old, replace it   #
+# and restart		       #
+################################
+
+script=$install_dir/mysql-test/ndb/ndb-autotest.sh
 if [ -x $script ]
 then
 	$script --version > /tmp/version.$$
@@ -100,21 +196,34 @@ rm -f /tmp/version.$$
 if [ $match -eq 0 ]
 then
 	echo "Incorrect script version...restarting"
-	cp $run_dir/mysql-test/ndb/ndb-autotest.sh /tmp/at.$$.sh
-	rm -rf $run_dir $dst_place
+	cp $install_dir/mysql-test/ndb/ndb-autotest.sh /tmp/at.$$.sh
+	rm -rf $install_dir $dst_place
 	sh /tmp/at.$$.sh $save_args
 	exit
 fi
 
-# Check that all interesting files are present
-test_dir=$run_dir/mysql-test/ndb
+###############################################
+# Check that all interesting files are present#
+###############################################
+
+test_dir=$install_dir/mysql-test/ndb
 atrt=$test_dir/atrt
 html=$test_dir/make-html-reports.sh
-mkconfig=$run_dir/mysql-test/ndb/make-config.sh
+mkconfig=$install_dir/mysql-test/ndb/make-config.sh
 
-PATH=$run_dir/bin:$test_dir:$PATH
+##########################
+#Setup bin and test paths#
+##########################
+
+PATH=$install_dir/bin:$test_dir:$PATH
 export PATH
 
+###########################
+# This will filter out all#
+# the host that did not   #
+# respond. Called below   #
+###########################
+
 filter(){
 	neg=$1
 	shift
@@ -125,18 +234,22 @@ filter(){
 	done
 }
 
-###
-# check ndb_cpcc fail hosts
-#
+############################
+# check ndb_cpcc fail hosts#
+############################
 ndb_cpcc $hosts | awk '{ if($1=="Failed"){ print;}}' > /tmp/failed.$DATE
 filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
 hosts=`cat /tmp/hosts.$DATE` 
 
+#############################
+# Push bin and test to hosts#
+#############################
+
 if [ "$deploy" ]
 then
     for i in $hosts
-      do
-      rsync -a --delete --force --ignore-errors $run_dir/ $i:$run_dir
+    do
+      rsync -a --delete --force --ignore-errors $install_dir/ $i:$install_dir
       ok=$?
       if [ $ok -ne 0 ]
 	  then
@@ -145,7 +258,6 @@ then
       fi
     done
 fi
-rm -f /tmp/build.$DATE.tgz
 
 ###
 # handle scp failed hosts
@@ -154,9 +266,11 @@ filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
 hosts=`cat /tmp/hosts.$DATE` 
 cat /tmp/failed.$DATE > /tmp/filter_hosts.$$
 
-###
-# functions for running atrt 
-#
+#############################
+# Function for replacing the#
+# choose host with real host#
+# names. Note $$ = PID	    #
+#############################
 choose(){
         SRC=$1
         TMP1=/tmp/choose.$$
@@ -177,16 +291,25 @@ choose(){
 }
 
 choose_conf(){
-    host=`hostname -s`
-    if [ -f $test_dir/conf-$1-$host.txt ]
-    then
+    if [ -f $test_dir/conf-$1-$HOST.txt ]
+	then
+	echo "$test_dir/conf-$1-$HOST.txt"
 	echo "$test_dir/conf-$1-$host.txt"
     elif [ -f $test_dir/conf-$1.txt ]
     then
 	echo "$test_dir/conf-$1.txt"
+    else
+	echo "Unable to find conf file looked for" 1>&2
+	echo "$testdir/conf-$1-host.txt and" 1>&2
+	echo "$testdir/conf-$1.txt" 1>&2
+	exit
     fi
 }
-
+######################################
+# Starts ATRT and gives it the right #
+# command line options. after it     #
+# Gathers results and moves them     #
+######################################
 start(){
 	rm -rf report.txt result* log.txt
 	$atrt -v -v -r -R --log-file=log.txt --testcase-file=$test_dir/$2-tests.txt &
@@ -202,17 +325,31 @@ start(){
 	cd ..
 	p2=`pwd`
 	cd ..
-	tar cfz /tmp/res.$$.tgz `basename $p2`/$DATE
-	scp /tmp/res.$$.tgz $result_host:$result_path/res.$DATE.`hostname -s`.$2.$$.tgz
-	rm -f /tmp/res.$$.tgz
+	if [ "$report" ]
+	then
+		tar cfz /tmp/res.$2.$$.tgz `basename $p2`/$DATE
+		scp /tmp/res.$2.$$.tgz \
+		    $result_host:$result_path/res.$DATE.$HOST.$2.$$.tgz
+		rm -f /tmp/res.$2.$$.tgz
+	fi
 }
 
+#########################################
+# Count how many computers we have ready#
+#########################################
+
 count_hosts(){
-    cnt=`grep "CHOOSE_host" $1 |
-      awk '{for(i=1; i<=NF;i++) if(match($i, "CHOOSE_host") > 0) print $i;}' |
-      sort | uniq | wc -l`
+    cnt=`grep "CHOOSE_host" $1 | awk '{for(i=1; i<=NF;i++) \
+    if(match($i, "CHOOSE_host") > 0) print $i;}' | sort | uniq | wc -l`
     echo $cnt
 }
+#######################################################
+# Calls: Choose                                       #
+#	 Choose_host                                  #
+#        Count_host                                   #
+#	 start                                        #
+# for each directory in the $RUN variable	      #
+#######################################################
 
 p=`pwd`
 for dir in $RUN
@@ -223,26 +360,36 @@ do
 	res_dir=$base_dir/result-$dir-mysql-$clone-$target/$DATE
 
 	mkdir -p $run_dir $res_dir
-	rm -rf $res_dir/* $run_dir/*
-	
-	conf=`choose_conf $dir`
-	count=`count_hosts $conf`
-	avail_hosts=`filter /tmp/filter_hosts.$$ $hosts`
-	avail=`echo $avail_hosts | wc -w`
-	if  [ $count -gt $avail ]
+	rm -rf $res_dir/*
+	cd $run_dir
+
+	if [ "$config" ]
 	then
+	    rm -rf $run_dir/*
+
+	    conf=`choose_conf $dir`
+	    count=`count_hosts $conf`
+	    avail_hosts=`filter /tmp/filter_hosts.$$ $hosts`
+	    avail=`echo $avail_hosts | wc -w`
+	    if  [ $count -gt $avail ]
+	    then
 		echo "Not enough hosts"
 		echo "Needs: $count available: $avail ($avail_hosts)"
 		break;
-	fi
+	    fi
 
-	run_hosts=`echo $avail_hosts|awk '{for(i=1;i<='$count';i++)print $i;}'`
-	echo $run_hosts >> /tmp/filter_hosts.$$	
+	    run_hosts=`echo $avail_hosts| \
+                       awk '{for(i=1;i<='$count';i++)print $i;}'`
+	    echo $run_hosts >> /tmp/filter_hosts.$$	
 	
-	cd $run_dir
-	choose $conf $run_hosts > d.tmp
-	$mkconfig d.tmp
-	start $dir-mysql-$clone-$target $dir $res_dir &
+	    choose $conf $run_hosts > d.tmp
+	    $mkconfig d.tmp
+	fi
+	
+	if [ "$run_test" ]
+	then
+	    start $dir-mysql-$clone-$target $dir $res_dir &
+	fi
 done
 cd $p
 rm /tmp/filter_hosts.$$
diff --git a/ndb/test/tools/hugoLoad.cpp b/ndb/test/tools/hugoLoad.cpp
index 7d9d0dafaffbdaebf1f4ccd93cab5685ec95a4f4..1a229169650d8722f3bd76d74efd42efb109dbcd 100644
--- a/ndb/test/tools/hugoLoad.cpp
+++ b/ndb/test/tools/hugoLoad.cpp
@@ -30,10 +30,12 @@ int main(int argc, const char** argv){
   const char* _tabname = NULL;
   int _help = 0;
   int _batch = 512;
-  
+  const char* db = 0;
+
   struct getargs args[] = {
     { "records", 'r', arg_integer, &_records, "Number of records", "recs" },
     { "batch", 'b', arg_integer, &_batch, "Number of operations in each transaction", "batch" },
+    { "database", 'd', arg_string, &db, "Database", "" },
     { "usage", '?', arg_flag, &_help, "Print help", "" }
   };
   int num_args = sizeof(args) / sizeof(args[0]);
@@ -59,7 +61,7 @@ int main(int argc, const char** argv){
   {
     return NDBT_ProgramExit(NDBT_FAILED);
   }
-  Ndb MyNdb(&con, "TEST_DB" );
+  Ndb MyNdb( &con, db ? db : "TEST_DB" );
 
   if(MyNdb.init() != 0){
     ERR(MyNdb.getNdbError());
diff --git a/ndb/test/tools/hugoPkUpdate.cpp b/ndb/test/tools/hugoPkUpdate.cpp
index 6e7ff39f903c76b1c9b22cb1476a04416996f7bf..7d46ae95c293b6e0d9d09fe51dbadfbcfd84af36 100644
--- a/ndb/test/tools/hugoPkUpdate.cpp
+++ b/ndb/test/tools/hugoPkUpdate.cpp
@@ -33,7 +33,7 @@ int main(int argc, const char** argv){
   int _loops = 1;
   int _abort = 0;
   int _batch = 0;
-  const char* _tabname = NULL;
+  const char* _tabname = NULL, *db = 0;
   int _help = 0;
 
   struct getargs args[] = {
@@ -41,7 +41,8 @@ int main(int argc, const char** argv){
     { "loops", 'l', arg_integer, &_loops, "number of times to run this program(0=infinite loop)", "loops" },
     //    { "batch", 'b', arg_integer, &_batch, "batch value", "batch" },
     { "records", 'r', arg_integer, &_records, "Number of records", "records" },
-    { "usage", '?', arg_flag, &_help, "Print help", "" }
+    { "usage", '?', arg_flag, &_help, "Print help", "" },
+    { "database", 'd', arg_string, &db, "Database", "" }
   };
   int num_args = sizeof(args) / sizeof(args[0]);
   int optind = 0;
@@ -62,7 +63,7 @@ int main(int argc, const char** argv){
   {
     return NDBT_ProgramExit(NDBT_FAILED);
   }
-  Ndb MyNdb(&con, "TEST_DB" );
+  Ndb MyNdb( &con, db ? db : "TEST_DB" );
 
   if(MyNdb.init() != 0){
     ERR(MyNdb.getNdbError());
diff --git a/ndb/test/tools/hugoScanRead.cpp b/ndb/test/tools/hugoScanRead.cpp
index 4f76362ecab1d88e3319089ecf252a29e2aa2ab7..a345bb88d0ebe9ec1b3b0beb11d0454bdc30ccdc 100644
--- a/ndb/test/tools/hugoScanRead.cpp
+++ b/ndb/test/tools/hugoScanRead.cpp
@@ -33,7 +33,7 @@ int main(int argc, const char** argv){
   int _loops = 1;
   int _abort = 0;
   int _parallelism = 1;
-  const char* _tabname = NULL;
+  const char* _tabname = NULL, *db = 0;
   int _help = 0;
   int lock = NdbOperation::LM_Read;
   int sorted = 0;
@@ -45,7 +45,8 @@ int main(int argc, const char** argv){
     { "records", 'r', arg_integer, &_records, "Number of records", "recs" },
     { "usage", '?', arg_flag, &_help, "Print help", "" },
     { "lock", 'm', arg_integer, &lock, "lock mode", "" },
-    { "sorted", 's', arg_flag, &sorted, "sorted", "" }
+    { "sorted", 's', arg_flag, &sorted, "sorted", "" },
+    { "database", 'd', arg_string, &db, "Database", "" }
   };
   int num_args = sizeof(args) / sizeof(args[0]);
   int optind = 0;
@@ -66,7 +67,7 @@ int main(int argc, const char** argv){
   {
     return NDBT_ProgramExit(NDBT_FAILED);
   }
-  Ndb MyNdb(&con, "TEST_DB" );
+  Ndb MyNdb( &con, db ? db : "TEST_DB" );
 
   if(MyNdb.init() != 0){
     ERR(MyNdb.getNdbError());
diff --git a/ndb/test/tools/hugoScanUpdate.cpp b/ndb/test/tools/hugoScanUpdate.cpp
index 88c343f8fd3c4707ebf31586700b941454e2e4d7..6960fa44b9658ee56fc00f66c53091fd4377e8f8 100644
--- a/ndb/test/tools/hugoScanUpdate.cpp
+++ b/ndb/test/tools/hugoScanUpdate.cpp
@@ -33,7 +33,7 @@ int main(int argc, const char** argv){
   int _loops = 1;
   int _parallelism = 1;
   int _ver2 = 0;
-  const char* _tabname = NULL;
+  const char* _tabname = NULL, *db = 0;
   int _help = 0;
   
   struct getargs args[] = {
@@ -42,7 +42,8 @@ int main(int argc, const char** argv){
     { "records", 'r', arg_integer, &_records, "Number of records", "recs" },
     { "ver2", '2', arg_flag, &_ver2, "Use version 2 of scanUpdateRecords", "" },
     { "ver2", '1', arg_negative_flag, &_ver2, "Use version 1 of scanUpdateRecords (default)", "" },
-    { "usage", '?', arg_flag, &_help, "Print help", "" }
+    { "usage", '?', arg_flag, &_help, "Print help", "" },
+    { "database", 'd', arg_string, &db, "Database", "" }
   };
   int num_args = sizeof(args) / sizeof(args[0]);
   int optind = 0;
@@ -63,7 +64,7 @@ int main(int argc, const char** argv){
   {
     return NDBT_ProgramExit(NDBT_FAILED);
   }
-  Ndb MyNdb(&con, "TEST_DB" );
+  Ndb MyNdb( &con, db ? db : "TEST_DB" );
 
   if(MyNdb.init() != 0){
     ERR(MyNdb.getNdbError());
@@ -100,6 +101,7 @@ int main(int argc, const char** argv){
       return NDBT_ProgramExit(NDBT_FAILED);
     }
     i++;
+    //NdbSleep_MilliSleep(300);
   }
 
   return NDBT_ProgramExit(NDBT_OK);
diff --git a/ndb/tools/Makefile.am b/ndb/tools/Makefile.am
index c350fb0a141d9b6887d5c015de4aec0a95999e40..1008b166dfca447851de1d7e4c5def087d8e4220 100644
--- a/ndb/tools/Makefile.am
+++ b/ndb/tools/Makefile.am
@@ -30,7 +30,8 @@ ndb_restore_SOURCES = restore/restore_main.cpp \
                       restore/consumer.cpp \
                       restore/consumer_restore.cpp \
                       restore/consumer_printer.cpp \
-                      restore/Restore.cpp
+                      restore/Restore.cpp \
+                      ../test/src/NDBT_ResultRow.cpp $(tools_common_sources)
 
 include $(top_srcdir)/ndb/config/common.mk.am
 include $(top_srcdir)/ndb/config/type_ndbapitools.mk.am
diff --git a/ndb/tools/restore/Restore.cpp b/ndb/tools/restore/Restore.cpp
index fa616ee8fee766ad371174d2fe082f0e81332e5f..81a8d4aba41251c0f8830c3d4cc00e898fe5c6d1 100644
--- a/ndb/tools/restore/Restore.cpp
+++ b/ndb/tools/restore/Restore.cpp
@@ -925,19 +925,12 @@ operator<<(NdbOut& ndbout, const LogEntry& logE)
   return ndbout;
 }
 
+#include <NDBT.hpp>
 
 NdbOut & 
 operator<<(NdbOut& ndbout, const TableS & table){
-  ndbout << endl << "Table: " << table.getTableName() << endl;
-  for (int j = 0; j < table.getNoOfAttributes(); j++) 
-  {
-    const AttributeDesc * desc = table[j];
-    ndbout << desc->m_column->getName() << ": "
-	   << (Uint32) desc->m_column->getType();
-    ndbout << " key: "  << (Uint32) desc->m_column->getPrimaryKey();
-    ndbout << " array: " << desc->arraySize;
-    ndbout << " size: " << desc->size << endl;
-  } // for
+  
+  ndbout << (* (NDBT_Table*)table.m_dictTable) << endl;
   return ndbout;
 }