Refactor bucket model

Following my own advice
Javadoc here could have a little more detail