broke up Job Implementation into separate classes