diff -urN at91bootstrap-2.3-0rig/driver/dataflash.c at91bootstrap-2.3.4/driver/dataflash.c
--- at91bootstrap-2.3-0rig/driver/dataflash.c	2007-04-22 13:56:29.000000000 +0200
+++ at91bootstrap-2.3.4/driver/dataflash.c	2007-09-24 20:56:18.000000000 +0200
@@ -39,8 +39,12 @@
 #include "../include/part.h"
 #include "../include/main.h"
 #include "../include/dataflash.h"
+#include "../include/debug.h"
 #include <stdlib.h>
 
+#define	SUCCESS	1
+#define	FAILURE	0
+
 #ifdef CFG_DATAFLASH
 extern	div_t udiv(unsigned int numerator, unsigned int denominator);
 /* Write SPI register */
@@ -92,7 +96,7 @@
 	/* SPI_Enable */
 	write_spi(SPI_CR, AT91C_SPI_SPIEN);
 
-	return 0;
+	return SUCCESS;
 }
 
 /*------------------------------------------------------------------------------*/
@@ -134,12 +138,10 @@
 
  	/* Try to get the dataflash semaphore */
 	if ((pDataFlash->bSemaphore) != UNLOCKED)
-		return (char) 0;
+		return (char) FAILURE;
 	pDataFlash->bSemaphore = LOCKED;
-
 	/* Compute command pattern */
 	dInternalAdr = (result.quot << AT91C_PAGE_OFFSET(pDataFlash)) + result.rem;
-
  	if (AT91C_DF_NB_PAGE(pDataFlash) >= 16384)
 	{
 		pDataFlash->command[0] = (bCmd & 0x000000FF) | \
@@ -178,7 +180,7 @@
 
     	while (df_is_busy(pDataFlash) == LOCKED);
 
-	return 1;
+	return SUCCESS;
 }
 
 /*------------------------------------------------------------------------------*/
@@ -194,13 +196,13 @@
 		if (df_get_status(pDataFlash))
 		{
 			if (df_is_ready(pDataFlash))
-				return 1;
+				return SUCCESS;
 		}
 	}
 
-	return 0;
+	return FAILURE;
 }
-
+volatile	int loop;
 /*------------------------------------------------------------------------------*/
 /* \fn    df_read								*/
 /* \brief Read a block in dataflash						*/
@@ -212,21 +214,30 @@
 	unsigned int size)
 {
 	unsigned int SizeToRead;
+	int page_counter;
 
+	page_counter = 32;
 	while (size)
 	{
-		SizeToRead = (size < AT91C_MAX_PDC_SIZE)? size : AT91C_MAX_PDC_SIZE;
-
+		SizeToRead = (size < 0x8000)? size : 0x8000;
 		/* wait the dataflash ready status */
-		df_wait_ready(pDf);
-	    	df_continuous_read(pDf, (char *)buffer, SizeToRead, addr);
-
-		size -= SizeToRead;
-		addr += SizeToRead;
-		buffer += SizeToRead;
+		if(df_wait_ready(pDf) != 0) {
+		    	df_continuous_read(pDf, (char *)buffer, SizeToRead, addr);
+			dbg_print(".");
+			if(--page_counter <= 0) {
+				page_counter = 32;
+				dbg_print("\r\n");
+			}
+			size -= SizeToRead;
+			addr += SizeToRead;
+			buffer += SizeToRead;
+		} else {
+			/* We got a timeout */
+			dbg_print("Timeout while waiting for dataflash ready\n");
+			return FAILURE;
+		}
 	}
-
-   	return 0;
+   	return SUCCESS;
 }
 
 /*----------------------------------------------------------------------*/
@@ -235,13 +246,19 @@
 /*----------------------------------------------------------------------*/
 static int df_download(AT91PS_DF pDf, unsigned int img_addr, unsigned int img_size, unsigned int img_dest)
 {
+	dbg_print(">Loading from Dataflash[");
+	dbg_print_hex(img_addr);
+	dbg_print("] to SDRAM[");
+	dbg_print_hex(img_dest);
+	dbg_print("]\r\n");
 	/* read bytes in the dataflash */
-	df_read(pDf, img_addr,(unsigned char *)img_dest, img_size);
-
+	if(df_read(pDf, img_addr,(unsigned char *)img_dest, img_size) == FAILURE)
+		return FAILURE;
+	dbg_print("\r\n>Loading complete, [");
+	dbg_print_hex(IMG_SIZE);
+	dbg_print("] bytes\r\n");
 	/* wait the dataflash ready status */
-	df_wait_ready(pDf);
-
-    return 0;
+	return df_wait_ready(pDf);
 }
 
 /*----------------------------------------------------------------------*/
