diff --git a/tools/gn/operators.cc b/tools/gn/operators.cc
index b5227f4..33fbcb2 100644
--- a/tools/gn/operators.cc
+++ b/tools/gn/operators.cc
@@ -283,7 +283,8 @@
   switch (to_remove.type()) {
     case Value::BOOLEAN:
     case Value::INTEGER:  // Filter out the individual int/string.
-    case Value::STRING: {
+    case Value::STRING:
+    case Value::SCOPE: {
       bool found_match = false;
       for (size_t i = 0; i < v.size(); /* nothing */) {
         if (v[i] == to_remove) {
diff --git a/tools/gn/operators_unittest.cc b/tools/gn/operators_unittest.cc
index 7e27fad..db90ac9 100644
--- a/tools/gn/operators_unittest.cc
+++ b/tools/gn/operators_unittest.cc
@@ -232,6 +232,45 @@
   EXPECT_EQ("bar", new_value->list_value()[0].string_value());
 }
 
+TEST(Operators, ListSubtractWithScope) {
+  Err err;
+  TestWithScope setup;
+
+  Scope* scope_a = new Scope(setup.settings());
+  Value scopeval_a(nullptr, std::unique_ptr<Scope>(scope_a));
+  scope_a->SetValue("a", Value(nullptr, "foo"), nullptr);
+
+  Scope* scope_b = new Scope(setup.settings());
+  Value scopeval_b(nullptr, std::unique_ptr<Scope>(scope_b));
+  scope_b->SetValue("b", Value(nullptr, "bar"), nullptr);
+
+  Value lval(nullptr, Value::LIST);
+  lval.list_value().push_back(scopeval_a);
+  lval.list_value().push_back(scopeval_b);
+
+  Scope* scope_a_other = new Scope(setup.settings());
+  Value scopeval_a_other(nullptr, std::unique_ptr<Scope>(scope_a_other));
+  scope_a_other->SetValue("a", Value(nullptr, "foo"), nullptr);
+
+  Value rval(nullptr, Value::LIST);
+  rval.list_value().push_back(scopeval_a_other);
+
+  TestBinaryOpNode node(Token::MINUS, "-");
+  node.SetLeftToValue(lval);
+  node.SetRightToValue(rval);
+  Value ret = ExecuteBinaryOperator(setup.scope(), &node, node.left(),
+                                    node.right(), &err);
+  ASSERT_FALSE(err.has_error());
+  ASSERT_EQ(Value::LIST, ret.type());
+
+  std::vector<Value> expected;
+  Scope* scope_expected = new Scope(setup.settings());
+  Value scopeval_expected(nullptr, std::unique_ptr<Scope>(scope_expected));
+  scope_expected->SetValue("b", Value(nullptr, "bar"), nullptr);
+  expected.push_back(scopeval_expected);
+  EXPECT_EQ(expected, ret.list_value());
+}
+
 TEST(Operators, IntegerAdd) {
   Err err;
   TestWithScope setup;
