Rewrote NPS class; it's a better-encapsulated object and should be reusable elsewhere.