diff --git a/.hgtags b/.hgtags
index e0242c2afa64a6daf39a07e65c64a216e53b09e0..aeb1ebadeaedb2e0ce790bed3b467146df7c8288 100755
--- a/.hgtags
+++ b/.hgtags
@@ -476,3 +476,4 @@ d40c66e410741de7e90b1ed6dac28dd8a2d7e1f6 3.6.8-release
 dcb4981ce255841b6083d8f65444b65d5a733a17 3.7.1-release
 b842534cb4d76c9ef87676a62b1d2d19e79c015f 3.7.2-release
 962d3f98955bfc7310a7867c8cbc3df075e54aa9 3.7.3-release
+d076568ff7883b41c149e6afb421f39c29dbfe2b 3.7.4-release
diff --git a/autobuild.xml b/autobuild.xml
index 6226c2137b27d80b7c4d271ad4a62cdf277ec73f..91d7574e00e43bc13ede0ad0d6f07da36ee5b569 100755
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -498,9 +498,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>10352aab979c333a52dbad21b6e6fba9</string>
+              <string>862b9244ed8a27bec16b62883fe3580a</string>
               <key>url</key>
-              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/274403/arch/Darwin/installer/fmodex-4.44-darwin-20130419.tar.bz2</string>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/Darwin/installer/fmodex-4.44.31-darwin-20140314.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -510,9 +510,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>79e45527aa9fb90b813599dff5ce01a7</string>
+              <string>180f4d703deec104469e6a9044243110</string>
               <key>url</key>
-              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/274378/arch/Linux/installer/fmodex-4.44-linux-20130419.tar.bz2</string>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/Linux/installer/fmodex-4.44.31-linux-20140315.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -522,9 +522,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>91752db72202807cffb33c1ec3fd90fc</string>
+              <string>6c859cd17fb8c9cdd96b188c2a2c2838</string>
               <key>url</key>
-              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/276321/arch/CYGWIN/installer/fmodex-4.44-windows-20130521.tar.bz2</string>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/CYGWIN/installer/fmodex-4.44.31-windows-20140314.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 44c2d3ac27b8bf460b15b8623de7f7314f268813..f98e88b6970960ff253b0da34e17aff09e5a36fe 100755
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -64,6 +64,7 @@ if(WINDOWS)
     endif(USE_TCMALLOC)
 
     if (FMODEX)
+      set(debug_files ${debug_files} fmodexL.dll)
       set(release_files ${release_files} fmodex.dll)
     endif (FMODEX)
 
@@ -294,7 +295,8 @@ elseif(LINUX)
     endif (USE_TCMALLOC)
 
     if (FMODEX)
-      set(release_file ${release_files} "libfmodex.so")
+      set(debug_files ${debug_files} "libfmodexL.so")
+      set(release_files ${release_files} "libfmodex.so")
     endif (FMODEX)
 
 else(WINDOWS)
diff --git a/indra/cmake/FMODEX.cmake b/indra/cmake/FMODEX.cmake
index 65bc1cabeb8fd77340ea80cf78d50dd1c7bd5d75..163260137bcf4af312ca0486dcddb1c720b34e6e 100644
--- a/indra/cmake/FMODEX.cmake
+++ b/indra/cmake/FMODEX.cmake
@@ -39,7 +39,7 @@ if (FMODEX)
             optimized fmodex)
       endif (WINDOWS)
       set(FMODEX_LIBRARIES ${FMODEX_LIBRARY})
-      set(FMODEX_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodex)
+      set(FMODEX_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/)
     endif (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
   endif (STANDALONE)
 endif (FMODEX)
diff --git a/indra/llaudio/llaudioengine_fmodex.cpp b/indra/llaudio/llaudioengine_fmodex.cpp
index e9b74b8f41836985fb356e57e0db680c8b284ef3..36e8044a25f7c6289f3a0738cee39320bff44760 100644
--- a/indra/llaudio/llaudioengine_fmodex.cpp
+++ b/indra/llaudio/llaudioengine_fmodex.cpp
@@ -5,7 +5,7 @@
  *
  * $LicenseInfo:firstyear=2002&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2014, Linden Research, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -55,11 +55,13 @@ LLAudioEngine_FMODEX::LLAudioEngine_FMODEX(bool enable_profiler)
 	mWindDSP = NULL;
 	mSystem = NULL;
 	mEnableProfiler = enable_profiler;
+	mWindDSPDesc = new FMOD_DSP_DESCRIPTION();
 }
 
 
 LLAudioEngine_FMODEX::~LLAudioEngine_FMODEX()
 {
+	delete mWindDSPDesc;
 }
 
 
