better OO design, better keyboard handling