diff --git a/indra/llcommon/llpointer.h b/indra/llcommon/llpointer.h
index c83e55577debb78b1505cf373a0f4cf9d7ae2753..e640ffd5950b194b1b5dc91a87b2ce0e45b6b49a 100644
--- a/indra/llcommon/llpointer.h
+++ b/indra/llcommon/llpointer.h
@@ -196,6 +196,9 @@ class LLCopyOnWritePointer : public LLPointer<Type>
 			*(pointer_t*)(this) = new Type(*pointer_t::mPointer);
 		}
 	}
+
+	const Type*	operator->() const	{ return pointer_t::mPointer; }
+	const Type&	operator*() const	{ return *pointer_t::mPointer; }
 };
 
 #endif
diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h
index f94576de45c960b123ab0d6f98143dc2f60b0771..e950a119d3a89e9985b08d7df6bff1a14fc9927f 100644
--- a/indra/llcommon/lltrace.h
+++ b/indra/llcommon/lltrace.h
@@ -175,10 +175,12 @@ class AccumulatorBuffer : public LLRefCount
 	// NOTE: this is not thread-safe.  We assume that slots are reserved in the main thread before any child threads are spawned
 	size_t reserveSlot()
 	{
+#ifndef LL_RELEASE_FOR_DOWNLOAD
 		if (LLTrace::isInitialized())
 		{
 			llerrs << "Attempting to declare trace object after program initialization.  Trace objects should be statically initialized." << llendl;
 		}
+#endif
 		size_t next_slot = sNextStorageSlot++;
 		if (next_slot >= mStorageSize)
 		{