test + implementation + cleanup