diff --git a/src/xpdev/sopenfile.c b/src/xpdev/sopenfile.c
index ec778722b5e40b7abfd11d4c3c713d7b22d4c6cc..d2d70b86f4e75241e6a150b1c57b3072324daa88 100644
--- a/src/xpdev/sopenfile.c
+++ b/src/xpdev/sopenfile.c
@@ -8,11 +8,14 @@ int main(int argc, char** argv)
 	char* share = "NWA";
 	bool try_all = true;
 	bool loop = false;
+	bool rm = false;
 
 	if(argc < 2) {
 		printf("usage: sopenfile [-r] [-l] <path/filename> [share-mode]\n");
 		printf("\n");
 		printf("-r           open file read-only instead of read/write\n");
+		printf("-c           open file with create permissions\n");
+		printf("-R           remove file after open\n");
 		printf("-l           loop until failure\n");
 		printf("\n");
 		printf("share-mode:  N (deny-none)\n");
@@ -25,6 +28,14 @@ int main(int argc, char** argv)
 		access = O_RDONLY;
 		++argn;
 	}
+	if(strcmp(argv[argn], "-c") == 0) {
+		access |= O_CREAT;
+		++argv;
+	}
+	if(strcmp(argv[argn], "-R") == 0) {
+		rm = true;
+		++argn;
+	}
 	if(strcmp(argv[argn], "-l") == 0) {
 		loop = true;
 		++argn;
@@ -54,11 +65,13 @@ int main(int argc, char** argv)
 					return EXIT_FAILURE;
 			}
 			fprintf(stderr, "%s Deny-%c (share mode %x): ", path, toupper(share_flag), share_mode);
-			int file = sopen(path, access, share_mode);
+			int file = sopen(path, access, share_mode, DEFFILEMODE);
 			if(file < 0)
 				fprintf(stderr, "Error %d (%s)\n", errno, strerror(errno));
 			else {
 				printf("Success\n");
+				if(rm)
+					printf("remove(%s) = %d\n", path, unlink(path));
 				if(!try_all) {
 					fprintf(stderr, "Hit enter\n");
 					getchar();