includes tests (in progress)