I thought the whole point of this was to not throw exceptions and instead return nodes in a safe empty state...? If we are comfortable with throwing exceptions then we don't really need this stuff in here.