cleaned up listener