added documentation and lots more text to explain what this is about