diff -BbuprN -x '*.0' srcbak/act.movement.c src/act.movement.c
--- srcbak/act.movement.c	2004-09-27 12:48:23.000000000 -0400
+++ src/act.movement.c	2004-09-27 12:22:14.000000000 -0400
@@ -46,6 +46,32 @@ ACMD(do_sleep);
 ACMD(do_wake);
 ACMD(do_follow);
 
+void current_update(void)
+{
+struct char_data *i, *next_char;
+char buf[MAX_STRING_LENGTH];
+int door =0;
+ 
+ 
+  /* characters */
+  for (i = character_list; i; i = next_char) {
+    next_char = i->next;
+
+    if ((GET_POS(i) == POS_STANDING) && ROOM_FLAGGED(IN_ROOM(i), ROOM_CURRENT) &&
+	((door = rand_number(0, 18)) < NUM_OF_DIRS) && CAN_GO(i, door) && 
+        !FIGHTING(i) && !IS_NPC(i) && (SECT(IN_ROOM(i)) == SECT_WATER_NOSWIM)) {
+         snprintf(buf, sizeof(buf),"The strong current carries you %s!\r\n",
+                  dirs[door]);
+         send_to_char(i, buf);
+         snprintf(buf, sizeof(buf), "$n is taken %s by the rough current!",
+                    dirs[door]);
+         act(buf, FALSE, i, 0, 0, TO_NOTVICT);
+      perform_move(i, door, 1);
+    }
+  }
+}
+
+
 
 /* simple function to determine if char can walk on water */
 int has_boat(struct char_data *ch)
diff -BbuprN -x '*.0' srcbak/comm.c src/comm.c
--- srcbak/comm.c	2004-09-27 12:48:23.000000000 -0400
+++ src/comm.c	2004-09-27 12:23:17.000000000 -0400
@@ -1029,6 +1029,9 @@ void heartbeat(int heart_pulse)
   if (!(heart_pulse % PULSE_TIMESAVE))
     save_mud_time(&time_info);
 
+  if (!(heart_pulse % PULSE_CURRENT))
+    current_update();
+
   /* Every pulse! Don't want them to stink the place up... */
   extract_pending_chars();
 }
diff -BbuprN -x '*.0' srcbak/db.h src/db.h
--- srcbak/db.h	2004-09-27 12:48:23.000000000 -0400
+++ src/db.h	2004-09-27 12:21:52.000000000 -0400
@@ -151,6 +151,7 @@ void	reset_char(struct char_data *ch);
 void	free_char(struct char_data *ch);
 void	save_player_index(void);
 long  get_ptable_by_name(const char *name);
+void    current_update(void);
 
 struct obj_data *create_obj(void);
 void	clear_object(struct obj_data *obj);
diff -BbuprN -x '*.0' srcbak/oasis.h src/oasis.h
--- srcbak/oasis.h	2004-09-27 12:48:23.000000000 -0400
+++ src/oasis.h	2004-09-27 12:24:47.000000000 -0400
@@ -31,7 +31,7 @@
  * Macros, defines, structs and globals for the OLC suite.  You will need
  * to adjust these numbers if you ever add more.
  */
-#define NUM_ROOM_FLAGS 		18
+#define NUM_ROOM_FLAGS 		19
 #define NUM_ROOM_SECTORS	10
 
 #define NUM_MOB_FLAGS		19
diff -BbuprN -x '*.0' srcbak/structs.h src/structs.h
--- srcbak/structs.h	2004-09-27 12:48:23.000000000 -0400
+++ src/structs.h	2004-09-27 12:24:27.000000000 -0400
@@ -101,6 +101,7 @@
 #define ROOM_BFS_MARK	15  /* (R) breath-first srch mrk	*/
 #define ROOM_VEHICLE    16  /* Requires a vehicle to pass       */
 #define ROOM_UNDERGROUND        17  /* Room is below ground      */
+#define ROOM_CURRENT     18
 
 
 /* Exit info: used in room_data.dir_option.exit_info */
@@ -661,6 +662,7 @@
 #define PULSE_SANITY	(30 RL_SEC)
 #define PULSE_USAGE	(5 * 60 RL_SEC)	/* 5 mins */
 #define PULSE_TIMESAVE	(30 * 60 RL_SEC) /* should be >= SECS_PER_MUD_HOUR */
+#define PULSE_CURRENT   (10 RL_SEC)
 
 /* Variables for the output buffering system */
 #define MAX_SOCK_BUF            (12 * 1024) /* Size of kernel's sock buf   */
