changed Parents from class to std::pair
changed reproduce to use boost::optional

added more initialization lists