improved DO and IF sema