diff --git a/pytools/__init__.py b/pytools/__init__.py
index f86c3b08bb3aca511d33021b4ca8053c94c1a679..f480c2cfbc3f7d76ff4451a53e7947b025945783 100644
--- a/pytools/__init__.py
+++ b/pytools/__init__.py
@@ -138,14 +138,17 @@ class RecordWithoutPickling(object):
                 fields.add(key)
                 setattr(self, key, value)
 
-    def copy(self, **kwargs):
+    def get_copy_kwargs(self, **kwargs):
         for f in self.__class__.fields:
             if f not in kwargs:
                 try:
                     kwargs[f] = getattr(self, f)
                 except AttributeError:
                     pass
-        return self.__class__(**kwargs)
+        return kwargs
+
+    def copy(self, **kwargs):
+        return self.__class__(**self.get_copy_kwargs(**kwargs))
 
     def __repr__(self):
         return "%s(%s)" % (