diff -urN origsrc/constants.c src/constants.c
--- origsrc/constants.c	Sat Dec 30 02:38:14 2000
+++ src/constants.c	Sat Dec 30 03:08:10 2000
@@ -61,9 +61,9 @@
 /* EX_x */
 const char *exit_bits[] = {
   "DOOR",
-  "CLOSED",
-  "LOCKED",
   "PICKPROOF",
+  "LOCKED",
+  "CLOSED",
   "\n"
 };
 
diff -urN origsrc/db.c src/db.c
--- origsrc/db.c	Sat Dec 30 02:38:14 2000
+++ src/db.c	Sat Dec 30 02:49:24 2000
@@ -852,13 +852,12 @@
     log("SYSERR: Format error, %s", buf2);
     exit(1);
   }
-  if (t[0] == 1)
-    world[room].dir_option[dir]->exit_info = EX_ISDOOR;
-  else if (t[0] == 2)
-    world[room].dir_option[dir]->exit_info = EX_ISDOOR | EX_PICKPROOF;
-  else
-    world[room].dir_option[dir]->exit_info = 0;
 
+  /* Maintain compatibility with old stupid system */
+  if (t[0] == 2)
+    t[0]++;
+
+  world[room].dir_option[dir]->exit_info = t[0];
   world[room].dir_option[dir]->key = t[1];
   world[room].dir_option[dir]->to_room = t[2];
 }
diff -urN origsrc/oasis.h src/oasis.h
--- origsrc/oasis.h	Sat Dec 30 02:38:20 2000
+++ src/oasis.h	Sat Dec 30 03:04:56 2000
@@ -26,6 +26,7 @@
  * Macros, defines, structs and globals for the OLC suite.  You will need
  * to adjust these numbers if you ever add more.
  */
+#define NUM_EXIT_FLAGS      4
 #define NUM_ROOM_FLAGS 		16
 #define NUM_ROOM_SECTORS	10
 
diff -urN origsrc/redit.c src/redit.c
--- origsrc/redit.c	Sat Dec 30 02:38:14 2000
+++ src/redit.c	Sat Dec 30 03:04:58 2000
@@ -262,16 +262,7 @@
   if (OLC_EXIT(d) == NULL)
     CREATE(OLC_EXIT(d), struct room_direction_data, 1);
 
-  /*
-   * Weird door handling! 
-   */
-  if (IS_SET(OLC_EXIT(d)->exit_info, EX_ISDOOR)) {
-    if (IS_SET(OLC_EXIT(d)->exit_info, EX_PICKPROOF))
-      strcpy(buf2, "Pickproof");
-    else
-      strcpy(buf2, "Is a door");
-  } else
-    strcpy(buf2, "No door");
+  sprintbit(OLC_EXIT(d)->exit_info, exit_bits, buf2);
 
   get_char_colors(d->character);
   clear_screen(d);
@@ -280,7 +271,7 @@
 	  "%s2%s) Description :-\r\n%s%s\r\n"
 	  "%s3%s) Door name   : %s%s\r\n"
 	  "%s4%s) Key         : %s%d\r\n"
-	  "%s5%s) Door flags  : %s%s\r\n"
+      "%s5%s) Exit flags  : %s%s\r\n"
 	  "%s6%s) Purge exit.\r\n"
 	  "Enter choice, 0 to quit : ",
 
@@ -300,12 +291,20 @@
  */
 void redit_disp_exit_flag_menu(struct descriptor_data *d)
 {
+  int counter, columns = 0;
+
   get_char_colors(d->character);
-  sprintf(buf, "%s0%s) No door\r\n"
-	  "%s1%s) Closeable door\r\n"
-	  "%s2%s) Pickproof\r\n"
-	  "Enter choice : ", grn, nrm, grn, nrm, grn, nrm);
+  clear_screen(d);
+  for (counter = 0; counter < NUM_EXIT_FLAGS; counter++) {
+    sprintf(buf, "%s%2d%s) %-20.20s %s", grn, counter + 1, nrm,
+        exit_bits[counter], !(++columns % 2) ? "\r\n" : "");
+    SEND_TO_Q(buf, d);
+  }
+  sprintbit(OLC_EXIT(d)->exit_info, exit_bits, buf1);
+  sprintf(buf, "\r\nExit flags: %s%s%s\r\n"
+      "Enter exit flags, 0 to quit : ", cyn, buf1, nrm);
   SEND_TO_Q(buf, d);
+  OLC_MODE(d) = REDIT_EXIT_DOORFLAGS;
 }
 
 /*
@@ -640,22 +639,20 @@
 
   case REDIT_EXIT_DOORFLAGS:
     number = atoi(arg);
-    if (number < 0 || number > 2) {
-      SEND_TO_Q("That's not a valid choice!\r\n", d);
+    if (number < 0 || number > NUM_EXIT_FLAGS) {
+      SEND_TO_Q("That is not a valid choice!\r\n", d);
       redit_disp_exit_flag_menu(d);
-    } else {
-      /*
-       * Doors are a bit idiotic, don't you think? :) -- I agree. -gg
-       */
-      OLC_EXIT(d)->exit_info = (number == 0 ? 0 :
-				(number == 1 ? EX_ISDOOR :
-				(number == 2 ? EX_ISDOOR | EX_PICKPROOF : 0)));
+    } else if (number == 0)
+      redit_disp_exit_menu(d);
+    else {
       /*
-       * Jump back to the menu system.
+       * Toggle the bit.
        */
-      redit_disp_exit_menu(d);
+      TOGGLE_BIT(OLC_EXIT(d)->exit_info, 1 << (number - 1));
+      redit_disp_exit_flag_menu(d);
     }
     return;
+
 
   case REDIT_EXTRADESC_KEY:
     if (genolc_checkstring(d, arg))
diff -urN origsrc/structs.h src/structs.h
--- origsrc/structs.h	Sat Dec 30 02:38:20 2000
+++ src/structs.h	Sat Dec 30 02:49:18 2000
@@ -79,9 +79,9 @@
 
 /* Exit info: used in room_data.dir_option.exit_info */
 #define EX_ISDOOR		(1 << 0)   /* Exit is a door		*/
-#define EX_CLOSED		(1 << 1)   /* The door is closed	*/
+#define EX_PICKPROOF    (1 << 1)   /* Lock can't be picked  */
 #define EX_LOCKED		(1 << 2)   /* The door is locked	*/
-#define EX_PICKPROOF		(1 << 3)   /* Lock can't be picked	*/
+#define EX_CLOSED       (1 << 3)   /* The door is closed    */
 
 
 /* Sector types: used in room_data.sector_type */

