splitting into separate worker classes