refactor, migrate functionality to protean-core