diff --git a/lib/java/build.xml b/lib/java/build.xml
index 05cf9cd..6778f2c 100644
--- a/lib/java/build.xml
+++ b/lib/java/build.xml
@@ -42,7 +42,7 @@
   </target>
 
   <target name="compile" depends="init">
-    <javac srcdir="${src}" destdir="${build}" source="1.5" debug="true"/>
+    <javac srcdir="${src}" destdir="${build}" source="1.5" debug="true" classpath="${cpath}" />
   </target>
 
   <target name="javadoc" depends="init">
diff --git a/lib/java/src/org/apache/thrift/server/TNonblockingServer.java b/lib/java/src/org/apache/thrift/server/TNonblockingServer.java
index a6620eb..95d81e2 100644
--- a/lib/java/src/org/apache/thrift/server/TNonblockingServer.java
+++ b/lib/java/src/org/apache/thrift/server/TNonblockingServer.java
@@ -29,8 +29,8 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+
+import org.apache.log4j.Logger;
 
 import org.apache.thrift.TByteArrayOutputStream;
 import org.apache.thrift.TException;
@@ -199,7 +199,7 @@
       serverTransport_.listen();
       return true;
     } catch (TTransportException ttx) {
-      LOGGER.log(Level.SEVERE, "Failed to start listening on server socket!", ttx);
+      LOGGER.error("Failed to start listening on server socket!", ttx);
       return false;
     }
   }
@@ -224,7 +224,7 @@
       selectThread_.start();
       return true;
     } catch (IOException e) {
-      LOGGER.log(Level.SEVERE, "Failed to start selector thread!", e);
+      LOGGER.error("Failed to start selector thread!", e);
       return false;
     }
   }
@@ -356,11 +356,11 @@
             // deal with writes
             handleWrite(key);
           } else {
-            LOGGER.log(Level.WARNING, "Unexpected state in select! " + key.interestOps());
+            LOGGER.warn("Unexpected state in select! " + key.interestOps());
           }
         }
       } catch (IOException e) {
-        LOGGER.log(Level.WARNING, "Got an IOException while selecting!", e);
+        LOGGER.warn("Got an IOException while selecting!", e);
       }
     }
 
@@ -393,7 +393,7 @@
         clientKey.attach(frameBuffer);
       } catch (TTransportException tte) {
         // something went wrong accepting.
-        LOGGER.log(Level.WARNING, "Exception trying to accept!", tte);
+        LOGGER.warn("Exception trying to accept!", tte);
         tte.printStackTrace();
         if (clientKey != null) cleanupSelectionkey(clientKey);
         if (client != null) client.close();
@@ -512,7 +512,7 @@
           // pull out the frame size as an integer.
           int frameSize = buffer_.getInt(0);
           if (frameSize <= 0) {
-            LOGGER.severe("Read an invalid frame size of " + frameSize
+            LOGGER.error("Read an invalid frame size of " + frameSize
               + ". Are you using TFramedTransport on the client side?");
             return false;
           }
@@ -520,7 +520,7 @@
           // if this frame will always be too large for this server, log the
           // error and close the connection.
           if (frameSize + 4 > MAX_READ_BUFFER_BYTES) {
-            LOGGER.severe("Read a frame size of " + frameSize
+            LOGGER.error("Read a frame size of " + frameSize
               + ", which is bigger than the maximum allowable buffer size for ALL connections.");
             return false;
           }
@@ -569,7 +569,7 @@
       }
 
       // if we fall through to this point, then the state must be invalid.
-      LOGGER.severe("Read was called but state is invalid (" + state_ + ")");
+      LOGGER.error("Read was called but state is invalid (" + state_ + ")");
       return false;
     }
 
@@ -583,7 +583,7 @@
             return false;
           }
         } catch (IOException e) {
-          LOGGER.log(Level.WARNING, "Got an IOException during write!", e);
+          LOGGER.warn("Got an IOException during write!", e);
           return false;
         }
 
@@ -594,7 +594,7 @@
         return true;
       }
 
-      LOGGER.severe("Write was called, but state is invalid (" + state_ + ")");
+      LOGGER.error("Write was called, but state is invalid (" + state_ + ")");
       return false;
     }
 
