Abstract rewrite (closes #15)

The previous abstract was a bit confusing.