refactored into symfony bundle