Reimplement to use a backing array again

Fixes #2