create separate classes for inputDevices, some cleanup