@@ -613,7 +613,7 @@
         close();
         selectionKey_.cancel();
       } else {
-        LOGGER.severe(
+        LOGGER.error(
           "changeSelectInterest was called, but state is invalid ("
           + state_ + ")");
       }
@@ -682,9 +682,9 @@
         responseReady();
         return;
       } catch (TException te) {
-        LOGGER.log(Level.WARNING, "Exception while invoking!", te);
+        LOGGER.warn("Exception while invoking!", te);
       } catch (Exception e) {
-        LOGGER.log(Level.SEVERE, "Unexpected exception while invoking!", e);
+        LOGGER.error("Unexpected exception while invoking!", e);
       }
       // This will only be reached when there is an exception.
       state_ = AWAITING_CLOSE;
@@ -721,7 +721,7 @@
         }
         return true;
       } catch (IOException e) {
-        LOGGER.log(Level.WARNING, "Got an IOException in internalRead!", e);
+        LOGGER.warn("Got an IOException in internalRead!", e);
         return false;
       }
     }
diff --git a/lib/java/src/org/apache/thrift/server/TSimpleServer.java b/lib/java/src/org/apache/thrift/server/TSimpleServer.java
index c053d97..b3ee5ad 100644
--- a/lib/java/src/org/apache/thrift/server/TSimpleServer.java
+++ b/lib/java/src/org/apache/thrift/server/TSimpleServer.java
@@ -19,9 +19,6 @@
 
 package org.apache.thrift.server;
 
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
 import org.apache.thrift.TException;
 import org.apache.thrift.TProcessor;
 import org.apache.thrift.TProcessorFactory;
@@ -31,6 +28,7 @@
 import org.apache.thrift.transport.TTransport;
 import org.apache.thrift.transport.TTransportFactory;
 import org.apache.thrift.transport.TTransportException;
