Refactored and decomposited
Exclude uploads dir from Git