@@ -320,8 +322,8 @@ void LLAudioEngine_FMODEX::shutdown()
 	llinfos << "LLAudioEngine_FMODEX::shutdown() closing FMOD Ex" << llendl;
 	if ( mSystem ) // speculative fix for MAINT-2657
 	{
-	mSystem->close();
-	mSystem->release();
+		mSystem->close();
+		mSystem->release();
 	}
 	llinfos << "LLAudioEngine_FMODEX::shutdown() done closing FMOD Ex" << llendl;
 
@@ -347,15 +349,14 @@ bool LLAudioEngine_FMODEX::initWind()
 
 	if (!mWindDSP)
 	{
-		FMOD_DSP_DESCRIPTION dspdesc;
-		memset(&dspdesc, 0, sizeof(FMOD_DSP_DESCRIPTION));	//Set everything to zero
-		strncpy(dspdesc.name,"Wind Unit", sizeof(dspdesc.name));	//Set name to "Wind Unit"
-		dspdesc.channels=2;
-		dspdesc.read = &windCallback; //Assign callback.
-		if(Check_FMOD_Error(mSystem->createDSP(&dspdesc, &mWindDSP), "FMOD::createDSP"))
+		memset(mWindDSPDesc, 0, sizeof(*mWindDSPDesc));	//Set everything to zero
+		strncpy(mWindDSPDesc->name, "Wind Unit", sizeof(mWindDSPDesc->name));
+		mWindDSPDesc->channels = 2;
+		mWindDSPDesc->read = &windCallback; // Assign callback - may be called from arbitrary threads
+		if (Check_FMOD_Error(mSystem->createDSP(mWindDSPDesc, &mWindDSP), "FMOD::createDSP"))
 			return false;
 
-		if(mWindGen)
+		if (mWindGen)
 			delete mWindGen;
 	
 		float frequency = 44100;
@@ -364,6 +365,7 @@ bool LLAudioEngine_FMODEX::initWind()
 		mWindDSP->setUserData((void*)mWindGen);
 	}
 
+	// *TODO:  Should this guard against multiple plays?
 	if (mWindDSP)
 	{
 		mSystem->playDSP(FMOD_CHANNEL_FREE, mWindDSP, false, 0);
@@ -741,6 +743,9 @@ void LLAudioChannelFMODEX::set3DMode(bool use3d)
 	}
 }
 
+// *NOTE:  This is almost certainly being called on the mixer thread,
+// not the main thread.  May have implications for callees or audio
+// engine shutdown.
 
 FMOD_RESULT F_CALLBACK windCallback(FMOD_DSP_STATE *dsp_state, float *originalbuffer, float *newbuffer, unsigned int length, int inchannels, int outchannels)
 {
diff --git a/indra/llaudio/llaudioengine_fmodex.h b/indra/llaudio/llaudioengine_fmodex.h
index 415a9ed0efb7d244bb2d6bcca6a179f9939156a8..ca389d489fd981359e666ae50b250668a7489c90 100644
--- a/indra/llaudio/llaudioengine_fmodex.h
+++ b/indra/llaudio/llaudioengine_fmodex.h
@@ -5,7 +5,7 @@
  *
  * $LicenseInfo:firstyear=2002&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2014, Linden Research, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -41,6 +41,7 @@ namespace FMOD
 	class Sound;
 	class DSP;
 }
+typedef struct FMOD_DSP_DESCRIPTION FMOD_DSP_DESCRIPTION;
 
 //Interfaces
 class LLAudioEngine_FMODEX : public LLAudioEngine 
