start on factory re-write