This paper describes a method for solving the cyclic crew rostering problem (CCRP). This is the problem of cyclically ordering a set of duties for a number of crew members, such that several complex constraints are satisfied and such that the quality of the obtained roster is as high as possible. The described method was tested on a number of instances of NS, the largest operator of passenger trains in the Netherlands. These instances involve the generation of rosters for groups of train drivers or conductors of NS. The tests show that high quality solutions for practical instances of the CCRP can be generated in an acceptable amount of computing time. Finally, we describe an experiment where we constructed rosters in an automatic way for a group of conductors. They preferred our¿generated¿rosters over their own manually constructed rosters.