implemented with a diffrent logic