diff --git a/src/syncdraw/load.c b/src/syncdraw/load.c
index 98bd983124f2a0ee5bb00e68aacc5c114d75bdff..337ea65dc4e4b79d2a9fec5f469b9622a4e1f5af 100644
--- a/src/syncdraw/load.c
+++ b/src/syncdraw/load.c
@@ -345,8 +345,8 @@ display_ansi(char ch)
 			for (x = 0; x < l; x++)
 				if (ansicode[x] == ';')
 					y = x;
-			CursY = strtol(copy(ansicode, 0, y?(y - 1):0), NULL, 0);
-			CursX = strtol(copy(ansicode, y?(y + 1):(strlen(ansicode)-1), strlen(ansicode) - 1), NULL, 0);
+			CursY = strtol(copy(ansicode, 0, y?(y - 1):0), NULL, 0)-1;
+			CursX = strtol(copy(ansicode, y?(y + 1):(strlen(ansicode)-1), strlen(ansicode) - 1), NULL, 0)-1;
 			break;
 		case 'C':
 			ans_rep = strtol(ansicode, NULL, 0) + 1;
@@ -581,6 +581,12 @@ LoadFile(char *Name)
 {
 	FILE           *fp;
 	int             ch;
+	int				PCB=TRUE;
+	int				ANSI=TRUE;
+	int				SYNC=TRUE;
+	int				AVATAR=TRUE;
+	char			*ext;
+
 	erasescreen();
 	fp = fopen(Name, "rb");
 	if(fp==NULL)
@@ -598,11 +604,44 @@ LoadFile(char *Name)
 			CursY++;
 		} while (!feof(fp));
 	} else
+		/* Check for "known" extensions */
+		ext=getfext(Name);
+		if(ext) {
+			if(stricmp(ext,".asc")) {
+				PCB=FALSE;
+				ANSI=FALSE;
+				AVATAR=FALSE;
+			}
+			else if(stricmp(ext,".ans")) {
+				PCB=FALSE;
+				AVATAR=FALSE;
+				SYNC=FALSE;
+			}
+			else if(stricmp(ext,".avt")) {
+				PCB=FALSE;
+				ANSI=FALSE;
+				SYNC=FALSE;
+			}
+			else if(stricmp(ext,".pcb")) {
+				ANSI=FALSE;
+				AVATAR=FALSE;
+				SYNC=FALSE;
+			}
+		}
+	
 		do {
 			ch=fgetc(fp);
 			if (ch == 26 && !avt_command && !avt_rep)
 				break;
 			do {
+				if(AVATAR)
+					ch=display_avatar(ch);
+				if(SYNC)
+					ch=display_sync(ch);
+				if(ANSI)
+					ch=display_ansi(ch);
+				if(PCB)
+					ch=display_PCBoard(ch);
 				ch = display_PCBoard(display_ansi(display_sync(display_avatar(ch))));
 				if (ch > 0) {
 					if (CursX > 79) {