changed to remove boost dependence