-    if ( $self->{shipto}->used ) {
-      $self->{shipto}->detach();
-      $self->{shipto}->save();
-      SL::Helper::Flash::flash('info', $::locale->text('Shipto is in use and was flagged invalid.'));
-    } else {
-      $self->{shipto}->delete();
-      SL::Helper::Flash::flash('info', $::locale->text('Shipto deleted.'));
-    }
+
+    $db->do_transaction(sub {
+      if ( $self->{shipto}->used ) {
+        $self->{shipto}->detach();
+        $self->{shipto}->save(cascade => 1);
+        SL::Helper::Flash::flash('info', $::locale->text('Shipto is in use and was flagged invalid.'));
+      } else {
+        $self->{shipto}->delete(cascade => 1);
+        SL::Helper::Flash::flash('info', $::locale->text('Shipto deleted.'));
+      }
+    }) || die($db->error);