Even further encapsulation of data types

It should now be a lot more difficult to use the classes incorrectly.