Cleaned up the code a bit, and changed design.