diff --git a/lib/weblib.php b/lib/weblib.php
index aa16dec..16e657f 100644
--- a/lib/weblib.php
+++ b/lib/weblib.php
@@ -3001,6 +3001,12 @@ function print_footer($course=NULL, $usercourse=NULL, $return=false) {
         $menu = '';
     }
 
+/// Provide UI with cluster node info if required
+    $clusterinfo = '';
+    if ($CFG->clusternode) {
+        $clusterinfo = cluster_node_string();
+    }
+
 /// there should be exactly the same number of open containers as after the header
     if ($THEME->open_header_containers != open_containers()) {
         debugging('Unexpected number of open containers: '.open_containers().', expecting '.$THEME->open_header_containers, DEBUG_DEVELOPER);
@@ -3490,7 +3496,8 @@ function user_login_string($course=NULL, $user=NULL) {
                       href=\"$CFG->wwwroot/course/view.php?id=$course->id&amp;switchrole=0&amp;sesskey=".sesskey()."\">".get_string('switchrolereturn').'</a>)';
         } else {
             $loggedinas = $realuserinfo.get_string('loggedinas', 'moodle', $username).' '.
-                      " (<a $CFG->frametarget href=\"$CFG->wwwroot/login/logout.php?sesskey=".sesskey()."\">".get_string('logout').'</a>)';
+                      " (<a $CFG->frametarget
+                      href=\"$CFG->wwwroot/login/logout.php?sesskey=".sesskey()."\">".get_string('logout').'</a>)';
         }
     } else {
         $loggedinas = get_string('loggedinnot', 'moodle').
@@ -7098,5 +7105,35 @@ function auth_get_plugin_title ($authtype) {
     return $authtitle;
 }
 
+/**
+ * Sets the string to display in a multiple app server 
+ * environment.
+ * @param NONE
+ * @return string
+ */
+function cluster_node_string ( ) {
+    global $CFG;
+    $appserverid = '';
+    $label = '';
+    if ($CFG->clusterstring) {
+        $label = $CFG->clusterstring;
+    } 
+    $appserverid = get_cluster_node_id();
+    return '<div class="clusterinfo">'.$label.' '.$appserverid.'</div>'; 
+}
+
+/**
+ * Return the short hostname of the underlying host
+ * Useful in a clustered AppServer environment.
+ * @param NONE
+ * @return string
+ */
+function get_cluster_node_id ( ) {
+    $NODEID = php_uname('n');
+    $NODE_ARRAY = preg_split("/\./", $NODEID);
+    return $NODE_ARRAY[0];
+}
+
 // vim:autoindent:expandtab:shiftwidth=4:tabstop=4:tw=140:
 ?>
+
diff --git a/theme/standard/styles_fonts.css b/theme/standard/styles_fonts.css
index 120f9b4..ad1ddc2 100644
--- a/theme/standard/styles_fonts.css
+++ b/theme/standard/styles_fonts.css
@@ -189,6 +189,11 @@ a.useredit, a:hover.useredit, .blink {
   font-size:0.8em;
 }
 
+/* quick add defaults for cluster info */
+.clusterinfo {
+  font-size:0.8em;
+}
+
 /* Accessibility: only certain fonts support Unicode chars like &#x25BA; in IE6 */
 .arrow, .arrow_button input {
   font-family: Arial,Helvetica,Courier,sans-serif;