+import org.apache.log4j.Logger;
 
 /**
  * Simple singlethreaded server for testing.
@@ -94,7 +92,7 @@
     try {
       serverTransport_.listen();
     } catch (TTransportException ttx) {
-      LOGGER.log(Level.SEVERE, "Error occurred during listening.", ttx);
+      LOGGER.error("Error occurred during listening.", ttx);
       return;
     }
 
@@ -119,11 +117,11 @@
         // Client died, just move on
       } catch (TException tx) {
         if (!stopped_) {
-          LOGGER.log(Level.SEVERE, "Thrift error occurred during processing of message.", tx);
+          LOGGER.error("Thrift error occurred during processing of message.", tx);
         }
       } catch (Exception x) {
         if (!stopped_) {
-          LOGGER.log(Level.SEVERE, "Error occurred during processing of message.", x);
+          LOGGER.error("Error occurred during processing of message.", x);
         }
       }
 
diff --git a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
index 68280ab..ebc5a9b 100644
--- a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
+++ b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java
@@ -29,14 +29,14 @@
 import org.apache.thrift.transport.TTransport;
 import org.apache.thrift.transport.TTransportException;
 import org.apache.thrift.transport.TTransportFactory;
+import org.apache.log4j.Logger;
+import org.apache.log4j.Level;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 
 /**
@@ -172,7 +172,7 @@
     try {
       serverTransport_.listen();
     } catch (TTransportException ttx) {
-      LOGGER.log(Level.SEVERE, "Error occurred during listening.", ttx);
+      LOGGER.error("Error occurred during listening.", ttx);
       return;
     }
 
@@ -186,7 +186,7 @@
       } catch (TTransportException ttx) {
         if (!stopped_) {
           ++failureCount;
-          LOGGER.log(Level.WARNING, "Transport error occurred during acceptance of message.", ttx);
+          LOGGER.warn("Transport error occurred during acceptance of message.", ttx);
         }
       }
     }
@@ -253,9 +253,9 @@
       } catch (TTransportException ttx) {
         // Assume the client died and continue silently
       } catch (TException tx) {
-        LOGGER.log(Level.SEVERE, "Thrift error occurred during processing of message.", tx);
+        LOGGER.error("Thrift error occurred during processing of message.", tx);
       } catch (Exception x) {
-        LOGGER.log(Level.SEVERE, "Error occurred during processing of message.", x);
+        LOGGER.error("Error occurred during processing of message.", x);
       }
 
       if (inputTransport != null) {
diff --git a/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java b/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java
index 4a714a6..89cdb58 100644
--- a/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java
+++ b/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java
@@ -19,11 +19,11 @@
 
 package org.apache.thrift.transport;
 
+import org.apache.log4j.Logger;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 /**
  * This is the most commonly used base transport. It takes an InputStream
@@ -100,7 +100,7 @@
       try {
         inputStream_.close();
       } catch (IOException iox) {
-        LOGGER.log(Level.WARNING, "Error closing input stream.", iox);
+        LOGGER.warn("Error closing input stream.", iox);
       }
       inputStream_ = null;
     }
@@ -108,7 +108,7 @@
       try {
         outputStream_.close();
       } catch (IOException iox) {
-        LOGGER.log(Level.WARNING, "Error closing output stream.", iox);
+        LOGGER.warn("Error closing output stream.", iox);
       }
       outputStream_ = null;
     }
diff --git a/lib/java/src/org/apache/thrift/transport/TServerSocket.java b/lib/java/src/org/apache/thrift/transport/TServerSocket.java
index e6cd113..796cd65 100644
--- a/lib/java/src/org/apache/thrift/transport/TServerSocket.java
+++ b/lib/java/src/org/apache/thrift/transport/TServerSocket.java
@@ -19,13 +19,13 @@
 
 package org.apache.thrift.transport;
 
+import org.apache.log4j.Logger;
+
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 /**
  * Wrapper around ServerSocket for Thrift.
@@ -105,7 +105,7 @@
       try {
         serverSocket_.setSoTimeout(0);
       } catch (SocketException sx) {
-        LOGGER.log(Level.WARNING, "Could not set socket timeout.", sx);
+        LOGGER.error("Could not set socket timeout.", sx);
       }
     }
   }
@@ -129,7 +129,7 @@
       try {
         serverSocket_.close();
       } catch (IOException iox) {
-        LOGGER.log(Level.WARNING, "Could not close server socket.", iox);
+        LOGGER.warn("Could not close server socket.", iox);
       }
       serverSocket_ = null;
     }
diff --git a/lib/java/src/org/apache/thrift/transport/TSocket.java b/lib/java/src/org/apache/thrift/transport/TSocket.java
index 333e9be..cdf1bcc 100644
--- a/lib/java/src/org/apache/thrift/transport/TSocket.java
+++ b/lib/java/src/org/apache/thrift/transport/TSocket.java
@@ -19,14 +19,14 @@
 
 package org.apache.thrift.transport;
 
+import org.apache.log4j.Logger;
+
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.SocketException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 /**
  * Socket implementation of the TTransport interface. To be commented soon!
@@ -68,7 +68,7 @@
       socket_.setSoLinger(false, 0);
       socket_.setTcpNoDelay(true);
     } catch (SocketException sx) {
-      LOGGER.log(Level.WARNING, "Could not configure socket.", sx);
+      LOGGER.warn("Could not configure socket.", sx);
     }
 
     if (isOpen()) {
@@ -118,7 +118,7 @@
       socket_.setTcpNoDelay(true);
       socket_.setSoTimeout(timeout_);
     } catch (SocketException sx) {
-      LOGGER.log(Level.WARNING, "Could not configure socket.", sx);
+      LOGGER.error("Could not configure socket.", sx);
     }
   }
 
@@ -132,7 +132,7 @@
     try {
       socket_.setSoTimeout(timeout);
     } catch (SocketException sx) {
-      LOGGER.log(Level.WARNING, "Could not set socket timeout.", sx);
+      LOGGER.warn("Could not set socket timeout.", sx);
     }
   }
 
@@ -197,7 +197,7 @@
       try {
         socket_.close();
       } catch (IOException iox) {
-        LOGGER.log(Level.WARNING, "Could not close socket.", iox);
+        LOGGER.warn("Could not close socket.", iox);
       }
       socket_ = null;
     }
