logic should be very clear