separation of logic