diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp
index a9e80ab5da107dcd7ea1ae10c3edaf030561c50a..a1420fba173ac417e59137467b22ab1f295408b8 100644
--- a/indra/newview/llmodelpreview.cpp
+++ b/indra/newview/llmodelpreview.cpp
@@ -529,6 +529,16 @@ void LLModelPreview::rebuildUploadData()
                         LLFloaterModelPreview::addStringToLog(out, false);
                     }
                 }
+                if (!mLastSpecifiedPhysicsModelOriginalName.empty() && !lod_model && (i == LLModel::LOD_PHYSICS))
+                {
+                    // Despite the various strategies above, if we don't now have a physics model, we're going to end up with decomposition.
+                    // That's ok, but in the case where someone supplied a physics file, that's probably not what they wanted.
+                    std::ostringstream out;
+                    out << "Reusing previously matched physics model " << mLastSpecifiedPhysicsModelOriginalName;
+                    LL_INFOS() << out.str() << LL_ENDL;
+                    LLFloaterModelPreview::addStringToLog(out, false);
+                    lod_model = mLastSpecifiedPhysicsP;
+                }
 
                 if (lod_model)
                 {
@@ -1185,7 +1195,11 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)
                                     LL_WARNS() << out.str() << LL_ENDL;
                                     LLFloaterModelPreview::addStringToLog(out, false);
                                 }
-
+                                if (loaded_lod == LLModel::LOD_PHYSICS)
+                                {
+                                    mLastSpecifiedPhysicsModelOriginalName = loaded_name;
+                                    mLastSpecifiedPhysicsP = mModel[loaded_lod][idx];
+                                }
                                 mModel[loaded_lod][idx]->mLabel = name;
                             }
                         }
diff --git a/indra/newview/llmodelpreview.h b/indra/newview/llmodelpreview.h
index 3664a27a72487d8c5faae31fd8ac7854fe9dd559..5a9fc9387960e24901bfbc617a12554f6917af98 100644
--- a/indra/newview/llmodelpreview.h
+++ b/indra/newview/llmodelpreview.h
@@ -217,6 +217,8 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
     LLVOAvatar* getPreviewAvatar(void) { return mPreviewAvatar; }
     // Count amount of original models, excluding sub-models
     static U32 countRootModels(LLModelLoader::model_list models);
+    LLModel* mLastSpecifiedPhysicsP{}; // As opposed to being found by name or LOD;
+    std::string mLastSpecifiedPhysicsModelOriginalName{""}; // Since the above will have it's label bashed.
 
 protected:
     friend class LLModelLoader;