diff --git a/pymbolic/cse.py b/pymbolic/cse.py
index bb715816be98b8f71c828462a0196c3d63959a09..b7c6109088db2e81f523a2f8f87467211cace539 100644
--- a/pymbolic/cse.py
+++ b/pymbolic/cse.py
@@ -26,7 +26,11 @@ class NormalizedKeyGetter(object):
     def __call__(self, expr):
         expr = self.remove_cses(expr)
         if isinstance(expr, COMMUTATIVE_CLASSES):
-            return type(expr), frozenset(expr.children)
+            kid_count = {}
+            for child in expr.children:
+                kid_count[child] = kid_count.get(child, 0) + 1
+
+            return type(expr), frozenset(kid_count.iteritems())
         else:
             return expr