diff --git a/manifest b/manifest
index 0fb8dc44f1..49e8784475 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Table\s1\sof\sa\sdatabase\s(the\ssqlite_master\stable)\sdefaults\sto\suse\sB+trees.\s(CVS\s1378)
-D 2004-05-14T12:17:46
+C Performance\simprovements\s(CVS\s1379)
+D 2004-05-14T15:27:28
 F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -23,7 +23,7 @@ F sqlite.def fc4f5734786fe4743cfe2aa98eb2da4b089edb5f
 F sqlite.pc.in 30552343140c53304c2a658c080fbe810cd09ca2
 F src/attach.c c315c58cb16fd6e913b3bfa6412aedecb4567fa5
 F src/auth.c 5c2f0bea4729c98c2be3b69d6b466fc51448fe79
-F src/btree.c 4f1c77b78efce07f17b335251316e8c028827049
+F src/btree.c 085a020c22aceb08c42004ffdbfc4daad68fd7eb
 F src/btree.h 6f51ad0ffebfba71295fcacdbe86007512200050
 F src/btree_rb.c 9d7973e266ee6f9c61ce592f68742ce9cd5b10e5
 F src/build.c e93f443a20eab57ffb77ff6244b1e09a1f7d9390
@@ -63,10 +63,10 @@ F src/update.c 0441f8b64d616ef244583449e66c984e536c6c9b
 F src/utf.c fc799748d43fe1982d157b871e3e420a19c85d4f
 F src/util.c 58407b133dfe0b21af23e0aa89c058a2b3d8cb0f
 F src/vacuum.c c134702e023db8778e6be59ac0ea7b02315b5476
-F src/vdbe.c b63179da52797686c75c010ba742ceb8d197a3d1
+F src/vdbe.c fff79c08b3063d8d6f7b600fc6896c255c72238c
 F src/vdbe.h 94457ca73bae972dc61bca33a4dccc2e6e14e2f8
 F src/vdbeInt.h 03f4c3642482570a697a42a9bbb12908c6535bbe
-F src/vdbeaux.c d8dc16e7bfb6201a2e2e4c020ba813e295de717f
+F src/vdbeaux.c 4590e8f5e064ee1e269a0b969f6f28118daf325d
 F src/where.c 6957bbd333cc7ffa7b3878adbe67a095319daa54
 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
 F test/attach.test cb9b884344e6cfa5e165965d5b1adea679a24c83
@@ -191,7 +191,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
 F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P c6604a94d25d148fbb42b47ae9a8195e4697c681
-R e9a50b542329deb82612b2b06751e47c
+P 45b60de5c7deb83d10ab54759434e32847f0c2ef
+R 623a239c3e485e25d3fc8763ec1b417b
 U drh
-Z a20ab9adf0eaf642c04b312d2e365440
+Z c81eb274ca540aa5e441cb23ee2aa0aa
diff --git a/manifest.uuid b/manifest.uuid
index 3cd92eeef5..86fa5f28f9 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-45b60de5c7deb83d10ab54759434e32847f0c2ef
\ No newline at end of file
+cad47917267d32ab00c8b949151c8bc3c6638479
\ No newline at end of file
diff --git a/src/btree.c b/src/btree.c
index e2926f4638..4ff620170d 100644
--- a/src/btree.c
+++ b/src/btree.c
@@ -9,7 +9,7 @@
 **    May you share freely, never taking more than you give.
 **
 *************************************************************************
-** $Id: btree.c,v 1.135 2004/05/14 12:17:46 drh Exp $
+** $Id: btree.c,v 1.136 2004/05/14 15:27:28 drh Exp $
 **
 ** This file implements a external (disk-based) database using BTrees.
 ** For a detailed discussion of BTrees, refer to
@@ -741,18 +741,20 @@ static int initPage(
   int c, pc, i, hdr;
   unsigned char *data;
   int usableSize;
-  int sumCell = 0;       /* Total size of all cells */
+  /* int sumCell = 0;       // Total size of all cells */
+
 
   assert( pPage->pBt!=0 );
   assert( pParent==0 || pParent->pBt==pPage->pBt );
   assert( pPage->pgno==sqlite3pager_pagenumber(pPage->aData) );
   assert( pPage->aData == &((unsigned char*)pPage)[-pPage->pBt->pageSize] );
   assert( pPage->pParent==0 || pPage->pParent==pParent );
+  assert( pPage->pParent==pParent || !pPage->isInit );
+  if( pPage->isInit ) return SQLITE_OK;
   if( pPage->pParent==0 && pParent!=0 ){
     pPage->pParent = pParent;
     sqlite3pager_ref(pParent->aData);
   }
-  if( pPage->isInit ) return SQLITE_OK;
   pPage->nCell = pPage->nCellAlloc = 0;
   assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) );
   hdr = pPage->hdrOffset;
