I love this, but perhaps it deserves it's own function somewhere. Actually, I wonder if some of the well-named helper functions you've added should go in another file somewhere. It might make NValue a bit shorter without hurting readability. Your call.