templated out the normalization so that it's a bit more versatile now