diff -u -r builder/UpgradeBuilder.cpp builder.kdc/UpgradeBuilder.cpp
--- builder/UpgradeBuilder.cpp	Thu Aug 23 03:57:45 2001
+++ builder.kdc/UpgradeBuilder.cpp	Tue Nov  6 19:50:41 2001
@@ -46,6 +46,7 @@
 	char*			what;
 	char*			release;
 	char*			version;
+	char*			mystery;
 	chunk**			chnk;
 	unsigned char	nchunks;
 	unsigned char	maxchunks;
@@ -149,6 +150,7 @@
 	cfg->what="an upgrade file\n";
 	cfg->release="\n";
 	cfg->version="\n";
+	cfg->mystery="\n";
 	cfg->chnk=(chunk**)malloc(128*sizeof(chunk*));
 	cfg->nchunks=0;
 	if (cfg->chnk) {
@@ -383,6 +385,13 @@
 				tchnk->length=0; // this gets filled in b< check_cfg
 				cfg->chnk[cfg->nchunks++]=tchnk;
 				PRINTCHUNK(tchnk);
+			} else if (strcmp(command,"mysteryfile")==0) {
+				ALLOCATECHUNK(tchnk);
+				tchnk->fname=strdup(option);
+				tchnk->typ=CHUNK_MYSTERY;
+				tchnk->length=0; // this gets filled in b< check_cfg
+				cfg->chnk[cfg->nchunks++]=tchnk;
+				PRINTCHUNK(tchnk);
 			} else if (strncmp(command,"flash",5)==0) {
 				ALLOCATECHUNK(tchnk);
 				if (strcmp(&(command[5]),"loader")==0) {
@@ -533,7 +542,8 @@
 		if ((cfg->chnk[cur_idx1]->typ == CHUNK_INFO)
 		||  (cfg->chnk[cur_idx1]->typ == CHUNK_WHAT)
 		||	(cfg->chnk[cur_idx1]->typ == CHUNK_RELEASE)
-		||	(cfg->chnk[cur_idx1]->typ == CHUNK_VERSION)) {
+		||	(cfg->chnk[cur_idx1]->typ == CHUNK_VERSION)
+		|| (cfg->chnk[cur_idx1]->typ == CHUNK_MYSTERY)) {
 			tmp_ch=cfg->chnk[cur_idx1];
 			if (cur_idx1 == (cfg->nchunks-1)) {
 				(cfg->nchunks)--;
@@ -675,6 +685,39 @@
 					fprintf(stdout,"Version length: %d\n",strlen(cfg->version));
 					fprintf(stdout,"Version: %s\n",cfg->version);
 					break;
+				case CHUNK_MYSTERY:	
+					cfg->ver_read=true;
+					if (STAT(tmp_ch->fname,&st)) {
+						fprintf(stderr,"ERROR: Could not stat file %s\n",tmp_ch->fname);
+						return true;
+					};
+					if (st.st_size==0)
+						fprintf(stderr,"Do you really intend not to set the mystery tag?\n");
+					cfg->mystery = (char*)(malloc(st.st_size+1));
+					fprintf(stdout,"Version file: %s\t size: %d\n",tmp_ch->fname,st.st_size);
+					memchr(cfg->mystery,0,st.st_size+1);
+					if (!(cfg->mystery)) {
+						fprintf(stderr,"ERROR: Out of memory trying to malloc space for mystery tag\n");
+						return true;
+					};
+					tfile=fopen(tmp_ch->fname,"rb");
+					if (!tfile) {
+						fprintf(stderr,"ERROR: Could not open mystery tag file\n");
+						PRINTERRCODE();
+						return true;
+					};
+					if ( fread(cfg->mystery,st.st_size,1,tfile) != 1 ) {
+						fprintf(stderr,"ERROR: Could not read >mystery< tag file %\n",tmp_ch->fname);
+						PRINTERRCODE();
+						return true;
+					};
+					cfg->mystery[st.st_size]=0;
+//					while ((cfg->mystery[strlen(cfg->mystery)]== 0x0A)||
+//							(cfg->mystery[strlen(cfg->mystery)]== 0x0D)) 
+//						cfg->mystery[strlen(cfg->mystery)]=0;
+					fprintf(stdout,"Mystery tag length: %d\n",strlen(cfg->mystery));
+					fprintf(stdout,"Mystery tag: %s\n",cfg->mystery);
+					break;
 				default:	fprintf(stderr,"ERROR: This error should not occure under any (even faulty) circumstances\n");
 							fprintf(stderr,"       In other words: The code is really fucked up if this error occures\n");
 							return true;
@@ -743,6 +786,7 @@
 	cfg->upgrade_size += 8+strlen(cfg->what);
 	cfg->upgrade_size += 8+strlen(cfg->version);
 	cfg->upgrade_size += 8+strlen(cfg->release);
+	cfg->upgrade_size += 8+strlen(cfg->mystery);
 	fprintf(stdout,"Total upgrade data size: %d bytes\n",cfg->upgrade_size);
 	fprintf(stdout,"Final upgrade file will contain %d bytes\n",cfg->upgrade_size+8);
 	if (!cfg->doit)
@@ -837,7 +881,20 @@
 		PRINTERRCODE();
 		return true;
 	};
-	fprintf(stdout,"Wrote version chunk.\nNow commencing with content chunks.\n");
+	fprintf(stdout,"Wrote version chunk.\n");
+	if (writeUL(f,CHUNK_MYSTERY)
+		|| writeUL(f,strlen(cfg->mystery))) {
+		fprintf(stderr,"ERROR: Could not write to upgrade file\n");
+		PRINTERRCODE();
+		return true;
+	};
+	if (fwrite(cfg->mystery,strlen(cfg->mystery),1,f)!=1) {
+		fprintf(stderr,"ERROR: Could not write to upgrade file\n");
+		PRINTERRCODE();
+		return true;
+	};
+	fprintf(stdout,"Wrote mystery chunk.\n");
+	fprintf(stdout,"Now commencing with content chunks.\n");
 	for (i=0; i<cfg->nchunks; i++) {
 		if (writeUL(f,cfg->chnk[i]->typ)
 		  || writeUL(f,cfg->chnk[i]->length)) {
diff -u -r builder/UpgradeSplitter.cpp builder.kdc/UpgradeSplitter.cpp
--- builder/UpgradeSplitter.cpp	Thu Aug 23 03:56:29 2001
+++ builder.kdc/UpgradeSplitter.cpp	Tue Nov  6 19:47:55 2001
@@ -326,6 +326,7 @@
 	char			*what		=NULL;
 	char			*release	=NULL;
 	char			*version	=NULL;
+	char			*mystery	=NULL;
 	char			*fnam		=NULL;
 	char			*tnam		=NULL;
 	unsigned long	flashaddr	=0;
@@ -622,6 +623,33 @@
 						(((chunktyp & 0x70)>>4)-(CHUNK_PUMPHDA1>>4)+'a'),
 						((chunktyp & 0x0f)-(CHUNK_PUMPHDA1 & 0x0f)+'1'),
 						fnam);
+				};
+				break;
+			case CHUNK_MYSTERY:	
+				mystery=(char*)malloc(chunklen+1);
+				if (!mystery) {
+					fprintf(stderr,"ERROR: out of memory reading \"mystery\" chunk\n");
+					return 1;
+				};
+				if (fread((void*)mystery,chunklen,1,cfg.infile)!=1) {
+					fprintf(stderr,"ERROR: Could not read \"mystery\" chunk\n");
+					fprintf(stderr,"Error code: %s\n",errstr(errno));
+					return 1;
+				};
+				mystery[chunklen]=0;
+				fprintf(stdout,"mystery=%s",mystery);
+				if (cfg.write_files) {
+					if (fnam) free(fnam);
+					fnam=getfreename("upg_mysteryfile");
+					if (!fnam) {
+						fprintf(stderr,"ERROR while finding free filename for \"mystery\" chunk\n");
+						return 1;
+					};
+					fprintf(cfg.ctlfile,"mysteryfile=%s\n",fnam);
+					if (writechunk(chunklen,mystery,fnam,&cfg)) {
+						fprintf(stderr,"ERROR writing \"mystery\" chunk\n");
+						return 1;
+					};
 				};
 				break;
 			default:	
diff -u -r builder/defines.h builder.kdc/defines.h
--- builder/defines.h	Thu Aug 23 03:55:53 2001
+++ builder.kdc/defines.h	Tue Nov  6 19:41:25 2001
@@ -7,6 +7,7 @@
 #define CHUNK_WHAT		0x01
 #define CHUNK_RELEASE	0x02
 #define CHUNK_VERSION	0x03
+#define CHUNK_MYSTERY	0x04
 
 #define CHUNK_FLASHLOADER	0x10
 #define CHUNK_FLASHKERNEL	0x11
