implementing remaining listeners; probably need to change generic typing in several classes