port abstraction
cleanup