implement everything except for partial