- encapsulate code into classes - create separate subsystem for keyboard, mouse and joystick - group new subsystems into subsystemgroup "input"