We present the approach to teaching object-oriented concepts that we have adopted almost three years ago. Our integrated effort spreads over three one-semester courses, incorporated in a four year long undergraduate course, and is based on an objects-first approach coupled with contract-guided system development. Our aim is that students learn the fundamental skills to construct correct, robust, reuseable and extensible software systems. Some preliminary conclusions are presented.