diff --git a/src/common/models/modelrenderer.h b/src/common/models/modelrenderer.h
index cf1d7648a..538712f26 100644
--- a/src/common/models/modelrenderer.h
+++ b/src/common/models/modelrenderer.h
@@ -25,5 +25,6 @@ class FModelRenderer
 	virtual void DrawArrays(int start, int count) = 0;
 	virtual void DrawElements(int numIndices, size_t offset) = 0;
 	virtual void SetupFrame(FModel* model, unsigned int frame1, unsigned int frame2, unsigned int size, int boneStartIndex) {};
+	virtual int UploadBones(const TArray<VSMatrix>& bones) = 0;
 };
 
diff --git a/src/common/models/models_iqm.cpp b/src/common/models/models_iqm.cpp
index d22f293ae..5fac867a9 100644
--- a/src/common/models/models_iqm.cpp
+++ b/src/common/models/models_iqm.cpp
@@ -470,7 +470,7 @@ double IQMModel::FindFramerate(FName name)
 void IQMModel::RenderFrame(FModelRenderer* renderer, FGameTexture* skin, int frame1, int frame2, double inter, FTranslationID translation, const FTextureID* surfaceskinids, int boneStartPosition, void * act)
 {
 	
-	renderer->SetupFrame(this, 0, 0, NumVertices, boneStartPosition >= 0 ? boneStartPosition : screen->mBones->UploadBones(boneData));
+	renderer->SetupFrame(this, 0, 0, NumVertices, boneStartPosition >= 0 ? boneStartPosition : renderer->UploadBones(boneData));
 
 	FGameTexture* lastSkin = nullptr;
 	for (unsigned i = 0; i < Meshes.Size(); i++)
diff --git a/src/r_data/models.cpp b/src/r_data/models.cpp
index cea33bd5c..73c332a14 100644
--- a/src/r_data/models.cpp
+++ b/src/r_data/models.cpp
@@ -564,7 +564,7 @@ void RenderFrameModels(FModelRenderer *renderer, FLevelLocals *Level, const FSpr
 
 				if(smf_flags & MDL_MODELSAREATTACHMENTS || is_decoupled)
 				{
-					boneStartingPosition = boneData ? screen->mBones->UploadBones(*boneData) : -1;
+					boneStartingPosition = boneData ? renderer->UploadBones(*boneData) : -1;
 					evaluatedSingle = true;
 				}
 
diff --git a/src/rendering/hwrenderer/hw_models.cpp b/src/rendering/hwrenderer/hw_models.cpp
index 4a9ea5758..cd99cc4e2 100644
--- a/src/rendering/hwrenderer/hw_models.cpp
+++ b/src/rendering/hwrenderer/hw_models.cpp
@@ -169,6 +169,11 @@ void FHWModelRenderer::DrawElements(int numIndices, size_t offset)
 //
 //===========================================================================
 
+int FHWModelRenderer::UploadBones(const TArray<VSMatrix>& bones)
+{
+	return state.UploadBones(bones);
+}
+
 void FHWModelRenderer::SetupFrame(FModel *model, unsigned int frame1, unsigned int frame2, unsigned int size, int boneStartIndex)
 {
 	auto mdbuff = static_cast<FModelVertexBuffer*>(model->GetVertexBuffer(GetType()));
diff --git a/src/rendering/hwrenderer/hw_models.h b/src/rendering/hwrenderer/hw_models.h
index 1507e5ff4..b19ad23a7 100644
--- a/src/rendering/hwrenderer/hw_models.h
+++ b/src/rendering/hwrenderer/hw_models.h
@@ -60,6 +60,7 @@ class FHWModelRenderer : public FModelRenderer
 	void DrawArrays(int start, int count) override;
 	void DrawElements(int numIndices, size_t offset) override;
 	void SetupFrame(FModel *model, unsigned int frame1, unsigned int frame2, unsigned int size, int boneStartIndex) override;
+	int UploadBones(const TArray<VSMatrix>& bones) override;
 
 };