Reimplementing to match the Java solution architecture. Will refactor from there.