works for all operations and catches errors