diff --git a/src/sbbs3/smbutil.c b/src/sbbs3/smbutil.c
index da75db0ee370475e6cb67b7a80c13d0acb662bc2..b1e51c64d2f94e873bf1a76b8ee46423ea1a6f71 100644
--- a/src/sbbs3/smbutil.c
+++ b/src/sbbs3/smbutil.c
@@ -1363,7 +1363,7 @@ time_t checktime(void)
 /***************/
 int main(int argc, char **argv)
 {
-	char	cmd[128]="",*p,*s;
+	char	cmd[128]="",*p;
 	char	path[MAX_PATH+1];
 	char*	to=NULL;
 	char*	to_number=NULL;
@@ -1485,13 +1485,11 @@ int main(int argc, char **argv)
 				SAFECOPY(cmd,argv[x]);
 			else {
 				SAFECOPY(smb.file,argv[x]);
-				p=strrchr(smb.file,'.');
-				s=strrchr(smb.file,'/');
-				if(s==NULL)
-					s=strrchr(smb.file,'\\');
-				if(p>s) *p=0;
+				if((p=getfext(smb.file))!=NULL && stricmp(p,".shd")==0)
+					*p=0;	/* Chop off .shd extension, if supplied on command-line */
+
 				sprintf(path,"%s.shd",smb.file);
-				if(!fexist(path) && !create) {
+				if(!fexistcase(path) && !create) {
 					fprintf(stderr,"\n%s doesn't exist (use -c to create)\n",path);
 					exit(1);
 				}
@@ -1551,7 +1549,12 @@ int main(int argc, char **argv)
 							y=strlen(cmd)-1;
 							break;
 						case 'P':
+							if((i=smb_lock(&smb))!=0) {
+								fprintf(stderr,"\n\7!smb_lock returned %d: %s\n",i,smb.last_error);
+								return(i);
+							}
 							packmsgs(atol(cmd+y+1));
+							smb_unlock(&smb);
 							y=strlen(cmd)-1;
 							break;
 						case 'R':