completed but not 100% working