add SafeListener.java