Refactored and some good changes made, now spec, and finish out the api