Current implementation seems unnecessarily complicated. I need to re-evaluate the pros and cons of various implementations.