fix build order, use std::isdigit (with locale passed in) and use pointers for optional parameters... not boost::optional