add keyboard handling