diff -upPr -x *.o ../stk/act.movement.c ./act.movement.c
--- ../stk/act.movement.c	Thu Jun 19 00:58:35 1997
+++ ./act.movement.c	Tue Oct  7 17:39:44 1997
@@ -46,7 +46,7 @@ int has_boat(struct char_data *ch)
   if (ROOM_IDENTITY(ch->in_room) == DEAD_SEA)
     return 1;
 */
-  if (IS_AFFECTED(ch, AFF_WATERWALK))
+  if (IS_AFFECTED(ch, AFF_WATERWALK) || GET_LEVEL(ch) >= LVL_IMMORT)
     return 1;
 
   /* non-wearable boats in inventory will do it */
diff -upPr -x *.o ../stk/fight.c ./fight.c
--- ../stk/fight.c	Thu Jun 19 00:58:37 1997
+++ ./fight.c	Tue Oct  7 17:41:25 1997
@@ -593,8 +593,8 @@ void damage(struct char_data * ch, struc
     return;			/* -je, 7/7/92 */
   }
 
-  /* peaceful rooms */
-  if (ch != victim && ROOM_FLAGGED(ch->in_room, ROOM_PEACEFUL)) {
+  /* peaceful rooms - but let imps attack */
+  if (ch != victim && ROOM_FLAGGED(ch->in_room, ROOM_PEACEFUL) && GET_LEVEL(ch) < LVL_IMPL) {
     send_to_char("This room just has such a peaceful, easy feeling...\r\n", ch);
     return;
   }
diff -upPr -x *.o ../stk/spell_parser.c ./spell_parser.c
--- ../stk/spell_parser.c	Thu Jun 19 00:58:38 1997
+++ ./spell_parser.c	Tue Oct  7 17:59:39 1997
@@ -326,12 +326,12 @@ int call_magic(struct char_data * caster
   if (spellnum < 1 || spellnum > TOP_SPELL_DEFINE)
     return 0;
 
-  if (ROOM_FLAGGED(caster->in_room, ROOM_NOMAGIC)) {
+  if (ROOM_FLAGGED(caster->in_room, ROOM_NOMAGIC) && GET_LEVEL(caster) < LVL_IMPL) {
     send_to_char("Your magic fizzles out and dies.\r\n", caster);
     act("$n's magic fizzles out and dies.", FALSE, caster, 0, 0, TO_ROOM);
     return 0;
   }
-  if (IS_SET(ROOM_FLAGS(caster->in_room), ROOM_PEACEFUL) &&
+  if (GET_LEVEL(caster) < LVL_IMPL && IS_SET(ROOM_FLAGS(caster->in_room), ROOM_PEACEFUL) &&
       (SINFO.violent || IS_SET(SINFO.routines, MAG_DAMAGE))) {
     send_to_char("A flash of white light fills the room, dispelling your "
 		 "violent magic!\r\n", caster);
