diff --git a/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java b/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java
index 5d642e7..7097dd2 100644
--- a/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java
+++ b/src/main/java/org/apache/xmlbeans/impl/store/Xobj.java
@@ -1984,20 +1984,22 @@
         return null;
     }
 
+    @SuppressWarnings("unchecked")
     @Override
-    public void find_all_element_users(QName name, List<TypeStoreUser> fillMeUp) {
+    public <T extends XmlObject> void find_all_element_users(QName name, List<T> fillMeUp) {
         for (Xobj x = _firstChild; x != null; x = x._nextSibling) {
             if (x.isElem() && x._name.equals(name)) {
-                fillMeUp.add(x.getUser());
+                fillMeUp.add((T)x.getUser());
             }
         }
     }
 
+    @SuppressWarnings("unchecked")
     @Override
-    public void find_all_element_users(QNameSet names, List<TypeStoreUser> fillMeUp) {
+    public <T extends XmlObject>  void find_all_element_users(QNameSet names, List<T> fillMeUp) {
         for (Xobj x = _firstChild; x != null; x = x._nextSibling) {
             if (x.isElem() && names.contains(x._name)) {
-                fillMeUp.add(x.getUser());
+                fillMeUp.add((T)x.getUser());
             }
         }
     }
@@ -2338,11 +2340,12 @@
 
             assert m == n;
 
-            List<TypeStoreUser> elementsUser = new ArrayList<>();
+            List<XmlObject> elementsUser = new ArrayList<>();
 
             find_all_element_users(elementName, elementsUser);
 
             List<Xobj> elements = elementsUser.stream()
+                .map(x -> (TypeStoreUser)x)
                 .map(TypeStoreUser::get_store)
                 .map(x -> (Xobj)x)
                 .collect(Collectors.toList());
diff --git a/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java b/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java
index df74428..ce67dbc 100644
--- a/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java
+++ b/src/main/java/org/apache/xmlbeans/impl/values/TypeStore.java
@@ -176,14 +176,14 @@
      * given name owned by this typestore, or the empty array of
      * TypeStoreUsers if none was found.
      */
-    void find_all_element_users(QName name, List<TypeStoreUser> fillMeUp);
+    <T extends XmlObject> void find_all_element_users(QName name, List<T> fillMeUp);
 
 
     /**
      * Returns all TypeStoreUsers corresponding to elements with one
      * of the names is the QNameSet.
      */
-    void find_all_element_users(QNameSet name, List<TypeStoreUser> fillMeUp);
+    <T extends XmlObject> void find_all_element_users(QNameSet name, List<T> fillMeUp);
 
     /**
      * Inserts a new element at the position that will make it
