diff --git a/src/modules/Java/configure.in b/src/modules/Java/configure.in
index ffc6f4382a08528df76d9cae03ef42a566a73ef1..7468a457630403e8e6c580011e1833fa7d2eb601 100644
--- a/src/modules/Java/configure.in
+++ b/src/modules/Java/configure.in
@@ -6,6 +6,7 @@ AC_MODULE_INIT()
 OLD_LIBS=$LIBS
 OLD_LDFLAGS=$LDFLAGS
 OLD_CPPFLAGS=$CPPFLAGS
+OLD_LIBPATH=$LIBPATH
 JAVA_LIBS=""
 JAVA_LIBPATH=""
 JAVA_AVAILABLE=0
@@ -41,7 +42,15 @@ if test "x$with_java" = xyes; then
     else
       uname=/usr/bin/uname
     fi
-    if pike_cv_java_arch="`$uname -p || uname -p`"; then :; else pike_cv_java_arch=no; fi
+    if test aix = "$pike_cv_java_sysos" && aix_cputype=`/usr/sbin/lsattr -El proc0 | awk '$1=="type" { print $2; ok=1; exit } END { exit !ok }'`; then
+      case "$aix_cputype" in
+	PowerPC*) pike_cv_java_arch=powerpc;;
+	POWER*) pike_cv_java_arch=rs6000;;
+	*) pike_cv_java_arch="`echo $aix_cputype | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`";;
+      esac
+    else
+      if pike_cv_java_arch="`$uname -p || uname -p`"; then :; else pike_cv_java_arch=no; fi
+    fi
 
     dnl Linux kluge
 
@@ -79,6 +88,7 @@ if test "x$with_java" = xyes; then
           if ls "$tmp_java_home/lib/$pike_cv_java_arch/$pike_cv_java_threads_type"/libjvm* >/dev/null 2>&1 || \
 	    ls "$tmp_java_home/lib/$pike_cv_java_arch"/libjvm* >/dev/null 2>&1 || \
 	    ls "$tmp_java_home/lib/$pike_cv_java_arch"/classic/libjvm* >/dev/null 2>&1 || \
+	    ls "$tmp_java_home/bin"/classic/libjvm* >/dev/null 2>&1 || \
 	    ls "$tmp_java_home/Libraries"/libjvm* >/dev/null 2>&1; then
 	      pike_cv_java_java_home="$tmp_java_home"
 	  else
@@ -105,11 +115,11 @@ if test "x$with_java" = xyes; then
     fi
     for i in "$pike_cv_java_arch/$pike_cv_java_threads_type" \
              "$pike_cv_java_arch/classic" "$pike_cv_java_arch" \
-	     "$pike_cv_java_arch/server" "."; do
-      if test -d "$tmp_java_lib_dir/$i/." && ls "$tmp_java_lib_dir/$i/"lib* >/dev/null 2>&1; then
+	     "$pike_cv_java_arch/server" "." "../bin" "../bin/classic"; do
+      if test -d "$tmp_java_lib_dir/$i/." && ls $tmp_java_lib_dir/$i/lib* >/dev/null 2>&1; then
         pike_cv_java_lib_dir="$pike_cv_java_lib_dir$tmp_java_lib_dir/$i "
       else
-        :
+	:
       fi
     done
     if test -z "$pike_cv_java_lib_dir" ; then pike_cv_java_lib_dir=no; else
@@ -124,37 +134,44 @@ if test "x$with_java" = xyes; then
       LDFLAGS="-L$i -R$i ${LDFLAGS}"
       LINKER_OPTIONS="-L$i -R$i ${LINKER_OPTIONS}"
       JAVA_LIBPATH="${JAVA_LIBPATH}${JAVA_LIBPATH:+:}$i"
+      LIBPATH="${LIBPATH}${LIBPATH:+:}$i"
     done
