diff --git a/BUGS b/BUGS
index 12f245a73ce53000c92662ee2b69adef563b67ac..ef4213f2be304df5919d5fe4c23a66f5c40363a4 100644
--- a/BUGS
+++ b/BUGS
@@ -31,9 +31,6 @@ sysfile.c:
 general:
 	sizeof parens?
 
-usertests.c:
-	check for rm of . or ..
-
 L=$HOME/mit/l
 (for i in *.c; do xoc -x xgnu -x ./nodecleq.zeta --typesonly $i; done) 2>&1 | grep warning
 
diff --git a/usertests.c b/usertests.c
index a449ed0cb168899b47d0d6ea42592ce57da24b84..59cb0b3c92689c66b80f3cc2e692021e8ffee45c 100644
--- a/usertests.c
+++ b/usertests.c
@@ -984,6 +984,7 @@ fourteen(void)
 {
   int fd;
 
+  // DIRSIZ is 14.
   printf(1, "fourteen test\n");
 
   if(mkdir("12345678901234") != 0){
@@ -1019,6 +1020,45 @@ fourteen(void)
   printf(1, "fourteen ok\n");
 }
 
+void
+rmdot(void)
+{
+  printf(1, "rmdot test\n");
+  if(mkdir("dots") != 0){
+    printf(1, "mkdir dots failed\n");
+    exit();
+  }
+  if(chdir("dots") != 0){
+    printf(1, "chdir dots failed\n");
+    exit();
+  }
+  if(unlink(".") == 0){
+    printf(1, "rm . worked!\n");
+    exit();
+  }
+  if(unlink("..") == 0){
+    printf(1, "rm .. worked!\n");
+    exit();
+  }
+  if(chdir("/") != 0){
+    printf(1, "chdir / failed\n");
+    exit();
+  }
+  if(unlink("dots/.") == 0){
+    printf(1, "unlink dots/. worked!\n");
+    exit();
+  }
+  if(unlink("dots/..") == 0){
+    printf(1, "unlink dots/.. worked!\n");
+    exit();
+  }
+  if(unlink("dots") != 0){
+    printf(1, "unlink dots failed!\n");
+    exit();
+  }
+  printf(1, "rmdot ok\n");
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -1040,6 +1080,7 @@ main(int argc, char *argv[])
   preempt();
   exitwait();
 
+  rmdot();
   fourteen();
   bigfile();
   subdir();