refactored for java 1.6