must redo all logic