diff --git a/release_scripts/APIUpdate/APIUpdate-1.0-jar-with-dependencies.jar b/release_scripts/APIUpdate/APIUpdate-1.0-jar-with-dependencies.jar
index b6576b81ea638cf08bcc03c549674884b66956e0..fc34986fb016af59cdaa3a7176ca60d41a9fdcde 100644
Binary files a/release_scripts/APIUpdate/APIUpdate-1.0-jar-with-dependencies.jar and b/release_scripts/APIUpdate/APIUpdate-1.0-jar-with-dependencies.jar differ
diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/APIDiff.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/APIDiff.java
index 7860ec068c26269ba6031b2632c5d6a9a84f5047..40f961968287ada6616d174c272dcf6de5ee50ea 100644
--- a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/APIDiff.java
+++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/APIDiff.java
@@ -81,15 +81,15 @@ static List<Pair<File, File>> getCommonJars(File prev, File curr) {
 
         Map<String, File> prevJars = getJars(prev);
         Map<String, File> currJars = getJars(curr);
+        Set<String> combined = new HashSet<>(prevJars.keySet());
+        combined.addAll(currJars.keySet());
 
         List<Pair<File, File>> retMapping = new ArrayList<>();
 
-        for (String prevKey : (Iterable<String>) prevJars.keySet().stream().sorted(StringUtils::compareIgnoreCase)::iterator) {
+        for (String prevKey : (Iterable<String>) combined.stream().sorted(StringUtils::compareIgnoreCase)::iterator) {
             File prevFile = prevJars.get(prevKey);
             File curFile = currJars.get(prevKey);
-            if (prevFile != null && curFile != null) {
-                retMapping.add(Pair.of(prevFile, curFile));
-            }
+            retMapping.add(Pair.of(prevFile, curFile));
         }
 
         return retMapping;
diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/Main.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/Main.java
index 78853c4a69c0f23cb6f5efb74cf34cc2846bc427..be3814b42353add4eef0b8f0e62e0ed3158d569c 100644
--- a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/Main.java
+++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/Main.java
@@ -56,24 +56,43 @@ public static void main(String[] args) {
 
         for (Pair<File, File> prevCurJars : APIDiff.getCommonJars(cliArgs.getPreviousVersPath(), cliArgs.getCurrentVersPath())) {
             try {
-                ModuleVersionNumbers prevVersionNums = ModuleUpdates.getVersionsFromJar(prevCurJars.getLeft());
+                File previous = prevCurJars.getLeft();
+                File current  = prevCurJars.getRight();
+                
+                // if no current, then we can't update; just continue
+                if (current == null || !current.exists()) {
+                    if (previous != null) {
+                        LOGGER.log(Level.WARNING, "No matching current jar found for previous jar: " + previous);
+                    }
+                    continue;
+                }
+                
+                String jarFileName = current.getName();
+                
+                ModuleVersionNumbers projectedVersionNums;
+                if (previous == null || !previous.exists()) {
+                    projectedVersionNums = ModuleVersionNumbers.getNewModule(current.getName());
+                    outputNewModule(jarFileName, projectedVersionNums);
+                } else {
+                    ModuleVersionNumbers prevVersionNums = ModuleUpdates.getVersionsFromJar(prevCurJars.getLeft());
 
-                ComparisonRecord record = APIDiff.getComparison(
-                        cliArgs.getPreviousVersion(),
-                        cliArgs.getCurrentVersion(),
-                        prevCurJars.getLeft(),
-                        prevCurJars.getRight());
+                    ComparisonRecord record = APIDiff.getComparison(
+                            cliArgs.getPreviousVersion(),
+                            cliArgs.getCurrentVersion(),
+                            prevCurJars.getLeft(),
+                            prevCurJars.getRight());
 
-                ModuleVersionNumbers projectedVersionNums = ModuleUpdates.getModuleVersionUpdate(prevVersionNums, record.getChangeType());
+                    projectedVersionNums = ModuleUpdates.getModuleVersionUpdate(prevVersionNums, record.getChangeType());
+                    outputDiff(jarFileName, record, prevVersionNums, projectedVersionNums);
+                }
                 
-                String jarFileName;
-                if (prevCurJars.getLeft().getName().equalsIgnoreCase(prevCurJars.getRight().getName())) {
-                    jarFileName = prevCurJars.getLeft().getName();
+                if (previous.getName().equalsIgnoreCase(current.getName())) {
+                    jarFileName = previous.getName();
                 } else {
-                    jarFileName = MessageFormat.format("[previous: {0}, current: {1}]", prevCurJars.getLeft().getName(), prevCurJars.getRight().getName());
+                    jarFileName = MessageFormat.format("[previous: {0}, current: {1}]", previous.getName(), current.getName());
                 }
 
-                outputDiff(jarFileName, record, prevVersionNums, projectedVersionNums);
+                
 
                 newVersionNumMapping.put(projectedVersionNums.getRelease().getModuleName(), projectedVersionNums);
             } catch (IOException ex) {
@@ -135,4 +154,35 @@ private static void outputDiff(
                 record.getHumanReadableApiChange()
         ));
     }
+    
+
+    /**
+     * Outputs new jar file name.
+     *
+     * @param jarFileName The jar file name.
+     * @param projectedVersionNums The calculated version numbers for current
+     * version.
+     */
+    private static void outputNewModule(
+            String jarFileName,
+            ModuleVersionNumbers projectedVersionNums
+    ) {
+    LOGGER.log(Level.INFO, MessageFormat.format("""
+                                                    
+                                                    ====================================
+                                                    NEW MODULE: {0}
+                                                    Current Version Numbers:
+                                                      - release: {1}
+                                                      - specification: {2}
+                                                      - implementation: {3}
+                                                    ====================================
+
+                                                    
+                                                    """,
+                jarFileName,
+                projectedVersionNums.getRelease().getFullReleaseStr(),
+                projectedVersionNums.getSpec().getSemVerStr(),
+                projectedVersionNums.getImplementation()
+        ));
+    }
 }
diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/ModuleUpdates.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/ModuleUpdates.java
index 16e149f854278ff32bc2a25396bd7294c8a0ec8d..e61ec906f72231691e185e614a8bdd43e58a661d 100644
--- a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/ModuleUpdates.java
+++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/ModuleUpdates.java
@@ -187,7 +187,7 @@ private static int tryParse(String str, int defaultVal, String resourceForLoggin
      * @return The module version numbers.
      * @throws IOException
      */
-    public static ModuleVersionNumbers getVersionsFromJar(File jarFile) throws IOException {
+    public static ModuleVersionNumbers getVersionsFromJar(File jarFile) throws IOException {       
         Attributes manifest = ManifestLoader.loadFromJar(jarFile);
         String spec = manifest.getValue(MANIFEST_SPEC_KEY);
         SemVer specSemVer = parseSemVer(spec, DEFAULT_SEMVER,
@@ -220,6 +220,14 @@ public static ModuleVersionNumbers getVersionsFromJar(File jarFile) throws IOExc
     public static ModuleVersionNumbers getModuleVersionUpdate(ModuleVersionNumbers prev, PublicApiChangeType apiChangeType) {
         switch (apiChangeType) {
             case NONE -> {
+                return new ModuleVersionNumbers(
+                        prev.getModuleName(),
+                        prev.getSpec(),
+                        prev.getImplementation(),
+                        prev.getRelease()
+                );
+            }
+            case INTERNAL_CHANGE -> {
                 return new ModuleVersionNumbers(
                         prev.getModuleName(),
                         prev.getSpec(),
@@ -236,10 +244,7 @@ public static ModuleVersionNumbers getModuleVersionUpdate(ModuleVersionNumbers p
                                 prev.getSpec().getPatch()
                         ),
                         prev.getImplementation() + 1,
-                        new ReleaseVal(
-                                prev.getRelease().getModuleName(),
-                                prev.getRelease().getReleaseVersion()
-                        )
+                        prev.getRelease()
                 );
             }
             case INCOMPATIBLE_CHANGE -> {
@@ -247,8 +252,8 @@ public static ModuleVersionNumbers getModuleVersionUpdate(ModuleVersionNumbers p
                         prev.getModuleName(),
                         new SemVer(
                                 prev.getSpec().getMajor() + 1,
-                                prev.getSpec().getMinor(),
-                                prev.getSpec().getPatch()
+                                0,
+                                null
                         ),
                         prev.getImplementation() + 1,
                         new ReleaseVal(
@@ -584,6 +589,19 @@ public String getSemVerStr() {
      * Module version numbers record.
      */
     public static class ModuleVersionNumbers {
+        
+        /**
+         * Returns ModuleVersionNumbers for a brand new module.
+         * @param moduleName The module name.
+         * @return  The module version numbers
+         */
+        public static ModuleVersionNumbers getNewModule(String moduleName) {
+            return new ModuleVersionNumbers(
+                    moduleName, 
+                    new SemVer(1, 0, null), 
+                    1,
+                    new ReleaseVal(moduleName.replaceAll("-", "."), 1));
+        }
 
         private final String moduleName;
         private final SemVer spec;
diff --git a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/PublicApiChangeType.java b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/PublicApiChangeType.java
index 8a230e03b3b681302441eaf25ed2342165bc95e5..227d5d9de5027a3a57350f18fc9849e7a328b9b7 100644
--- a/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/PublicApiChangeType.java
+++ b/release_scripts/APIUpdate/src/main/java/org/sleuthkit/autopsy/apiupdate/PublicApiChangeType.java
@@ -25,7 +25,7 @@
  * A public API change type (no change, compatible change, incompatible change).
  */
 public enum PublicApiChangeType implements Comparator<PublicApiChangeType> {
-    NONE(0), COMPATIBLE_CHANGE(1), INCOMPATIBLE_CHANGE(2);
+    NONE(0), INTERNAL_CHANGE(1), COMPATIBLE_CHANGE(2), INCOMPATIBLE_CHANGE(3);
 
     private final int level;