public function setParentThing(ThingInterface $parentThing)
    {
        // If the new parent thing differs from the current one
        if ($this->parentThing !== $parentThing) {
            $context = clone $this;
            $context->parentThing = $parentThing;
            return $context;
        }

        return $this;
    }