Index: functions.c
===================================================================
--- functions.c	(revision f62550d81815e0f84b029c84468e499ddbdc5915)
+++ functions.c	(revision bfbf5902b7063f937a3de320ab9148e0363a9592)
@@ -3262,49 +3262,55 @@
 #ifdef HAVE_LIBZEPHYR
   if (zephyr) {
-    owl_fmtext_append_bold(&fm, "Zephyr users logged in:\n");
-    owl_list_create(&anyone);
-    ret=owl_zephyr_get_anyone_list(&anyone, filename);
-    if (ret) {
-      owl_fmtext_append_normal(&fm, "  Error opening file for zephyr buddies.\n");
+    if(!owl_global_is_havezephyr(&g)) {
+      owl_function_error("Zephyr currently not available.");
     } else {
-      j=owl_list_get_size(&anyone);
-      for (i=0; i<j; i++) {
-	user=owl_list_get_element(&anyone, i);
-	ret=ZLocateUser(user, &numlocs, ZAUTH);
-	if (ret!=ZERR_NONE) {
-	  owl_function_error("Error getting location for %s", user);
-	  continue;
-	}
-	
-	numlocs=200;
-	ret=ZGetLocations(location, &numlocs);
-	if (ret==0) {
-	  for (x=0; x<numlocs; x++) {
-	    line=malloc(strlen(location[x].host)+strlen(location[x].time)+strlen(location[x].tty)+100);
-	    tmp=short_zuser(user);
-	    sprintf(line, "  %-10.10s %-24.24s %-12.12s  %20.20s\n",
-		    tmp,
-		    location[x].host,
-		    location[x].tty,
-		    location[x].time);
-	    owl_fmtext_append_normal(&fm, line);
-	    owl_free(tmp);
-	    owl_free(line);
-	  }
-	  if (numlocs>=200) {
-	    owl_fmtext_append_normal(&fm, "  Too many locations found for this user, truncating.\n");
-	  }
-	}
+      owl_fmtext_append_bold(&fm, "Zephyr users logged in:\n");
+      owl_list_create(&anyone);
+      ret=owl_zephyr_get_anyone_list(&anyone, filename);
+      if (ret) {
+        owl_fmtext_append_normal(&fm, "  Error opening file for zephyr buddies.\n");
+      } else {
+        j=owl_list_get_size(&anyone);
+        for (i=0; i<j; i++) {
+          user=owl_list_get_element(&anyone, i);
+          ret=ZLocateUser(user, &numlocs, ZAUTH);
+          if (ret!=ZERR_NONE) {
+            owl_function_error("Error getting location for %s", user);
+            continue;
+          }
+
+          numlocs=200;
+          ret=ZGetLocations(location, &numlocs);
+          if (ret==0) {
+            for (x=0; x<numlocs; x++) {
+              line=malloc(strlen(location[x].host)+strlen(location[x].time)+strlen(location[x].tty)+100);
+              tmp=short_zuser(user);
+              sprintf(line, "  %-10.10s %-24.24s %-12.12s  %20.20s\n",
+                      tmp,
+                      location[x].host,
+                      location[x].tty,
+                      location[x].time);
+              owl_fmtext_append_normal(&fm, line);
+              owl_free(tmp);
+              owl_free(line);
+            }
+            if (numlocs>=200) {
+              owl_fmtext_append_normal(&fm, "  Too many locations found for this user, truncating.\n");
+            }
+          }
+        }
       }
-    }
-    owl_list_free_all(&anyone, owl_free);
+      owl_list_free_all(&anyone, owl_free);
+    } 
   }
 #endif
 
-  if(owl_perlconfig_is_function("owl::get_blist")) {
-      char * perlblist = owl_perlconfig_execute("owl::get_blist()");
-      if(perlblist) {
-          owl_fmtext_append_ztext(&fm, perlblist);
-          owl_free(perlblist);
+  if(aim && zephyr) {
+      if(owl_perlconfig_is_function("owl::get_blist")) {
+          char * perlblist = owl_perlconfig_execute("owl::get_blist()");
+          if(perlblist) {
+              owl_fmtext_append_ztext(&fm, perlblist);
+              owl_free(perlblist);
+          }
       }
   }
Index: owl.c
===================================================================
--- owl.c	(revision f62550d81815e0f84b029c84468e499ddbdc5915)
+++ owl.c	(revision bfbf5902b7063f937a3de320ab9148e0363a9592)
@@ -144,7 +144,6 @@
   /* zephyr init */
   ret=owl_zephyr_initialize();
-  if (ret) {
-    exit(1);
-  }
+  if (!ret)
+      owl_global_set_havezephyr(&g);
 #endif
   
@@ -201,7 +200,4 @@
   owl_function_debugmsg("startup: first available debugging message");
   owl_global_set_startupargs(&g, argcsave, argvsave);
-#ifdef HAVE_LIBZEPHYR
-  owl_global_set_havezephyr(&g);
-#endif
   owl_global_set_haveaim(&g);
 
Index: zephyr.c
===================================================================
--- zephyr.c	(revision 99dabeed7de6d19acb50f1e73aa0bfe5f9469c02)
+++ zephyr.c	(revision bfbf5902b7063f937a3de320ab9148e0363a9592)
@@ -34,6 +34,8 @@
 {
 #ifdef HAVE_LIBZEPHYR
-  unsuball();
-  ZClosePort();
+  if(owl_global_is_havezephyr(&g)) {
+    unsuball();
+    ZClosePort();
+  }
 #endif
   return(0);
@@ -43,5 +45,8 @@
 {
 #ifdef HAVE_LIBZEPHYR
-  return(ZPending());
+  if(owl_global_is_havezephyr(&g))
+    return(ZPending());
+  else
+    return 0;
 #else
   return(0);
