add boost::optional