diff --git a/doc/contributions.txt b/doc/contributions.txt
index 89390d9977e99888d6e4e6cb51281f5d4d84fdf9..dc82200910aa285de326d4cbe9cdd26aafe5c144 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -330,6 +330,7 @@ Cron Stardust
 	VWR-25120
 	STORM-1075
 	STORM-1919
+	OPEN-209
 Cypren Christenson
 	STORM-417
 Dante Tucker
diff --git a/indra/llvfs/llvfile.cpp b/indra/llvfs/llvfile.cpp
index 306d7d8ec706dadbe0533abd5207c118e1261916..983e7c3b59a2acaa3c8a9d35e9bcaab5b95706a2 100755
--- a/indra/llvfs/llvfile.cpp
+++ b/indra/llvfs/llvfile.cpp
@@ -104,7 +104,7 @@ BOOL LLVFile::read(U8 *buffer, S32 bytes, BOOL async, F32 priority)
 	// We can't do a read while there are pending async writes
 	waitForLock(VFSLOCK_APPEND);
 	
-	// *FIX: (???)
+	// *FIX: (?)
 	if (async)
 	{
 		mHandle = sVFSThread->read(mVFS, mFileID, mFileType, buffer, mPosition, bytes, threadPri());
diff --git a/indra/llvfs/tests/lldiriterator_test.cpp b/indra/llvfs/tests/lldiriterator_test.cpp
index 505d86faa7d45ed61b873e1b7e5f6bf362693b82..a65e3dada5a084c5e662f091500ddd88be5ed087 100755
--- a/indra/llvfs/tests/lldiriterator_test.cpp
+++ b/indra/llvfs/tests/lldiriterator_test.cpp
@@ -51,9 +51,9 @@ namespace tut
     void test_chop_662(void)
     {
         //  Check a selection of bad group names from the crash reports 
-        LLDirIterator iter(".","+bad-group-name]+??-??.*");
-        LLDirIterator iter1(".","))--@---bad-group-name2((??-??.*\\.txt");
-        LLDirIterator iter2(".","__^v--x)Cuide d sua vida(x--v^__??-??.*"); 
+        LLDirIterator iter(".","+bad-group-name]+?\?-??.*");
+        LLDirIterator iter1(".","))--@---bad-group-name2((?\?-??.*\\.txt");
+        LLDirIterator iter2(".","__^v--x)Cuide d sua vida(x--v^__?\?-??.*"); 
     }
 
     template<> template<>
diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp
index 93b9d36939002d60729f52e7a1c5ddf4b284d34f..a2824db70a255907f199eabea2a054f1e1d9fed5 100755
--- a/indra/llwindow/llwindow.cpp
+++ b/indra/llwindow/llwindow.cpp
@@ -72,7 +72,7 @@ S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type)
 	}
 
 	S32 result = 0;
-#if LL_MESA_HEADLESS // !!! *FIX: (???)
+#if LL_MESA_HEADLESS // !!! *FIX: (?)
 	llwarns << "OSMessageBox: " << text << llendl;
 	return OSBTN_OK;
 #elif LL_WINDOWS
