Refactored to require initializers to take hashes. Optional requiremnts done.