diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 11594f276e2668f9b4302a909e115022e0f965cd..a6eb14db9df4a6c142f806fb5bb3eb7aceeedf0a 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -225,6 +225,71 @@ void LLThread::unlockData()
 
 // see llmemory.h for LLPointer<> definition
 
+#if (1)		// Old code - see comment below
+class LL_COMMON_API LLThreadSafeRefCount
+{
+public:
+	static void initThreadSafeRefCount(); // creates sMutex
+	static void cleanupThreadSafeRefCount(); // destroys sMutex
+	
+private:
+	static LLMutex* sMutex;
+
+protected:
+	virtual ~LLThreadSafeRefCount(); // use unref()
+	
+public:
+	LLThreadSafeRefCount();
+	LLThreadSafeRefCount(const LLThreadSafeRefCount&);
+	LLThreadSafeRefCount& operator=(const LLThreadSafeRefCount& ref) 
+	{
+		if (sMutex)
+		{
+			sMutex->lock();
+		}
+		mRef = 0;
+		if (sMutex)
+		{
+			sMutex->unlock();
+		}
+		return *this;
+	}
+
+
+	
+	void ref()
+	{
+		if (sMutex) sMutex->lock();
+		mRef++; 
+		if (sMutex) sMutex->unlock();
+	} 
+
+	S32 unref()
+	{
+		llassert(mRef >= 1);
+		if (sMutex) sMutex->lock();
+		S32 res = --mRef;
+		if (sMutex) sMutex->unlock();
+		if (0 == res) 
+		{
+			delete this; 
+			return 0;
+		}
+		return res;
+	}	
+	S32 getNumRefs() const
+	{
+		return mRef;
+	}
+
+private: 
+	S32	mRef; 
+};
+
+#else
+	// New code -  This was from https://bitbucket.org/lindenlab/viewer-cat/commits/b03bb43e4ead57f904cb3c1e9745dc8460de6efc
+	// and attempts 
+
 class LL_COMMON_API LLThreadSafeRefCount
 {
 public:
@@ -263,7 +328,7 @@ public:
 			// so that two threads who get into the if in parallel
 			// don't both attempt to the delete.
 			//
-			mRef--;
+			mRef--;			// Simon:  why not  if (mRef == 1) delete this; ?   There still seems to be a window where mRef could be modified
 			if (mRef == 0)
 				delete this; 			
 			if (sMutex) sMutex->unlock();
@@ -280,6 +345,7 @@ public:
 private: 
 	LLAtomic32< S32	> mRef; 
 };
+#endif // new code
 
 /**
  * intrusive pointer support for LLThreadSafeRefCount
diff --git a/indra/llui/llmodaldialog.h b/indra/llui/llmodaldialog.h
index 4e09d11d77827f4b50eff04ed32e770b4456c632..f81273b96a56cf1b9e336b988e45b8acb8ae54c0 100644
--- a/indra/llui/llmodaldialog.h
+++ b/indra/llui/llmodaldialog.h
@@ -40,7 +40,7 @@ class LLModalDialog : public LLFloater
 {
 public:
 	LLModalDialog( const LLSD& key, BOOL modal = true );
-	/*virtual*/ ~LLModalDialog();
+	virtual		~LLModalDialog();
 	
 	/*virtual*/ BOOL 	postBuild();