Working Version - almost Complete