Final Version --- Waiting for final test