diff -ru screen-3.9.15/Makefile.in screen-3.9.15-rzm/Makefile.in
--- screen-3.9.15/Makefile.in	2003-03-13 12:19:53.000000000 +0100
+++ screen-3.9.15-rzm/Makefile.in	2003-03-21 21:33:39.000000000 +0100
@@ -76,7 +76,10 @@
 	$(INSTALL_PROGRAM) screen $(DESTDIR)$(bindir)/$(SCREEN)
 	-chown root $(DESTDIR)$(bindir)/$(SCREEN) && chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN)
 # This doesn't work if $(bindir)/screen is a symlink
-	-if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi
+# if we do not have the same version with .old
+	-if [ ! -f $(DESTDIR)/$(SCREEN).old ]; then if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi; fi
+# if we already have the same version with .old
+	-if [ -f $(DESTDIR)/$(SCREEN).old ]; then if [ -f $(DESTDIR)$(bindir)/screen.old ]; then cd $(DESTDIR)$(bindir); rm screen.old; ln -s $(SCREEN).old screen.old; fi
 	rm -f $(DESTDIR)$(bindir)/screen
 	(cd $(DESTDIR)$(bindir) && ln -sf $(SCREEN) screen)
 	cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS)
diff -ru screen-3.9.15/ansi.h screen-3.9.15-rzm/ansi.h
--- screen-3.9.15/ansi.h	2003-02-24 17:55:08.000000000 +0100
+++ screen-3.9.15-rzm/ansi.h	2003-03-21 21:33:35.000000000 +0100
@@ -108,11 +108,8 @@
 
 #define ASCII		 0
 
-#ifdef TOPSTAT
-#define STATLINE	 (0)
-#else
-#define STATLINE	 (D_height-1)
-#endif
+#define STATLINE()	 	(statuspos.row == STATUS_BOTTOM ? D_height-1 : 0)
+#define	STATCOL(width, len)	(statuspos.col == STATUS_LEFT ? 0 : D_width - D_status_len - 2)
 
 #ifdef ENCODINGS
 
diff -ru screen-3.9.15/comm.c screen-3.9.15-rzm/comm.c
--- screen-3.9.15/comm.c	2003-02-21 21:08:11.000000000 +0100
+++ screen-3.9.15-rzm/comm.c	2003-03-21 21:33:47.000000000 +0100
@@ -277,10 +277,12 @@
   { "silencewait",	ARGS_1 },
   { "sleep",		ARGS_1 },
   { "slowpaste",	NEED_FORE|ARGS_01 },
+  { "sockdir",		ARGS_1 },
   { "sorendition",      ARGS_012 },
   { "source",		ARGS_1 },
   { "split",		NEED_DISPLAY|ARGS_0 },
   { "startup_message",	ARGS_1 },
+  { "status",		ARGS_12 },
   { "stuff",		NEED_LAYER|ARGS_12 },
 #ifdef MULTIUSER
   { "su",		NEED_DISPLAY|ARGS_012 },
Only in screen-3.9.15-rzm: config.h
diff -ru screen-3.9.15/config.h.in screen-3.9.15-rzm/config.h.in
--- screen-3.9.15/config.h.in	2003-03-13 12:19:53.000000000 +0100
+++ screen-3.9.15-rzm/config.h.in	2003-03-21 21:33:47.000000000 +0100
@@ -52,11 +52,6 @@
 #undef SOCKDIR
 
 /*
- * Define this if the SOCKDIR is not shared between hosts.
- */
-#define SOCKDIR_IS_LOCAL_TO_HOST
-
-/*
  * Screen sources two startup files. First a global file with a path
  * specified here, second your local $HOME/.screenrc
  * Don't define this, if you don't want it.
@@ -117,12 +112,6 @@
 #undef LOCKPTY
 
 /*
- * If you'd rather see the status line on the first line of your
- * terminal rather than the last, define TOPSTAT.
- */
-#undef TOPSTAT
-
-/*
  * define DETACH can detach a session. An absolute 'must'.
  */
 #define DETACH
Only in screen-3.9.15-rzm: config.log
Only in screen-3.9.15-rzm: config.status
diff -ru screen-3.9.15/display.c screen-3.9.15-rzm/display.c
--- screen-3.9.15/display.c	2003-02-24 12:53:35.000000000 +0100
+++ screen-3.9.15-rzm/display.c	2003-03-21 21:33:35.000000000 +0100
@@ -100,6 +100,7 @@
 #endif
 int captionalways;
 int hardstatusemu = HSTATUS_IGNORE;
