Updated to add more documentation and use a proper Moose model