refactor obser coprocessor, add tests