This is overengineering in retrospect