diff --git a/zephyr/aclocal.m4 b/zephyr/aclocal.m4
index fadf7b4..6106ecf 100644
--- a/zephyr/aclocal.m4
+++ b/zephyr/aclocal.m4
@@ -194,7 +194,8 @@ fi])
 dnl ----- Kerberos 4 -----
 
 AC_DEFUN([ATHENA_KRB4_CHECK],
-[AC_CHECK_FUNC(gethostbyname, :, AC_CHECK_LIB(nsl, gethostbyname))
+[AC_REQUIRE([AC_CANONICAL_TARGET])
+AC_CHECK_FUNC(gethostbyname, :, AC_CHECK_LIB(nsl, gethostbyname))
 AC_CHECK_FUNC(socket, :, AC_CHECK_LIB(socket, socket))
 AC_CHECK_LIB(gen, compile)
 if test "$krb4" != yes; then
@@ -210,7 +211,12 @@ AC_CHECK_LIB(krb4, krb_rd_req,
 			   [KRB4_LIBS="-lkrb -ldes"],
 			   [AC_MSG_ERROR(Kerberos 4 libraries not found)],
 			   -ldes)],
-	     -ldes425 -lkrb5 -lk5crypto -lcom_err)])
+	     -ldes425 -lkrb5 -lk5crypto -lcom_err)
+if test "$KRB4_LIBS" != "" ; then
+	case "$target_os" in
+	darwin*) KRB4_LIBS="$KRB4_LIBS -framework Kerberos"
+	esac
+fi])
 
 AC_DEFUN([ATHENA_KRB4],
 [AC_ARG_WITH(krb4,
diff --git a/zephyr/configure.in b/zephyr/configure.in
index 3c50b6f..485b6f3 100644
--- a/zephyr/configure.in
+++ b/zephyr/configure.in
@@ -10,6 +10,7 @@ AC_SUBST(lbindir)
 AC_SUBST(lsbindir)
 
 AC_CANONICAL_SYSTEM
+AC_CANONICAL_TARGET
 AC_DEFINE_UNQUOTED(MACHINE_TYPE, "$host")
 
 dnl Checks for programs.
@@ -112,6 +113,10 @@ if test "$krb5" != no; then
       KRB5_LIBS="-lkrb5 -l5crypto -lcom_err"
    fi
    AC_DEFINE(HAVE_KRB5)
+
+   case "$target_os" in
+   darwin*) KRB5_LIBS="$KRB5_LIBS -framework Kerberos"
+   esac
 fi
 AC_SUBST(KRB5_LIBS)
 
diff --git a/zephyr/lib/ZInit.c b/zephyr/lib/ZInit.c
index 6a9149a..e2efbd7 100644
--- a/zephyr/lib/ZInit.c
+++ b/zephyr/lib/ZInit.c
@@ -59,14 +59,20 @@ ZInitialize(void)
 #endif
 #endif
 
-#ifdef HAVE_KRB4
+#if defined(__APPLE__) && defined(__MACH__)
+    /* On OS X you don't need to initialize the Kerberos error tables
+       as long as you link with -framework Kerberos */
+    add_error_table(&et_zeph_error_table);
+#else
+# ifdef HAVE_KRB4
     initialize_krb_error_table();
-#endif
-#ifdef HAVE_KRB5
+# endif
+# ifdef HAVE_KRB5
     initialize_krb5_error_table();
-#endif
+# endif
 
     initialize_zeph_error_table();
+#endif
     
     (void) memset((char *)&__HM_addr, 0, sizeof(__HM_addr));
 
diff --git a/zephyr/server/main.c b/zephyr/server/main.c
index 5188200..7c34217 100644
--- a/zephyr/server/main.c
+++ b/zephyr/server/main.c
@@ -417,7 +417,13 @@ initialize(void)
     if (*my_realm) 
       strcpy(__Zephyr_realm, my_realm);
 #endif
-    init_zsrv_err_tbl();	/* set up err table */
+
+    /* set up err table */
+#if defined(__APPLE__) && defined(__MACH__)
+    add_error_table(&et_zsrv_error_table);
+#else
+    init_zsrv_err_tbl();
+#endif
 
     ZSetFD(srv_socket);		/* set up the socket as the input fildes */
 
