add Keyboard and Checkpointable abstractions