Rewritten for Java 1.6 compatibility