+    export LIBPATH
   fi
 
   AC_MSG_CHECKING(for the Java include directory)
   AC_CACHE_VAL(pike_cv_java_include_dir, [
     pike_cv_java_include_dir=no
     for tmp_java_incdir in /usr/java* /usr/local/java* /usr/local/jdk* /usr/local/jre* "$pike_cv_java_java_home"/../.. "$pike_cv_java_java_home"/.. "$pike_cv_java_java_home" "$pike_java_user_include_directory"; do
-      if test -d $tmp_java_incdir/. -a -d $tmp_java_incdir/include/$pike_cv_java_sysos/.; then
-        if ls "$tmp_java_incdir/include/jni.h" >/dev/null 2>&1 ; then
-	  pike_cv_java_include_dir="$tmp_java_incdir/include"
+      if test -d $tmp_java_incdir/. && ls "$tmp_java_incdir/include/jni.h" >/dev/null 2>&1 ; then
+	 pike_cv_java_include_dir="$tmp_java_incdir/include"
+      else
+        if test -d $tmp_java_incdir/. -a -d $tmp_java_incdir/Headers/. &&\
+        	  ls "$tmp_java_incdir/Headers/jni.h" >/dev/null 2>&1 ; then
+	  pike_cv_java_include_dir="$tmp_java_incdir/Headers"
 	else
 	  :
 	fi
-      else
-        if test -d $tmp_java_incdir/. -a -d $tmp_java_incdir/Headers/.; then
-          if ls "$tmp_java_incdir/Headers/jni.h" >/dev/null 2>&1 ; then
-	    pike_cv_java_include_dir="$tmp_java_incdir/Headers"
-	  else
-	    :
-	  fi
-        else
-          :
-	fi
       fi
     done
   ])
   AC_MSG_RESULT($pike_cv_java_include_dir)
 
   if test "x$pike_cv_java_include_dir" = xno; then :; else
-    echo Adding $pike_cv_java_include_dir and $pike_cv_java_include_dir/$pike_cv_java_sysos to the include search path.
-    CPPFLAGS="-I$pike_cv_java_include_dir -I$pike_cv_java_include_dir/$pike_cv_java_sysos ${CPPFLAGS}"
+    echo "Adding $pike_cv_java_include_dir to the include search path."
+    CPPFLAGS="-I$pike_cv_java_include_dir ${CPPFLAGS}"
+    if test -d "$pike_cv_java_include_dir/$pike_cv_java_sysos/."; then
+      echo "Adding $pike_cv_java_include_dir/$pike_cv_java_sysos to the include search path."
+      CPPFLAGS="-I$pike_cv_java_include_dir/$pike_cv_java_sysos ${CPPFLAGS}"
+    else
+      :
+    fi
+    if test -d "$pike_cv_java_include_dir/$pike_cv_java_arch/."; then
+      echo "Adding $pike_cv_java_include_dir/$pike_cv_java_arch to the include search path."
+      CPPFLAGS="-I$pike_cv_java_include_dir/$pike_cv_java_arch ${CPPFLAGS}"
+    else
+      :
+    fi
   fi
 
   AC_MSG_CHECKING([for JavaVM (MacOS X)])
@@ -170,6 +187,11 @@ if test "x$with_java" = xyes; then
   ])
   AC_MSG_RESULT($pike_cv_java_javavm)
 
+  if test osf1 = "$pike_cv_java_sysos"; then
+    CPPFLAGS="-D_REENTRANT $CPPFLAGS"
+  else
+    :
+  fi
   AC_CHECK_HEADERS(jni.h winbase.h setjmp.h)
 
   pike_cv_java=no
@@ -397,6 +419,8 @@ else
   :
 fi
 
+LIBPATH="$OLD_LIBPATH"
+
 AC_SUBST(LINKER_OPTIONS)
 AC_SUBST(JAVA_LIBS)
 AC_SUBST(JAVA_AVAILABLE)