broke out to library, added normalization and domain level