@@ -324,7 +324,7 @@ bool LLSplashScreen::isVisible()
 // static
 LLSplashScreen *LLSplashScreen::create()
 {
-#if LL_MESA_HEADLESS || LL_SDL  // !!! *FIX: (???)
+#if LL_MESA_HEADLESS || LL_SDL  // !!! *FIX: (?)
 	return 0;
 #elif LL_WINDOWS
 	return new LLSplashScreenWin32;
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 205466e9369255d8b0e0e29e1a73ceab07fcdc75..18e9eb0ee948b43e3bfb444dc6d80def0bfb8e8b 100755
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -223,7 +223,7 @@ LLWindowSDL::LLWindowSDL(LLWindowCallbacks* callbacks,
 	mOriginalAspectRatio = 1024.0 / 768.0;
 
 	if (title.empty())
-		mWindowTitle = "SDL Window";  // *FIX: (???)
+		mWindowTitle = "SDL Window";  // *FIX: (?)
 	else
 		mWindowTitle = title;
 
@@ -956,7 +956,7 @@ BOOL LLWindowSDL::setPosition(const LLCoordScreen position)
 {
 	if(mWindow)
 	{
-        // *FIX: (???)
+        // *FIX: (?)
 		//MacMoveWindow(mWindow, position.mX, position.mY, false);
 	}
 
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index fa810aac76bb6950fd5a3359cf794abe7f1ad5d7..a7236f27e8a5f2b3223e4752b49d8917279ff30e 100755
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -204,7 +204,7 @@ LLAgentWearables::sendAgentWearablesUpdateCallback::~sendAgentWearablesUpdateCal
  *
  * Would like to pass the agent in here, but we can't safely
  * count on it being around later.  Just use gAgent directly.
- * @param cb callback to execute on completion (??? unused ???)
+ * @param cb callback to execute on completion (? unused ?)
  * @param type Type for the wearable in the agent
  * @param wearable The wearable data.
  * @param todo Bitmask of actions to take on completion.
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index e3c89f1a5f4b7144411fb06d4b7890fe41688f75..a9adca309701b477f3b352625134499f14e5e86b 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -4772,7 +4772,7 @@ void LLAppViewer::idle()
 		static LLFrameStatsTimer viewer_stats_timer(SEND_STATS_PERIOD);
 
 		// Update session stats every large chunk of time
-		// *FIX: (???) SAMANTHA
+		// *FIX: (?) SAMANTHA
 		if (viewer_stats_timer.getElapsedTimeF32() >= SEND_STATS_PERIOD && !gDisconnected)
 		{
 			llinfos << "Transmitting sessions stats" << llendl;
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 70ffdc14ff78cdf795c98b03946c2dd728f9cf9e..e8ebd21de43961196267abc9dcb3edf332550245 100755
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1352,7 +1352,7 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 		// IM_SESSION_INVITE means that this is an Ad-hoc incoming chat
 		//		(it can be also Group chat but it is checked above)
 		// In this case mInitialTargetIDs contains Ad-hoc session ID and it should not be added
-		// to Recent People to prevent showing of an item with (???)(???). See EXT-8246.
+		// to Recent People to prevent showing of an item with (?? ?)(?? ?), sans the spaces. See EXT-8246.
 		// Concrete participants will be added into this list once they sent message in chat.
 		if (IM_SESSION_INVITE == dialog) return;
 			
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 9824f2dd38c0d3476413882e0305bfa926160370..c98352776218397b4e2c75d76dc8e8bbb4343fbd 100755
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -46,7 +46,7 @@
 const S32 BOTTOM_PAD = VPAD * 3;
 const S32 IGNORE_BTN_TOP_DELTA = 3*VPAD;//additional ignore_btn padding
 S32 BUTTON_WIDTH = 90;
-// *TODO: magic numbers(???) - copied from llnotify.cpp(250)
+// *TODO: magic numbers(?) - copied from llnotify.cpp(250)
 const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE; 
 
 
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 21fb8d519b3442c4067c8f14f30157edd7decf7d..e21752da534a4e2ed503fbc86b1c70d5c2f46d62 100755
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -191,7 +191,7 @@ LOG_CLASS(LLMimeDiscoveryResponder);
 		// 500 means "Internal Server error" but we decided it's okay to 
 		//     accept this and go past it in the MIME type probe
 		// 302 means the resource can be found temporarily in a different place - added this for join.secondlife.com
-		// 499 is a code specifc to join.secondlife.com (????) apparently safe to ignore
+		// 499 is a code specifc to join.secondlife.com (?) apparently safe to ignore
 //		if(	((status >= 200) && (status < 300))	||
 //			((status >= 400) && (status < 499))	|| 
 //			(status == 500) ||