new separation of logic