all but three implemented