+struct statusposstr statuspos = { STATUS_BOTTOM, STATUS_LEFT };
 
 /*
  *  Default layer management
@@ -2209,8 +2210,8 @@
   if (!use_hardstatus || D_has_hstatus == HSTATUS_IGNORE || D_has_hstatus == HSTATUS_MESSAGE)
     {
       D_status = STATUS_ON_WIN;
-      debug1("using STATLINE %d\n", STATLINE);
-      GotoPos(0, STATLINE);
+      debug2("using STATLINE/COL %d,%d\n", STATLINE(), STATCOL(D_width, D_status_len) );
+      GotoPos(STATCOL(D_width, D_status_len), STATLINE());
       SetRendition(&mchar_so);
       InsertMode(0);
       AddStr(msg);
@@ -2246,8 +2247,8 @@
       ASSERT(D_obuffree == D_obuflen);
       /* this is copied over from RemoveStatus() */
       D_status = 0;
-      GotoPos(0, STATLINE);
-      RefreshLine(STATLINE, 0, D_status_len - 1, 0);
+      GotoPos(STATCOL(D_width, D_status_len), STATLINE());
+      RefreshLine(STATLINE(), STATCOL(D_width, D_status_len), STATCOL(D_width, D_status_len) + D_status_len - 1, 0);
       GotoPos(D_status_lastx, D_status_lasty);
       flayer = D_forecv ? D_forecv->c_layer : 0;
       if (flayer)
@@ -2297,8 +2298,8 @@
   oldflayer = flayer;
   if (where == STATUS_ON_WIN)
     {
-      GotoPos(0, STATLINE);
-      RefreshLine(STATLINE, 0, D_status_len - 1, 0);
+      GotoPos(STATCOL(D_width, D_status_len), STATLINE());
+      RefreshLine(STATLINE(), STATCOL(D_width, D_status_len), STATCOL(D_width, D_status_len) + D_status_len - 1, 0);
       GotoPos(D_status_lastx, D_status_lasty);
     }
   else
