refator again