diff --git a/cleancat/base.py b/cleancat/base.py
index <HASH>..<HASH> 100644
--- a/cleancat/base.py
+++ b/cleancat/base.py
@@ -930,7 +930,7 @@ class PolymorphicField(Dict):
             )
 
         return self.type_map[field_type].clean(
-            {k: v for k, v in value.items() if k != field_type}
+            {k: v for k, v in value.items() if k != self.type_field}
         )
 
 
diff --git a/tests/test_base.py b/tests/test_base.py
index <HASH>..<HASH> 100644
--- a/tests/test_base.py
+++ b/tests/test_base.py
@@ -1034,6 +1034,18 @@ def test_polymorphic_field():
         poly_field.clean({'type': '1', 'option-0': 'data'})
 
 
+def test_polymorphic_field_2():
+    class Option(Dict):
+        def clean(self, value):
+            value = super(Option, self).clean(value)
+            if 'option' not in value:
+                raise ValidationError('option not in data')
+            return value['option']
+
+    poly_field = PolymorphicField(type_map={'option': Option()})
+    assert poly_field.clean({'type': 'option', 'option': 1}) == 1
+
+
 def test_embedded_factory():
     class SumTwoInts(Schema):
         a = Integer(required=True)
Fix field removal in PolymorphicField