Split out classes into separate files; some driver code