large portion implemented