diff --git a/src/DataTree.cc b/src/DataTree.cc
index af09e30c3aec9ad2dbf95a54a1088aa1917e89e8..3574b557415b9bee68d72db853326b0fc9651b14 100644
--- a/src/DataTree.cc
+++ b/src/DataTree.cc
@@ -210,6 +210,11 @@ DataTree::AddMinus(expr_t iArg1, expr_t iArg2)
   if (iArg1 == iArg2)
     return Zero;
 
+  // Simplify x-(-y) in x+y
+  if (auto uarg2 = dynamic_cast<UnaryOpNode *>(iArg2);
+      uarg2 && uarg2->op_code == UnaryOpcode::uminus)
+    return AddPlus(iArg1, uarg2->arg);
+
   return AddBinaryOp(iArg1, BinaryOpcode::minus, iArg2);
 }