throw instead of exiting
refactor to handle arrays of target input/output
update dependencies