cleanup + documentation
cleanup + added test for 'preserve' argument
cleanup