Use a more declaritive system