refactoring bucket fill and adding other varients