diff --git a/pymbolic/mapper/__init__.py b/pymbolic/mapper/__init__.py
index bac3b58c88b6cf894ee23765a4b35d15e4bfd5c9..0b59c975f1266f6ba8633dc8c19cc4d990c36e48 100644
--- a/pymbolic/mapper/__init__.py
+++ b/pymbolic/mapper/__init__.py
@@ -500,17 +500,9 @@ class IdentityMapper(Mapper):
                 for child, orig_child in zip(children, expr.children)):
             return expr
 
-        from pymbolic.primitives import flattened_sum
-        return flattened_sum(children)
-
-    def map_product(self, expr, *args, **kwargs):
-        children = [self.rec(child, *args, **kwargs) for child in expr.children]
-        if all(child is orig_child
-                for child, orig_child in zip(children, expr.children)):
-            return expr
+        return type(expr)(tuple(children))
 
-        from pymbolic.primitives import flattened_product
-        return flattened_product(children)
+    map_product = map_sum
 
     def map_quotient(self, expr, *args, **kwargs):
         numerator = self.rec(expr.numerator, *args, **kwargs)