ready for testing, all features implemented