implemented everything except internal section