I realised today that my simple buffered input system was't quite up to speed with what I needed. In order to get combos and hook up a Quake style console I needed the ability store sequenced input too. So now my system has evolved a little, I still have KeyState, MouseState and JoystickState systems for reading the devices, but they now have an overall InputManager class that stores a queue of events. The system can now be used for simple buffered input as well as an input event journal.
I'll be working on the Console class today.