Add workspace abstraction, various logging and error handling