making boundary conditions ctor arguments rather than tempate parameters