@@ -782,7 +784,7 @@ static int initPage(
   pc = get2byte(&data[hdr+3]);
   for(i=0; pc>0; i++){
     pPage->aCell[i] = &data[pc];
-    sumCell += cellSize(pPage, &data[pc]);
+    /* sumCell += cellSize(pPage, &data[pc]); */
     pc = get2byte(&data[pc]);
   }
 
@@ -801,10 +803,11 @@ static int initPage(
   if( pPage->nFree>=usableSize ) return SQLITE_CORRUPT;
 
   /* Sanity check:  Cells and freespace and header must sum to the size
-  ** a page. */
+  ** a page.
   if( sumCell+pPage->nFree+hdr+10-pPage->leaf*4 != usableSize ){
     return SQLITE_CORRUPT;
   }
+  */
 
   pPage->isInit = 1;
   pageIntegrity(pPage);
@@ -879,7 +882,7 @@ static int getAndInitPage(
 ){
   int rc;
   rc = getPage(pBt, pgno, ppPage);
-  if( rc==SQLITE_OK ){
+  if( rc==SQLITE_OK && (*ppPage)->isInit==0 ){
     rc = initPage(*ppPage, pParent);
   }
   return rc;
diff --git a/src/vdbe.c b/src/vdbe.c
index 486e33ddfc..f83e025655 100644
--- a/src/vdbe.c
+++ b/src/vdbe.c
@@ -43,7 +43,7 @@
 ** in this file for details.  If in doubt, do not deviate from existing
 ** commenting and indentation practices when changing or adding code.
 **
-** $Id: vdbe.c,v 1.290 2004/05/14 12:16:11 danielk1977 Exp $
+** $Id: vdbe.c,v 1.291 2004/05/14 15:27:29 drh Exp $
 */
 #include "sqliteInt.h"
 #include "os.h"
@@ -2001,7 +2001,7 @@ case OP_Column: {
       /* This code will run very infrequently (e.g. tables with several
       ** hundred columns).
       */
-      zData = (char *)sqliteMalloc(offset+max_space);
+      zData = (char *)sqliteMallocRaw(offset+max_space);
       if( !zData ){
         rc = SQLITE_NOMEM;
         goto abort_due_to_error;
@@ -2023,7 +2023,7 @@ case OP_Column: {
   ** the serial types for the record. At the end of this block variable
   ** offset is set to the offset to the start of Data0 in the record.
   */
-  aTypes = (u64 *)sqliteMalloc(sizeof(u64)*nFields);
+  aTypes = (u64 *)sqliteMallocRaw(sizeof(u64)*nFields);
   if( !aTypes ){
     if( freeZdata ){
       sqliteFree(zData);
@@ -2058,7 +2058,7 @@ case OP_Column: {
       zData = (char *)sqlite3BtreeDataFetch(pCrsr, offset+len);
     }
     if( !zData && len>0 ){
-      zData = (char *)sqliteMalloc(len);
+      zData = (char *)sqliteMallocRaw(len);
       if( !zData ){
         sqliteFree(aTypes);
         rc = SQLITE_NOMEM;
@@ -2164,7 +2164,7 @@ case OP_MakeRecord: {
   }
 
   /* Allocate space for the new record. */
-  zNewRecord = sqliteMalloc(nBytes);
+  zNewRecord = sqliteMallocRaw(nBytes);
   if( !zNewRecord ){
     rc = SQLITE_NOMEM;
     goto abort_due_to_error;
@@ -2304,7 +2304,7 @@ case OP_MakeIdxKey: {
   }
 
   /* Allocate space for the new key */
-  zKey = (char *)sqliteMalloc(nByte);
+  zKey = (char *)sqliteMallocRaw(nByte);
   if( !zKey ){
     rc = SQLITE_NOMEM;
     goto abort_due_to_error;
diff --git a/src/vdbeaux.c b/src/vdbeaux.c
index 6340a2ee55..e33ad0e5ee 100644
--- a/src/vdbeaux.c
+++ b/src/vdbeaux.c
@@ -1521,7 +1521,7 @@ int sqlite3VdbeIdxKeyCompare(
 
   pCellKey = (unsigned char *)sqlite3BtreeKeyFetch(pCur, nCellKey);
   if( !pCellKey ){
-    pCellKey = (unsigned char *)sqliteMalloc(nCellKey);
+    pCellKey = (unsigned char *)sqliteMallocRaw(nCellKey);
     if( !pCellKey ){
       return SQLITE_NOMEM;
     }
@@ -1547,6 +1547,3 @@ int sqlite3VdbeIdxKeyCompare(
   }
   return SQLITE_OK;
 }
-
-
-