Cleaned up the design a bit