@@ -74,6 +75,7 @@ class LLAudioEngine_FMODEX : public LLAudioEngine
 
 	LLWindGen<MIXBUFFERFORMAT> *mWindGen;
 
+	FMOD_DSP_DESCRIPTION *mWindDSPDesc;
 	FMOD::DSP *mWindDSP;
 	FMOD::System *mSystem;
 	bool mEnableProfiler;
diff --git a/indra/media_plugins/winmmshim/winmm_shim.cpp b/indra/media_plugins/winmmshim/winmm_shim.cpp
index aac349bf57d526e3d6ef979a13d82d36385d3b36..49a1c9dba3062f1f4685195e03f6190b76958cfc 100755
--- a/indra/media_plugins/winmmshim/winmm_shim.cpp
+++ b/indra/media_plugins/winmmshim/winmm_shim.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2010-2014, Linden Research, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -30,8 +30,8 @@
 
 using std::wstring;
 
-static float sVolumeLevel = 1.f;
-static bool sMute = false;
+static float sVolumeLevel = 1.f;		// Could be covered by critical section,
+static bool sMute = false;				// not needed with atomicity and alignment.
 static CRITICAL_SECTION sCriticalSection;
 
 BOOL APIENTRY DllMain( HMODULE hModule,
@@ -39,37 +39,44 @@ BOOL APIENTRY DllMain( HMODULE hModule,
                        LPVOID lpReserved
 					 )
 {
-	InitializeCriticalSection(&sCriticalSection);
+	if (DLL_PROCESS_ATTACH == ul_reason_for_call)
+	{
+		InitializeCriticalSection(&sCriticalSection);
+	}
 	return TRUE;
 }
 
 void ll_winmm_shim_initialize(){
-	static bool initialized = false;
-	// do this only once
-	EnterCriticalSection(&sCriticalSection);
+	static volatile bool initialized = false;
+
+	// do this only once using double-check locking
 	if (!initialized)
-	{	// bind to original winmm.dll
-		TCHAR system_path[MAX_PATH];
-		TCHAR dll_path[MAX_PATH];
-		::GetSystemDirectory(system_path, MAX_PATH);
-
-		// grab winmm.dll from system path, where it should live
-		wsprintf(dll_path, "%s\\winmm.dll", system_path);
-		HMODULE winmm_handle = ::LoadLibrary(dll_path);
-
-		if (winmm_handle != NULL)
-		{	// we have a dll, let's get out pointers!
-			initialized = true;
-			init_function_pointers(winmm_handle);
-			::OutputDebugStringA("WINMM_SHIM.DLL: real winmm.dll initialized successfully\n");
-		}
-		else
-		{
-			// failed to initialize real winmm.dll
-			::OutputDebugStringA("WINMM_SHIM.DLL: Failed to initialize real winmm.dll\n");
+	{
+		EnterCriticalSection(&sCriticalSection);
+		if (!initialized)
+		{	// bind to original winmm.dll
+			TCHAR system_path[MAX_PATH];
+			TCHAR dll_path[MAX_PATH];
+			::GetSystemDirectory(system_path, MAX_PATH);
+
+			// grab winmm.dll from system path, where it should live
+			wsprintf(dll_path, "%s\\winmm.dll", system_path);
+			HMODULE winmm_handle = ::LoadLibrary(dll_path);
+
+			if (winmm_handle != NULL)
+			{	// we have a dll, let's get out pointers!
+				init_function_pointers(winmm_handle);
+				::OutputDebugStringA("WINMM_SHIM.DLL: real winmm.dll initialized successfully\n");
+				initialized = true;		// Last thing after completing setup
+			}
+			else
+			{
+				// failed to initialize real winmm.dll
+				::OutputDebugStringA("WINMM_SHIM.DLL: Failed to initialize real winmm.dll\n");
+			}
 		}
+		LeaveCriticalSection(&sCriticalSection);
 	}
-	LeaveCriticalSection(&sCriticalSection);
 }
 
 
@@ -84,7 +91,7 @@ extern "C"
 		int	mBitsPerSample;
 	};
 	typedef std::map<HWAVEOUT, WaveOutFormat*> wave_out_map_t;
-	static wave_out_map_t sWaveOuts;
+	static wave_out_map_t sWaveOuts;						// Covered by sCriticalSection
 
 	MMRESULT WINAPI waveOutOpen( LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
 	{
@@ -100,7 +107,9 @@ extern "C"
 			&& ((fdwOpen & WAVE_FORMAT_QUERY) == 0)) // not just querying for format support
 		{	// remember the requested bits per sample, and associate with the given handle
 			WaveOutFormat* wave_outp = new WaveOutFormat(pwfx->wBitsPerSample);
+			EnterCriticalSection(&sCriticalSection);
 			sWaveOuts.insert(std::make_pair(*phwo, wave_outp));
+			LeaveCriticalSection(&sCriticalSection);
 		}
 		return result;
 	}
@@ -108,13 +117,15 @@ extern "C"
 	MMRESULT WINAPI waveOutClose( HWAVEOUT hwo)
 	{
 		ll_winmm_shim_initialize();
+		EnterCriticalSection(&sCriticalSection);
 		wave_out_map_t::iterator found_it = sWaveOuts.find(hwo);
 		if (found_it != sWaveOuts.end())
 		{	// forget what we know about this handle
 			delete found_it->second;
 			sWaveOuts.erase(found_it);
 		}
-		return waveOutClose_orig( hwo);
+		LeaveCriticalSection(&sCriticalSection);
+		return waveOutClose_orig(hwo);
 	}
 
 	MMRESULT WINAPI waveOutWrite( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
@@ -128,11 +139,19 @@ extern "C"
 		}
 		else if (sVolumeLevel != 1.f) 
 		{ // need to apply volume level
+			int bits_per_sample(0);
+			
+			EnterCriticalSection(&sCriticalSection);
 			wave_out_map_t::iterator found_it = sWaveOuts.find(hwo);
 			if (found_it != sWaveOuts.end())
 			{
-				WaveOutFormat* formatp = found_it->second;
-				switch (formatp->mBitsPerSample){
+				bits_per_sample = found_it->second->mBitsPerSample;
+			}
+			LeaveCriticalSection(&sCriticalSection);
+			if (bits_per_sample)
+			{
+				switch (bits_per_sample)
+				{
 				case 8:
 					{
 						char volume = (char)(sVolumeLevel * 127.f);
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 0833a98f1405167316da97ef9843d8bfad51edf5..aaf18d29482f17f2ad2793f0104a27740b190352 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.7.4
+3.7.5
diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp
index 9490769d8caf08c08620a37b7d8ab03ea91a42b5..e8c6b179cfa24ddf29074aee7005169ecca67e31 100644
--- a/indra/newview/llfloatersocial.cpp
+++ b/indra/newview/llfloatersocial.cpp
@@ -170,7 +170,6 @@ mRefreshBtn(NULL),
 mWorkingLabel(NULL),
 mThumbnailPlaceholder(NULL),
 mCaptionTextBox(NULL),
-mLocationCheckbox(NULL),
 mPostButton(NULL)
 {
 	mCommitCallbackRegistrar.add("SocialSharing.SendPhoto", boost::bind(&LLSocialPhotoPanel::onSend, this));
@@ -196,7 +195,6 @@ BOOL LLSocialPhotoPanel::postBuild()
     mWorkingLabel = getChild<LLUICtrl>("working_lbl");
 	mThumbnailPlaceholder = getChild<LLUICtrl>("thumbnail_placeholder");
 	mCaptionTextBox = getChild<LLUICtrl>("photo_caption");
-	mLocationCheckbox = getChild<LLUICtrl>("add_location_cb");
 	mPostButton = getChild<LLUICtrl>("post_photo_btn");
 	mCancelButton = getChild<LLUICtrl>("cancel_photo_btn");
 
@@ -213,7 +211,6 @@ void LLSocialPhotoPanel::draw()
     mCaptionTextBox->setEnabled(no_ongoing_connection);
     mResolutionComboBox->setEnabled(no_ongoing_connection);
     mRefreshBtn->setEnabled(no_ongoing_connection);
-    mLocationCheckbox->setEnabled(no_ongoing_connection);
     
     // Display the preview if one is available
 	if (previewp && previewp->getThumbnailImage())
@@ -343,25 +340,6 @@ void LLSocialPhotoPanel::sendPhoto()
 	// Get the caption
 	std::string caption = mCaptionTextBox->getValue().asString();
 
-	// Add the location if required
-	bool add_location = mLocationCheckbox->getValue().asBoolean();
-	if (add_location)
-	{
-		// Get the SLURL for the location
-		LLSLURL slurl;
-		LLAgentUI::buildSLURL(slurl);
-		std::string slurl_string = slurl.getSLURLString();
-
-		// Add query parameters so Google Analytics can track incoming clicks!
-		slurl_string += DEFAULT_PHOTO_QUERY_PARAMETERS;
-
-		// Add it to the caption (pretty crude, but we don't have a better option with photos)
-		if (caption.empty())
-			caption = slurl_string;
-		else
-			caption = caption + " " + slurl_string;
-	}
-
 	// Get the image
 	LLSnapshotLivePreview* previewp = getPreviewView();
 	
diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h
index bbe07c970406ec6b4daa1689ad9ed6dcd6e7beef..309f015ce972704f47795b3bab4a4b6f46cc8639 100644
--- a/indra/newview/llfloatersocial.h
+++ b/indra/newview/llfloatersocial.h
@@ -85,7 +85,6 @@ class LLSocialPhotoPanel : public LLPanel
 	LLUICtrl * mWorkingLabel;
 	LLUICtrl * mThumbnailPlaceholder;
 	LLUICtrl * mCaptionTextBox;
-	LLUICtrl * mLocationCheckbox;
 	LLUICtrl * mPostButton;
 	LLUICtrl* mCancelButton;
 };
diff --git a/indra/newview/skins/default/xui/en/panel_social_photo.xml b/indra/newview/skins/default/xui/en/panel_social_photo.xml
index a55613b52a92681945ebec98ae09c048664e3106..c79a246d9d137a752e0e5a83bd4e389da6582828 100644
--- a/indra/newview/skins/default/xui/en/panel_social_photo.xml
+++ b/indra/newview/skins/default/xui/en/panel_social_photo.xml
@@ -113,14 +113,6 @@
              type="string"
              word_wrap="true">
             </text_editor>
-            <check_box
-             follows="left|top"
-             initial_value="true"
-             label="Include location in posting"
-             name="add_location_cb"
-              left="9"
-              height="16"
-             top_pad="8"/>
         </layout_panel>
         <layout_panel
           name="photo_button_panel"
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index fe0774b409ee8484e7918e8520f9cc6ea18da67b..f7b3a45e8da33d9ef137cec77bf616d5060ebc26 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -7,7 +7,7 @@
 
 $LicenseInfo:firstyear=2006&license=viewerlgpl$
 Second Life Viewer Source Code
-Copyright (C) 2006-2011, Linden Research, Inc.
+Copyright (C) 2006-2014, Linden Research, Inc.
 
 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
@@ -749,7 +749,6 @@ def path_optional(src, dst):
                                 "libcollada14dom.dylib",
                                 "libexpat.1.5.2.dylib",
                                 "libexception_handler.dylib",
-                                "libfmodex.dylib",
                                 "libGLOD.dylib",
                                 ):
                     dylibs += path_optional(os.path.join(libdir, libfile), libfile)
@@ -765,6 +764,20 @@ def path_optional(src, dst):
                                 'SLVoice',
                                 ):
                      self.path2basename(libdir, libfile)
+
+                # dylibs that vary based on configuration
+                if self.args['configuration'].lower() == 'debug':
+                    for libfile in (
+                                "libfmodexL.dylib",
+                                ):
+                        dylibs += path_optional(os.path.join("../packages/lib/debug",
+                                                             libfile), libfile)
+                else:
+                    for libfile in (
+                                "libfmodex.dylib",
+                                ):
+                        dylibs += path_optional(os.path.join("../packages/lib/release",
+                                                             libfile), libfile)
                 
                 # our apps
                 for app_bld_dir, app in (("mac_crash_logger", "mac-crash-logger.app"),