changed the object model around spot to be much more OO-ish