--- drivers/usb/storage/initializers.c.orig	2006-02-10 07:22:48.000000000 +0000
+++ drivers/usb/storage/initializers.c	2006-02-14 22:19:37.000000000 +0000
@@ -70,24 +70,31 @@
 	int res, partial;
 	static char init_string[] = "\xec\x0a\x06\x00$PCCHIPS";
 
-	US_DEBUGP("Sending UCR-61S2B initialization packet...\n");
+	if (strcmp(us->pusb_dev->serial, UCR61S3_DATE) < 0){
+		printk(KERN_INFO USB_STORAGE "Running extra initialization\n");
+		
+		US_DEBUGP("Sending UCR-61S2B initialization packet...\n");
 
-	bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
-	bcb->Tag = 0;
-	bcb->DataTransferLength = cpu_to_le32(0);
-	bcb->Flags = bcb->Lun = 0;
-	bcb->Length = sizeof(init_string) - 1;
-	memset(bcb->CDB, 0, sizeof(bcb->CDB));
-	memcpy(bcb->CDB, init_string, sizeof(init_string) - 1);
+		bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
+		bcb->Tag = 0;
+		bcb->DataTransferLength = cpu_to_le32(0);
+		bcb->Flags = bcb->Lun = 0;
+		bcb->Length = sizeof(init_string) - 1;
+		memset(bcb->CDB, 0, sizeof(bcb->CDB));
+		memcpy(bcb->CDB, init_string, sizeof(init_string) - 1);
 
-	res = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcb,
+		res = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcb,
 			US_BULK_CB_WRAP_LEN, &partial);
-	if(res)
-		return res;
+		if(res)
+			return res;
 
-	US_DEBUGP("Getting status packet...\n");
-	res = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, bcs,
+		US_DEBUGP("Getting status packet...\n");
+		res = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, bcs,
 			US_BULK_CS_WRAP_LEN, &partial);
 
-	return (res ? -1 : 0);
+		return (res ? -1 : 0);
+	} else {
+		//don't run the extra initialisation	
+		return 0;
+	}
 }
