factor and cleanup code.