diff --git a/src/sbbs3/unbaja.c b/src/sbbs3/unbaja.c
index dda8646173ec2df91b63d8c8b2454d6dc97d6099..9298a281f7140aad5b8480308f5d3ea19ffb34f0 100644
--- a/src/sbbs3/unbaja.c
+++ b/src/sbbs3/unbaja.c
@@ -404,46 +404,58 @@ void write_logic(FILE *bin, FILE *src)
 		fputs("FALSE ",src);
 }
 
-void write_key(FILE *bin, FILE *src)
+void write_keys(FILE *bin, FILE *src)
+{
+	while(write_key(bin,src,TRUE));
+	fputc(' ',src);
+}
+
+int write_key(FILE *bin, FILE *src, int keyset)
 {
 	uchar uch;
 	fread(&uch,1,1,bin);
+	if(uch==0 && keyset)
+		return(uch);;
 	if(uch==CS_DIGIT)
-		fputs("DIGIT ",src);
+		fputs("DIGIT",src);
 	else if(uch==CS_EDIGIT)
-		fputs("EDIGIT ",src);
+		fputs("EDIGIT",src);
 	else if(uch==CR)
-		fputs("\\r ",src);
+		fputs("\\r",src);
 	else if(uch==LF)
-		fputs("\\n ",src);
+		fputs("\\n",src);
 	else if(uch==TAB)
-		fputs("\\t ",src);
+		fputs("\\t",src);
 	else if(uch==BS)
-		fputs("\\b ",src);
+		fputs("\\b",src);
 	else if(uch==BEL)
-		fputs("\\a ",src);
+		fputs("\\a",src);
 	else if(uch==FF)
-		fputs("\\f ",src);
+		fputs("\\f",src);
 	else if(uch==11)
-		fputs("\\v ",src);
+		fputs("\\v",src);
 	else if(uch & 0x80)
-		fprintf(src,"/%c ",uch&0x7f);
+		fprintf(src,"/%c",uch&0x7f);
 	else if(uch < ' ')
-		fprintf(src,"^%c ",uch+0x40);
+		fprintf(src,"^%c",uch+0x40);
 	else if(uch=='\\')
-		fputs("'\\' ",src);
+		fputs("'\\'",src);
 	else if(uch=='^')
-		fputs("'^' ",src);
+		fputs("'^'",src);
 	else if(uch=='/')
-		fputs("'/' ",src);
+		fputs("'/'",src);
 	else if(uch=='\'')
-		fputs("\\' ",src);
+		fputs("\\'",src);
 	else
-		fprintf(src,"%c ",uch);
+		fprintf(src,"%c",uch);
+	if(!keyset)
+		fputc(' ',src);
+	return(uch);;
 }
 
 void eol(FILE *src)
 {
+	fseek(src, ftell(src)-1,SEEK_SET);
 	fputc('\n',src);
 }
 
@@ -451,8 +463,13 @@ void eol(FILE *src)
 							/* printf("%s\n",name) */
 							
 
+#define KEYS(name)		WRITE_NAME(name); \
+						write_keys(bin,src); \
+						eol(src);			 \
+						break
+
 #define KEY(name)		WRITE_NAME(name); \
-						write_key(bin,src); \
+						write_key(bin,src,FALSE); \
 						eol(src);			 \
 						break
 
@@ -1634,12 +1651,12 @@ void decompile(FILE *bin, FILE *src)
 				MUCH("MULTINODE_CHAT");
 			case CS_GOTO:
 				fread(&ush,2,1,bin);
-				fprintf(src,"GOTO label_%04x",ush);
+				fprintf(src,"GOTO label_%04x ",ush);
 				eol(src);
 				break;
 			case CS_CALL:
 				fread(&ush,2,1,bin);
-				fprintf(src,"CALL label_%04x",ush);
+				fprintf(src,"CALL label_%04x ",ush);
 				eol(src);
 				break;
 			case CS_TOGGLE_NODE_MISC:
@@ -1717,9 +1734,9 @@ void decompile(FILE *bin, FILE *src)
 			case CS_READ_SIF:
 				STR("READ_SIF");
 			case CS_CMDKEYS:
-				STR("CMDKEYS");
+				KEYS("CMDKEYS");
 			case CS_COMPARE_KEYS:
-				STR("COMPARE_KEYS");
+				KEYS("COMPARE_KEYS");
 			case CS_STR_FUNCTION:
 				fread(&uch,1,1,bin);
 				switch(uch) {