final version done