some modification. draft 3