@@ -263,7 +280,7 @@
 static int df_init (AT91PS_DF pDf)
 {
 	int dfcode = 0;
-	int status = 1;
+	int status = SUCCESS;
 
 	/* Default: AT45DB321B */
 	pDf->dfDescription.pages_number = 8192;
@@ -302,18 +319,21 @@
 			pDf->dfDescription.pages_number = 4096;
 			pDf->dfDescription.pages_size = 528;
 			pDf->dfDescription.page_offset = 10;
+			dbg_print(">AT45DB161D detected\r\n");
 			break;
 
 		case AT45DB321B:
 			pDf->dfDescription.pages_number = 8192;
 			pDf->dfDescription.pages_size = 528;
 			pDf->dfDescription.page_offset = 10;
+			dbg_print(">AT45DB321D detected\r\n");
 			break;
 
 		case AT45DB642:
 			pDf->dfDescription.pages_number = 8192;
 			pDf->dfDescription.pages_size = 1056;
 			pDf->dfDescription.page_offset = 11;
+			dbg_print(">AT45DB642D detected\r\n");
 			break;
 /*
 		case AT45DB1282:
@@ -335,7 +355,7 @@
 			break;
 */
 		default:
-		        status = 0;
+		        status = FAILURE;
 			break;
 	}
 
@@ -357,12 +377,12 @@
 		if (i != 23)
 		{
 			if ((buffer[i] != 0xEA) && (buffer[i] != 0xE5) )
-				return -1;
+				return FAILURE;
 		}
 		i+=4;
     	}
 
-    	return 0;
+    	return SUCCESS;
 }
 
 /*------------------------------------------------------------------------------*/
@@ -374,13 +394,14 @@
     	AT91S_DF sDF;
     	AT91PS_DF pDf = (AT91PS_DF)&sDF;
     	unsigned int rxBuffer[128];
+	unsigned int status;
 
     	pDf->bSemaphore = UNLOCKED;
 
     	df_spi_init(pcs, DF_CS_SETTINGS);
 
-    	if (!df_init(pDf))
-        	return -1;
+    	if (df_init(pDf) == FAILURE)
+        	return FAILURE;
 
 #ifdef AT91SAM9260
 	/* Test if a button has been pressed or not */
@@ -391,10 +412,13 @@
     	df_continuous_read(pDf, (char *)rxBuffer, 32, img_addr);
 	df_wait_ready(pDf);
 
-	if (df_is_boot_valid((unsigned char*)rxBuffer))
-		return -1;
+	if (df_is_boot_valid((unsigned char*)rxBuffer) == FAILURE) {
+		dbg_print(">Invalid Boot Area...\n\r");
+		return FAILURE;
+	}
 
-	return df_download(pDf, img_addr, img_size, img_dest);
+	status = df_download(pDf, img_addr, img_size, img_dest);
+	return status;
 }
 
 #endif /* CFG_DATAFLASH */
diff -urN at91bootstrap-2.3-0rig/driver/debug.c at91bootstrap-2.3.4/driver/debug.c
--- at91bootstrap-2.3-0rig/driver/debug.c	2006-12-05 11:27:24.000000000 +0100
+++ at91bootstrap-2.3.4/driver/debug.c	2007-09-24 20:38:01.000000000 +0200
@@ -85,4 +85,19 @@
 	}
 }
 
+void dbg_print_hex(unsigned int data)
+{
+	unsigned char hex[11];
+	int i=0;
+	hex[0]='0';
+	hex[1]='x';
+	for(i = 9 ;i >= 2;i--) {
+		hex[i] = "0123456789ABCDEF"[data & 0xF];
+		data >>= 4;
+	}
+	hex[10]='\0';	
+	dbg_print((const char *) hex);
+}
+
+
 #endif /* CFG_DEBUG */