@@ -2317,7 +2318,7 @@
 {
   int l, i, ox, oy, max;
 
-  if (D_status == STATUS_ON_WIN && D_has_hstatus == HSTATUS_LASTLINE && STATLINE == D_height-1)
+  if (D_status == STATUS_ON_WIN && D_has_hstatus == HSTATUS_LASTLINE && STATLINE() == D_height-1)
     return;	/* sorry, in use */
 
   if (D_HS && D_has_hstatus == HSTATUS_HS)
@@ -2449,7 +2450,7 @@
   debug2("RefreshLine %d %d", y, from);
   debug2(" %d %d\n", to, isblank);
 
-  if (D_status == STATUS_ON_WIN && y == STATLINE)
+  if (D_status == STATUS_ON_WIN && y == STATLINE())
     return;	/* can't refresh status */
 
   if (isblank == 0 && D_CE && to == D_width - 1 && from < to)
diff -ru screen-3.9.15/display.h screen-3.9.15-rzm/display.h
--- screen-3.9.15/display.h	2002-02-11 12:46:46.000000000 +0100
+++ screen-3.9.15-rzm/display.h	2003-03-21 21:33:35.000000000 +0100
@@ -325,3 +325,13 @@
 #define HSTATUS_MESSAGE		2
 #define HSTATUS_HS		3
 #define HSTATUS_ALWAYS		(1<<2)
+
+struct statusposstr
+{
+	int	row, col;
+};
+
+#define STATUS_TOP		1
+#define STATUS_BOTTOM		0
+#define STATUS_LEFT		0
+#define STATUS_RIGHT		1
Only in screen-3.9.15-rzm/doc: Makefile
diff -ru screen-3.9.15/etc/screenrc screen-3.9.15-rzm/etc/screenrc
--- screen-3.9.15/etc/screenrc	2003-03-13 12:19:54.000000000 +0100
+++ screen-3.9.15-rzm/etc/screenrc	2003-03-21 21:36:17.000000000 +0100
@@ -32,6 +32,12 @@
 
 defscrollback 1000
 
+# more convenient status messages location
+# status	top right
+
+# in shared mode screen will not wipe out sockets of another hosts sharing the same socket directory
+# sockdir	shared
+
 # don't kill window after the process died
 # zombie "^["
 
diff -ru screen-3.9.15/extern.h screen-3.9.15-rzm/extern.h
--- screen-3.9.15/extern.h	2003-02-24 18:01:17.000000000 +0100
+++ screen-3.9.15-rzm/extern.h	2003-03-21 21:33:47.000000000 +0100
@@ -324,6 +324,7 @@
 extern void  ReceiveMsg __P((void));
 extern void  SendCreateMsg __P((char *, struct NewWindow *));
 extern int   SendErrorMsg __P((char *, char *));
+extern int   sockdir;
 
 /* misc.c */
 extern char *SaveStr __P((const char *));
diff -ru screen-3.9.15/process.c screen-3.9.15-rzm/process.c
--- screen-3.9.15/process.c	2003-02-24 18:09:37.000000000 +0100
+++ screen-3.9.15-rzm/process.c	2003-03-21 21:33:47.000000000 +0100
@@ -63,6 +63,7 @@
 extern int TtyMode, auto_detach, use_altscreen;
 extern int iflag, maxwin;
 extern int use_hardstatus, visual_bell;
+extern struct statusposstr statuspos;
 #ifdef COLOR
 extern int attr2color[][4];
 extern int nattr2color;
@@ -2525,6 +2526,67 @@
       if (msgok)
         Msg(0, "messages displayed on %s", use_hardstatus ? "hardstatus line" : "window");
       break;
+    case RC_STATUS:
+      if (display)
+	{
+	  Msg(0, "%s", "");	/* wait till mintime (keep gcc quiet) */
+          RemoveStatus();
+	}
+      {
+	int	i = 0;
+	while ( (i <= 1) && args[i]) {
+          if ( (strcmp(args[i], "top") == 0) || (strcmp(args[i], "up") == 0) )
+	  {
+	    statuspos.row = STATUS_TOP;
+	  }
+	  else
+	  {
+            if ( (strcmp(args[i], "bottom") == 0) || (strcmp(args[i], "down") == 0) )
+	    {
+	      statuspos.row = STATUS_BOTTOM;
+	    }
+	    else
+	    {
+              if (strcmp(args[i], "left") == 0)
+	      {
+	        statuspos.col = STATUS_LEFT;
+	      }
+              else
+              {
+                if (strcmp(args[i], "right") == 0)
+	        {
+	          statuspos.col = STATUS_RIGHT;
+	        }
+		else
+		{
+	          Msg(0, "%s: usage: status [top|up|down|bottom] [left|right]", rc_name);
+	          break;
+		}
+              }
+	    }
+	  }
+	  i++;
+	}
+      }
+      break;
+    case RC_SOCKDIR:
+      if ( args[0] && (strcmp(args[0], "local") == 0) )
+      {
+        sockdir = SOCKDIR_LOCAL;
+      }
+      else
+      {
+        if ( args[0] && (strcmp(args[0], "shared") == 0) )
+	{
+	  sockdir = SOCKDIR_SHARED;
+	}
+	else
+	{
+	  Msg(0, "%s: usage: sockdir local|shared", rc_name);
+	  break;
+        }
+      }
+      break;
     case RC_CAPTION:
       if (strcmp(args[0], "always") == 0 || strcmp(args[0], "splitonly") == 0)
 	{
diff -ru screen-3.9.15/screen.h screen-3.9.15-rzm/screen.h
--- screen-3.9.15/screen.h	2002-03-28 19:00:58.000000000 +0100
+++ screen-3.9.15-rzm/screen.h	2003-03-21 21:33:47.000000000 +0100
@@ -287,3 +287,8 @@
   int bps;	/* bits per seconds */
   int sym;	/* symbol defined in ttydev.h */
 };
+
+
+/* sockdir values */
+#define	SOCKDIR_LOCAL	0	/* single host, default */
+#define	SOCKDIR_SHARED	1	/* many hosts use the socket directory, e.g. via NFS */
diff -ru screen-3.9.15/socket.c screen-3.9.15-rzm/socket.c
--- screen-3.9.15/socket.c	2003-02-24 18:08:34.000000000 +0100
+++ screen-3.9.15-rzm/socket.c	2003-03-21 21:33:47.000000000 +0100
@@ -57,6 +57,7 @@
 #endif
 static void  FinishAttach __P((struct msg *));
 static void  AskPassword __P((struct msg *));
+int sockdir = SOCKDIR_LOCAL;
 
 
 extern char *RcFileName, *extra_incap, *extra_outcap;
