diff --git a/Lib/_abcoll.py b/Lib/_abcoll.py
index 7890e97..d3e23c1 100644
--- a/Lib/_abcoll.py
+++ b/Lib/_abcoll.py
@@ -393,6 +393,10 @@
 
 class KeysView(MappingView, Set):
 
+    @classmethod
+    def _from_iterable(self, it):
+        return set(it)
+
     def __contains__(self, key):
         return key in self._mapping
 
@@ -405,6 +409,10 @@
 
 class ItemsView(MappingView, Set):
 
+    @classmethod
+    def _from_iterable(self, it):
+        return set(it)
+
     def __contains__(self, item):
         key, value = item
         try:
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index 85bf248..be41fcd 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -13,7 +13,7 @@
 from collections import Hashable, Iterable, Iterator
 from collections import Sized, Container, Callable
 from collections import Set, MutableSet
-from collections import Mapping, MutableMapping
+from collections import Mapping, MutableMapping, KeysView, ItemsView, UserDict
 from collections import Sequence, MutableSequence
 from collections import ByteString
 
@@ -516,6 +516,31 @@
         self.validate_abstract_methods(MutableMapping, '__contains__', '__iter__', '__len__',
             '__getitem__', '__setitem__', '__delitem__')
 
+    def test_MutableMapping_subclass(self):
+        # Test issue 9214
+        mymap = UserDict()
+        mymap['red'] = 5
+        self.assert_(isinstance(mymap.keys(), Set))
+        self.assert_(isinstance(mymap.keys(), KeysView))
+        self.assert_(isinstance(mymap.items(), Set))
+        self.assert_(isinstance(mymap.items(), ItemsView))
+
+        mymap = UserDict()
+        mymap['red'] = 5
+        z = mymap.keys() | {'orange'}
+        self.assertEqual(type(z), set)
+        list(z)
+        mymap['blue'] = 7               # Shouldn't affect 'z'
+        self.assertEqual(sorted(z), ['orange', 'red'])
+
+        mymap = UserDict()
+        mymap['red'] = 5
+        z = mymap.items() | {('orange', 3)}
+        self.assertEqual(type(z), set)
+        list(z)
+        mymap['blue'] = 7               # Shouldn't affect 'z'
+        self.assertEqual(sorted(z), [('orange', 3), ('red', 5)])
+
     def test_Sequence(self):
         for sample in [tuple, list, bytes, str]:
             self.assertTrue(isinstance(sample(), Sequence))