diff -urN at91bootstrap-2.3-0rig/include/debug.h at91bootstrap-2.3.4/include/debug.h
--- at91bootstrap-2.3-0rig/include/debug.h	2006-12-05 11:27:20.000000000 +0100
+++ at91bootstrap-2.3.4/include/debug.h	2007-09-24 18:26:37.000000000 +0200
@@ -45,5 +45,6 @@
 /* Global functions */
 extern void dbg_init(unsigned int);
 extern void dbg_print(const char *ptr);
+extern void dbg_print_hex(unsigned int data);
 
 #endif /*_DEBUG_H_*/
diff -urN at91bootstrap-2.3-0rig/main.c at91bootstrap-2.3.4/main.c
--- at91bootstrap-2.3-0rig/main.c	2007-09-24 18:26:10.000000000 +0200
+++ at91bootstrap-2.3.4/main.c	2007-09-24 20:56:20.000000000 +0200
@@ -41,6 +41,10 @@
 #include "include/flash.h"
 #include "include/nandflash.h"
 
+int test(void)
+{
+
+}
 /*------------------------------------------------------------------------------*/
 /* Function Name       : main							*/
 /* Object              : Main function						*/
@@ -49,6 +53,7 @@
 /*------------------------------------------------------------------------------*/
 int main(void)
 {
+
 /* ================== 1st step: Hardware Initialization ================= */
 	/* Performs the hardware initialization */
 #ifdef CFG_HW_INIT
@@ -60,29 +65,35 @@
 #ifdef CFG_DATAFLASH
 	load_df(AT91C_SPI_PCS_DATAFLASH, IMG_ADDRESS, IMG_SIZE, JUMP_ADDR);
 #endif
-
 #ifdef CFG_FLASH
 	load_flash(IMG_ADDRESS, IMG_SIZE, JUMP_ADDR);
+	dbg_print(">Flash ready\r\n");
 #endif
 
 	/* Load from Nandflash in RAM */
 #ifdef CFG_NANDFLASH
 	load_nandflash(IMG_ADDRESS, IMG_SIZE, JUMP_ADDR);
+	dbg_print(">NANDflash ready\r\n");
 #endif
 
 /* ==================== 3rd step:  Process the Image =================== */
 	/* Uncompress the image */
 #ifdef GUNZIP
-	decompress_image((void *)IMG_ADDRESS, (void *)JUMP_ADDR, IMG_SIZE);	/* NOT IMPLEMENTED YET */
+	decompress_image((void *)IMG_ADDRESS, (void *)JUMP_ADDR, IMG_SIZE);
+	/* NOT IMPLEMENTED YET */
+	dbg_print(">Decompress ready\r\n");
 #endif /* GUNZIP */
 
 /* ==================== 4th step: Start the application =================== */
 	/* Set linux arguments */
 #ifdef LINUX_ARG
 	linux_arg(LINUX_ARG);	/* NOT IMPLEMENTED YET */
+	dbg_print(">Linux ready\r\n");
 #endif /* LINUX_ARG */
-
+	dbg_print(">Start application at [");
+	dbg_print_hex(JUMP_ADDR);
+	dbg_print("]\r\n");
+	{ volatile unsigned int loop; for(loop = 200000; loop > 0; loop--);}
 	/* Jump to the Image Address */
 	return JUMP_ADDR;
 }
-
diff -urN at91bootstrap-2.3-0rig/Makefile at91bootstrap-2.3.4/Makefile
--- at91bootstrap-2.3-0rig/Makefile	2007-09-24 18:26:10.000000000 +0200
+++ at91bootstrap-2.3.4/Makefile	2007-09-24 20:56:53.000000000 +0200
@@ -8,7 +8,7 @@
 
 TOPDIR	:=	$(CURDIR)
 
-VERSION:=2.3.2
+VERSION:=2.3.4
 
 include	.config
 
@@ -17,7 +17,7 @@
 endif
 
 ifeq	($(CONFIG_SPI_CLK),)
-CONFIG_SPI_CLK=5000000
+CONFIG_SPI_CLK=33000000
 endif
 
 ifndef	MEMORY