diff --git a/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt b/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
index 0d67214be912712c68f7c2ca5b94b80f1245d146..ed32741d960c1928d3e2716f067753abff4dbc80 100644
--- a/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
+++ b/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
@@ -301,7 +301,12 @@ class ApiAnalyzer(
     }
 
     fun generateInheritedStubs(filterEmit: Predicate<Item>, filterReference: Predicate<Item>) {
-        packages.allClasses().forEach {
+        // When analyzing libraries we may discover some new classes during traversal; these aren't
+        // part of the API but may be super classes or interfaces; these will then be added into the
+        // package class lists, which could trigger a concurrent modification, so create a snapshot
+        // of the class list and iterate over it:
+        val allClasses = packages.allClasses().toList()
+        allClasses.forEach {
             if (filterEmit.test(it)) {
                 generateInheritedStubs(it, filterEmit, filterReference)
             }
diff --git a/src/main/resources/version.properties b/src/main/resources/version.properties
index 2139cec290dc630c8a915e245203d749a0ce9fd9..579154c85e1672425b5da310e96dd26512e5c7a6 100644
--- a/src/main/resources/version.properties
+++ b/src/main/resources/version.properties
@@ -2,4 +2,4 @@
 # Version definition
 # This file is read by gradle build scripts, but also packaged with metalava
 # as a resource for the Version classes to read.
-metalavaVersion=1.2.8
+metalavaVersion=1.2.9