added interface and user put method ~ not tested