long version done