don't depend on declaration order