fix virtual destructor
refactor directory structure