This paper reports on work that is investigating the application of ontology engineering and natural language processing to software engineering. Our focus is the transition from requirements to design which remains one of the main challenges in software engineering. A key reason for why this is so challenging is that the vast majority of requirements documents are informal, written in natural language, whereas the final goal (code) is formal. System models, as an intermediate step between the requirements and code, help understand requirements. Even a seemingly precise requirements document typically contains a lot of inconsistencies and omissions, which become visible when we model the system. Our hypothesis is that these inconsistencies become apparent when we compare the project-specific model with a generic model of the application domain. To test our hypothesis, we need to transform natural language representations of requirements information into a form that facilitates comparison with a domain model. Naturally, we also need a domain model against which to compare and this presupposes a means to construct such models. In the paper, we extract a conceptual model (an ontology) and a behavioural model from different sources. An ontology is generated from a generic domain description, and a project-specific model is generated from requirements documents. For ontology generation, natural language processing techniques are used to aid the construction. By comparing the resulting models, we validate both of them. When inconsistencies are found, we generate feedback for the analyst. The generated feedback was validated on a case study and has proven useful to improve both requirements documents and models.