Restructured to make more sense.

Now uses require!