Cleaned up run funtion to support more args