diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 07af8382a3879258815d8bee92055dac1ac61d4d..1e0624f8c4df35aad5455a15c69375714c6c7c81 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -284,6 +284,7 @@ BOOL LLFloaterModelPreview::postBuild()
 	
 	childDisable("upload_skin");
 	childDisable("upload_joints");
+	childDisable("ok_btn"); 
 	
 	initDecompControls();
 	
@@ -1554,9 +1555,11 @@ void LLModelLoader::run()
 		}
 		
 		daeElement* scene = root->getDescendant("visual_scene");
+		
 		if (!scene)
 		{
 			llwarns << "document has no visual_scene" << llendl;
+			setLoadState( ERROR_PARSING );
 			return;
 		}
 		
@@ -2001,6 +2004,11 @@ LLModelPreview::~LLModelPreview()
 U32 LLModelPreview::calcResourceCost()
 {
 	rebuildUploadData();
+
+	if ( mModelLoader->getLoadState() != LLModelLoader::ERROR_PARSING )
+	{
+		mFMP->childEnable("ok_btn");
+	}
 	
 	U32 cost = 0;
 	std::set<LLModel*> accounted;
@@ -2095,6 +2103,11 @@ void LLModelPreview::rebuildUploadData()
 	
 	F32 max_scale = 0.f;
 	
+	if ( mBaseScene.size() > 0 )
+	{
+		mFMP->childEnable("ok_btn");
+	}
+	
 	for (LLModelLoader::scene::iterator iter = mBaseScene.begin(); iter != mBaseScene.end(); ++iter)
 	{ //for each transform in scene
 		LLMatrix4 mat = iter->first;
@@ -2235,6 +2248,11 @@ void LLModelPreview::loadModel(std::string filename, S32 lod)
 	
 	setPreviewLOD(lod);
 
+	if ( mModelLoader->getLoadState() == LLModelLoader::ERROR_PARSING )
+	{
+		mFMP->childDisable("ok_btn");
+	}
+	
 	if (lod == mPreviewLOD)
 	{
 		mFMP->childSetText("lod_file", mLODFile[mPreviewLOD]);
@@ -3001,7 +3019,9 @@ void LLModelPreview::updateStatusMessages()
 		mFMP->childSetText(lod_status_name[lod], message);
 	}
 	
-	if (upload_ok)
+	bool errorStateFromLoader = mModelLoader->getLoadState() == LLModelLoader::ERROR_PARSING ? true : false;
+			
+	if ( upload_ok && !errorStateFromLoader )
 	{
 		mFMP->childEnable("ok_btn");
 	}
@@ -3888,4 +3908,3 @@ void LLFloaterModelPreview::DecompRequest::completed()
 		sInstance->mCurRequest = NULL;
 	}
 }
-
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index 05106644dc099b2c0e78c63d83dd5f49279f3268..2e98b8eb182c92ad4d7bccd95594ec2a41417079 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -60,6 +60,7 @@ class LLModelLoader : public LLThread
 		GENERATING_VERTEX_BUFFERS,
 		GENERATING_LOD,
 		DONE,
+		ERROR_PARSING, //basically loading failed
 	} eLoadState;
 
 	U32 mState;
@@ -103,7 +104,9 @@ class LLModelLoader : public LLThread
 	void extractTranslation( domTranslate* pTranslate, LLMatrix4& transform );
 	void extractTranslationViaElement( daeElement* pTranslateElement, LLMatrix4& transform );
 	
-
+	void setLoadState( U32 state ) { mState = state; }
+	U32 getLoadState( void ) { return mState; }
+	
 	//map of avatar joints as named in COLLADA assets to internal joint names
 	std::map<std::string, std::string> mJointMap;
 };