diff --git a/src/sbbs3/install/sbbsinst.c b/src/sbbs3/install/sbbsinst.c
index 64aa0e85e25b7b6dad1c7aa9f57a497ea056294f..9aec0310f9ccda3a3677fceaa1bd07b802aff95a 100644
--- a/src/sbbs3/install/sbbsinst.c
+++ b/src/sbbs3/install/sbbsinst.c
@@ -418,6 +418,7 @@ void install_sbbs(struct dist_t *dist,struct server_ent_t *server)  {
 	char	cmd[MAX_PATH+1];
 	char	str[1024];
 	char	fname[MAX_PATH+1];
+	char	dstfname[MAX_PATH+1];
 	char	sbbsdir[9+MAX_PATH];
 	char	cvstag[7+MAX_PATH];
 	char	buf[1024];
@@ -470,45 +471,54 @@ void install_sbbs(struct dist_t *dist,struct server_ent_t *server)  {
 			break;
 		case DIST_SET:
 			for(i=0;dist->files[i][0];i++)  {
-				if((fout=open(dist->files[i],O_WRONLY|O_TRUNC|O_CREAT,S_IRUSR|S_IWUSR))<0)  {
-					printf("Could not download distfile to %s (%d)\n",dist->files[i],errno);
+				sprintf(fname,dist->files[i],params.sys_desc);
+				SAFECOPY(dstfname,fname);
+				if((fout=open(fname,O_WRONLY|O_TRUNC|O_CREAT,S_IRUSR|S_IWUSR))<0)  {
+					printf("Could not download distfile to %s (%d)\n",fname,errno);
 					exit(EXIT_FAILURE);
 				}
-				sprintf(str,dist->files[i],params.sys_desc);
-				sprintf(url,"%s%s",server->addr,str);
+				sprintf(url,"%s%s",server->addr,fname);
 				if((remote=ftpGetURL(url,ftp_user,ftp_pass,&ret1))==NULL)  {
 					/* retry without machine type in name */
-					SAFECOPY(fname,str);
-					sprintf(str,dist->files[i],params.name.sysname);
-					sprintf(url,"%s%s",server->addr,str);
-					if(strcmp(str,fname)==0	/* no change in name? */
+					SAFECOPY(str,fname);
+					sprintf(fname,dist->files[i],params.name.sysname);
+					sprintf(url,"%s%s",server->addr,fname);
+					if(stricmp(str,fname)==0	/* no change in name? */
 						|| (remote=ftpGetURL(url,ftp_user,ftp_pass,&ret1))==NULL)  {
-						printf("Cannot get distribution file %s!\n",str);
-						printf("%s\n- %s\n",url,ftpErrString(ret1));
-						unlink(str);
-						exit(EXIT_FAILURE);
+						/* retry using "all" for system name */
+						sprintf(fname,dist->files[i],"all");
+						if((remote=ftpGetURL(url,ftp_user,ftp_pass,&ret1))==NULL)  {
+							printf("Cannot get distribution file %s!\n",fname);
+							printf("%s\n- %s\n",url,ftpErrString(ret1));
+							close(fout);
+							unlink(dstfname);
+							exit(EXIT_FAILURE);
+						}
 					}
 				}
 				while((ret1=remote->read(remote,buf,sizeof(buf)))>0)  {
 					ret2=write(fout,buf,ret1);
 					if(ret2!=ret1)  {
-						printf("Error writing to %s\n",dist->files[i]);
-						unlink(dist->files[i]);
+						printf("Error writing to %s\n",dstfname);
+						close(fout);
+						unlink(dstfname);
 						exit(EXIT_FAILURE);
 					}
 				}
 				if(ret1<0)  {
-					printf("Error downloading %s\n",dist->files[i]);
-					unlink(dist->files[i]);
+					printf("Error downloading %s\n",fname);
+					close(fout);
+					unlink(dstfname);
 					exit(EXIT_FAILURE);
 				}
-				sprintf(cmd,"gzip -dc %s | tar -xvf -",dist->files[i]);
+				close(fout);
+				sprintf(cmd,"gzip -dc %s | tar -xvf -",dstfname);
 				if(system(cmd))  {
-					printf("Error extracting %s\n",dist->files[i]);
-					unlink(dist->files[i]);
+					printf("Error extracting %s\n",dstfname);
+					unlink(dstfname);
 					exit(EXIT_FAILURE);
 				}
-				unlink(dist->files[i]);
+				unlink(dstfname);
 			}
 			if(system(params.make_cmdline))  {
 				printf(MAKE_ERROR);
@@ -537,7 +547,7 @@ struct dist_t **
 get_distlist(void)
 {
 	int ret1,ret2,ret3,ret4;
-	int i,j;
+	int i;
 	char	in_line[256];
 	struct dist_t	**dist;
 	char	**file=NULL;
@@ -558,9 +568,11 @@ get_distlist(void)
 			allocfail(sizeof(struct dist_t));
 
 	sprintf(str,DEFAULT_LIBFILE,params.sys_desc);
-	if(!fexist(str))	/* use lib-linux.tgz if lib-linux-i686.tgz doesn't exist */
+	if(!fexistcase(str))	/* use lib-linux.tgz if lib-linux-i686.tgz doesn't exist */
 		sprintf(str,DEFAULT_LIBFILE,params.name.sysname);
-	if(fexist(DEFAULT_DISTFILE) && fexist(str))  {
+	if(!fexistcase(str))	/* use lib-all.tgz if all else fails */
+		sprintf(str,DEFAULT_LIBFILE,"all");
+	if(fexist(DEFAULT_DISTFILE) && fexistcase(str))  {
 		if((file=(char **)MALLOC(sizeof(char *)*MAX_DIST_FILES))==NULL)
 			allocfail(sizeof(char *)*MAX_DIST_FILES);
 		for(i=0;i<MAX_DIST_FILES;i++)