diff --git a/group.lisp b/group.lisp
--- a/group.lisp
+++ b/group.lisp
@@ -211,6 +211,12 @@
         nil
         next-group)))
 
+(defun previously-selected-group (&optional (screen (current-screen)))
+  "Return the previously selected group or @code{NIL}."
+  (let ((group (cadr (screen-groups screen))))
+    (when (typep group 'group)
+      group)))
+
 (defun merge-groups (from-group to-group)
   "Merge all windows in FROM-GROUP into TO-GROUP."
   (dolist (window (group-windows from-group))
diff --git a/mode-line.lisp b/mode-line.lisp
--- a/mode-line.lisp
+++ b/mode-line.lisp
@@ -29,6 +29,10 @@
           *hidden-window-color*
 	  *screen-mode-line-format*
 	  *screen-mode-line-formatters*
+          *fmt-head-window-list-separator*
+          *fmt-group-list-separator*
+          *fmt-highlight*
+          *fmt-hightlight-psel*
           add-screen-mode-line-formatter
 	  enable-mode-line
 	  toggle-mode-line
@@ -104,6 +108,21 @@
 List the groups using @var{*group-format*}
 @end table")
 
+
+(defvar *fmt-head-window-list-separator* " "
+  "Specifies the separator string used by FMT-HEAD-WINDOW-LIST to separate the windows.")
+
+(defvar *fmt-group-list-separator* " "
+  "Specifies the separator string used by FMT-GROUP-LISP to separate the groups.")
+
+(defvar *fmt-highlight* "^R~A^r"
+  "Format string for highlighting a window or group in the mode-line.")
+
+(defvar *fmt-highlight-psel* "~A"
+  "Format string for highlighting the previously selected window or group.")
+
+
+
 (defvar *screen-mode-line-formatters* '((#\w fmt-window-list)
                                         (#\g fmt-group-list)
                                         (#\h fmt-head)
@@ -161,14 +180,17 @@
                   (sort-windows (mode-line-current-group ml)))))
 
 (defun fmt-group-list (ml)
-  "Given a group list all the groups in the group's screen."
-  (format nil "~{~a~^ ~}"
-          (mapcar (lambda (w)
-                    (let* ((str (format-expand *group-formatters* *group-format* w)))
-                      (if (eq w (current-group))
-                          (fmt-highlight str)
-                          str)))
-                  (sort-groups (group-screen (mode-line-current-group ml))))))
+  "Given a group list all the groups in the group's screen separated by *fmt-group-list-separator*."
+  (join *fmt-group-list-separator*
+        (mapcar (lambda (w)
+                  (let* ((str (format-expand *group-formatters* *group-format* w)))
+                    (cond ((eq w (current-group))
+                           (fmt-highlight str))
+                          ((eq w (previously-selected-group))
+                           (fmt-highlight-psel str))
+                          (t str))))
+                (sort-groups (group-screen (mode-line-current-group ml))))))
+
 
 (defun fmt-head (ml)
   (format nil "~d" (head-number (mode-line-head ml))))
@@ -177,18 +199,21 @@
   (format nil "~a" (group-name (mode-line-current-group ml))))
 
 (defun fmt-highlight (s)
-  (format nil "^R~A^r" s))
+  (format nil *fmt-highlight* s))
+
+(defun fmt-highlight-psel (s)
+  (format nil *fmt-highlight-psel* s))
 
 (defun fmt-head-window-list (ml)
-  "Using *window-format*, return a 1 line list of the windows, space seperated."
-  (format nil "~{~a~^ ~}"
-          (mapcar (lambda (w)
-                    (let ((str (format-expand *window-formatters* *window-format* w)))
-                      (if (eq w (current-window))
-                          (fmt-highlight str)
-                          str)))
-                  (sort1 (head-windows (mode-line-current-group ml) (mode-line-head ml))
-                         #'< :key #'window-number))))
+  "Using *window-format*, return a 1 line list of the windows, separated by *fmt-head-window-list-separator*."
+  (join *fmt-head-window-list-separator*
+        (mapcar (lambda (w)
+                  (let ((str (format-expand *window-formatters* *window-format* w)))
+                    (cond ((eq w (current-window)) (fmt-highlight str))
+                          ((eq w (previously-selected-window)) (fmt-highlight-psel str))
+                          (t str))))
+                (sort1 (head-windows (mode-line-current-group ml) (mode-line-head ml))
+                       #'< :key #'window-number))))
 
 (defun fmt-hidden (s)
   (format nil (concat "^[" *hidden-window-color* "~A^]") s))
diff --git a/primitives.lisp b/primitives.lisp
--- a/primitives.lisp
+++ b/primitives.lisp
@@ -112,6 +112,7 @@
           add-hook
           clear-window-placement-rules
           concat
+          join
           data-dir-file
           dformat
           define-frame-preference
@@ -973,6 +974,12 @@
 (defun concat (&rest strings)
   (apply 'concatenate 'string strings))
 
+(defun join (separator strings)
+  "Join a list of strings with separator."
+  (if (not (cdr strings))
+      (or (car strings) "")
+      (concatenate 'string (car strings) separator (join separator (cdr strings)))))
+
 (defvar *window-placement-rules* '()
   "List of rules governing window placement. Use define-frame-preference to
 add rules")
diff --git a/screen.lisp b/screen.lisp
--- a/screen.lisp
+++ b/screen.lisp
@@ -174,6 +174,13 @@
   "Return the current window on the current screen"
   (screen-current-window (current-screen)))
 
+(defun previously-selected-window (&optional (screen (current-screen)))
+  "Return the previously selected window or @code{NIL}."
+  (let ((window (cadr (screen-windows screen))))
+    (when (typep window 'window)
+      window)))
+
+
 (defun register-window (window)
   (setf (gethash (xlib:window-id (window-xwin window)) *xwin-to-window*) window))
 
