nearly done with implementation