restructed everything