#15 Finish a basic implementation