Refactored
Refactored: generalize further than the JRE has types
Refactored
Naming of Runnable
Fixed compile error on Java 8 + Maven