added virtual function finish