diff --git a/.gitignore b/.gitignore
index 7d4a125a8a6195fdc5f063b8ffb5f0ba20f8ace3..aae4c00959025ca184891f252fd15900232a8954 100755
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
 *.bak
 *.diff
 *.orig
+*.patch
 *.pyc
 *.rej
 *.swp
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index 493a0744652c3792c70b32261ae132d0fcd18497..7d41226b497f5542e1ec3038c5ad2ab39abb2756 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -112,7 +112,7 @@ void LLAudioEngine::setDefaults()
 }
 
 
-bool LLAudioEngine::init(const S32 num_channels, void* userdata)
+bool LLAudioEngine::init(const S32 num_channels, void* userdata, const std::string &app_title)
 {
 	setDefaults();
 
diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h
index f1e1b4e308c79a440115011ed64a53c2dfe0343e..97674f15f7a37494baf8da9ef8030a1d389acfb0 100644
--- a/indra/llaudio/llaudioengine.h
+++ b/indra/llaudio/llaudioengine.h
@@ -99,7 +99,7 @@ class LLAudioEngine
 	virtual ~LLAudioEngine();
 
 	// initialization/startup/shutdown
-	virtual bool init(const S32 num_channels, void *userdata);
+	virtual bool init(const S32 num_channels, void *userdata, const std::string &app_title);
 	virtual std::string getDriverName(bool verbose) = 0;
 	virtual void shutdown();
 
diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp
index 40600f9be0a9d34eaeefbbce8f5ff20c00fa7f1f..a38d8291fa900a3e907c17b186920858d2d33133 100644
--- a/indra/llaudio/llaudioengine_openal.cpp
+++ b/indra/llaudio/llaudioengine_openal.cpp
@@ -47,7 +47,12 @@ LLAudioEngine_OpenAL::LLAudioEngine_OpenAL()
 }
 
 // virtual
-bool LLAudioEngine_OpenAL::init(const S32 num_channels, void* userdata)
+LLAudioEngine_OpenAL::~LLAudioEngine_OpenAL()
+{
+}
+
+// virtual
+bool LLAudioEngine_OpenAL::init(const S32 num_channels, void* userdata, const std::string &app_title)
 {
 	mWindGen = NULL;
 	LLAudioEngine::init(num_channels, userdata);
@@ -234,6 +239,13 @@ bool LLAudioChannelOpenAL::isPlaying()
 
 bool LLAudioChannelOpenAL::updateBuffer()
 {
+    if (!mCurrentSourcep)
+    {
+        // This channel isn't associated with any source, nothing
+        // to be updated
+        return false;
+    }
+
 	if (LLAudioChannel::updateBuffer())
 	{
 		// Base class update returned true, which means that we need to actually
diff --git a/indra/llaudio/llaudioengine_openal.h b/indra/llaudio/llaudioengine_openal.h
index 32b652ffe1be9c9e434363f44355d15796b563b8..b6bd4b16d6cb092cce72e25562ecd5c4615f787e 100644
--- a/indra/llaudio/llaudioengine_openal.h
+++ b/indra/llaudio/llaudioengine_openal.h
@@ -40,8 +40,8 @@ class LLAudioEngine_OpenAL : public LLAudioEngine
 		LLAudioEngine_OpenAL();
 		virtual ~LLAudioEngine_OpenAL() = default;
 
-		virtual bool init(const S32 num_channels, void *user_data);
-        	virtual std::string getDriverName(bool verbose);
+        virtual bool init(const S32 num_channels, void *user_data, const std::string &app_title);
+        virtual std::string getDriverName(bool verbose);
 		virtual void allocateListener();
 
 		virtual void shutdown();
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b0121753de0d4246ecd75ff1a11acabf381f883c..08e220ba577fe94f17f036dfa31d714ec4d7e288 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1759,6 +1759,7 @@ if (USE_FMODSTUDIO)
 endif (USE_FMODSTUDIO)
 
 set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
+set_source_files_properties(llprogressview.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
 
 list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES})
 
@@ -1890,6 +1891,7 @@ if (WINDOWS)
         --arch=${ARCH}
         --artwork=${ARTWORK_DIR}
         "--bugsplat=${BUGSPLAT_DB}"
+        "--fmodstudio=${FMODSTUDIO}"
         --build=${CMAKE_CURRENT_BINARY_DIR}
         --buildtype=${CMAKE_BUILD_TYPE}
         "--channel=${VIEWER_CHANNEL}"
@@ -1966,6 +1968,7 @@ if (WINDOWS)
           --arch=${ARCH}
           --artwork=${ARTWORK_DIR}
           "--bugsplat=${BUGSPLAT_DB}"
+          "--fmodstudio=${FMODSTUDIO}"
           --build=${CMAKE_CURRENT_BINARY_DIR}
           --buildtype=${CMAKE_BUILD_TYPE}
           "--channel=${VIEWER_CHANNEL}"
@@ -2111,6 +2114,7 @@ if (LINUX)
         --arch=${ARCH}
         --artwork=${ARTWORK_DIR}
         "--bugsplat=${BUGSPLAT_DB}"
+        "--fmodstudio=${FMODSTUDIO}"
         --build=${CMAKE_CURRENT_BINARY_DIR}
         --buildtype=${CMAKE_BUILD_TYPE}
         "--channel=${VIEWER_CHANNEL}"
@@ -2137,6 +2141,7 @@ if (LINUX)
       --arch=${ARCH}
       --artwork=${ARTWORK_DIR}
       "--bugsplat=${BUGSPLAT_DB}"
+      "--fmodstudio=${FMODSTUDIO}"
       --build=${CMAKE_CURRENT_BINARY_DIR}
       --buildtype=${CMAKE_BUILD_TYPE}
       "--channel=${VIEWER_CHANNEL}"
@@ -2213,6 +2218,7 @@ if (DARWIN)
       --arch=${ARCH}
       --artwork=${ARTWORK_DIR}
       "--bugsplat=${BUGSPLAT_DB}"
+      "--fmodstudio=${FMODSTUDIO}"
       --build=${CMAKE_CURRENT_BINARY_DIR}
       --buildtype=${CMAKE_BUILD_TYPE}
       --bundleid=${MACOSX_BUNDLE_GUI_IDENTIFIER}
@@ -2247,6 +2253,7 @@ if (DARWIN)
           --arch=${ARCH}
           --artwork=${ARTWORK_DIR}
           "--bugsplat=${BUGSPLAT_DB}"
+          "--fmodstudio=${FMODSTUDIO}"
           --build=${CMAKE_CURRENT_BINARY_DIR}
           --buildtype=${CMAKE_BUILD_TYPE}
           "--channel=${VIEWER_CHANNEL}"
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index a4c853ea2ea69dbd548168a6823f26d772f27f2c..133cad286fdf619d1cbbb26931c01f4e180b36a4 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.4.2
+6.4.3
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index a07038484fb1d41674125a258729fa0456f7f12b..db7c289395656033784581395ea8a332e91bceab 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -16738,7 +16738,7 @@
   <key>FMODProfilerEnable</key>
   <map>
     <key>Comment</key>
-    <string>Enable profiler tool if using FMOD Studio</string>
+    <string>Enable profiler tool if using FMOD Ex or FMOD Studio</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -16749,7 +16749,7 @@
   <key>FMODDecodeBufferSize</key>
   <map>
     <key>Comment</key>
-    <string>Sets the streaming decode buffer size (in milliseconds)</string>
+    <string>Sets the streaming decode buffer size (in milliseconds) for FMOD Ex or FMOD Studio</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -16771,7 +16771,7 @@
   <key>FMODStreamBufferSize</key>
   <map>
     <key>Comment</key>
-    <string>Sets the streaming buffer size (in milliseconds)</string>
+    <string>Sets the streaming buffer size (in milliseconds) for FMOD Ex or FMOD Studio</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
diff --git a/indra/newview/linux_tools/client-readme.txt b/indra/newview/linux_tools/client-readme.txt
index e01b9e4bc63548a7d7c8c765ffa73a28a6f675b0..cb8d1af53582be2fd3fb7c464596e730cef883f7 100644
--- a/indra/newview/linux_tools/client-readme.txt
+++ b/indra/newview/linux_tools/client-readme.txt
@@ -187,8 +187,8 @@ The 'secondlife' script which launches Second Life contains some
 configuration options for advanced troubleshooters.
 
 * AUDIO - Edit the 'secondlife' script and you will see these audio
-  options: LL_BAD_OPENAL_DRIVER, LL_BAD_FMOD_ESD, LL_BAD_FMOD_OSS, and
-  LL_BAD_FMOD_ALSA.  Second Life tries to use OpenAL, ESD, OSS, then ALSA
+  options: LL_BAD_OPENAL_DRIVER, LL_BAD_FMODSTUDIO_DRIVER.
+  Second Life tries to use OpenAL, FMODSTUDIO (PULSEAUDIO, ALSA)
   audio drivers in this order; you may uncomment the corresponding LL_BAD_*
   option to skip an audio driver which you believe may be causing you trouble.
 
diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh
index 5b348d97f328144a8f8c580c343385e490683bc7..89949a723cc7ed5311b4736006bc9138c0fac85a 100755
--- a/indra/newview/linux_tools/wrapper.sh
+++ b/indra/newview/linux_tools/wrapper.sh
@@ -4,17 +4,15 @@
 ## These options are for self-assisted troubleshooting during this beta
 ## testing phase; you should not usually need to touch them.
 
-## - Avoids using any FMOD Ex audio driver.
-#export LL_BAD_FMODEX_DRIVER=x
+## - Avoids using any FMOD STUDIO audio driver.
+#export LL_BAD_FMODSTUDIO_DRIVER=x
 ## - Avoids using any OpenAL audio driver.
 #export LL_BAD_OPENAL_DRIVER=x
 
-## - Avoids using the FMOD Ex PulseAudio audio driver.
+## - Avoids using the FMOD Studio or FMOD Ex PulseAudio audio driver.
 #export LL_BAD_FMOD_PULSEAUDIO=x
-## - Avoids using the FMOD or FMOD Ex ALSA audio driver.
+## - Avoids using the FMOD Studio or FMOD Ex ALSA audio driver.
 #export LL_BAD_FMOD_ALSA=x
-## - Avoids using the FMOD or FMOD Ex OSS audio driver.
-#export LL_BAD_FMOD_OSS=x
 
 ## - Avoids the optional OpenGL extensions which have proven most problematic
 ##   on some hardware.  Disabling this option may cause BETTER PERFORMANCE but
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 083a913ef8bb1479d0ad248d0a2209eebeb2f367..e9feae3457bec753b914eec5d3969f3dbcf11469 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -229,6 +229,33 @@ void LLProgressView::drawStartTexture(F32 alpha)
 	gGL.popMatrix();
 }
 
+void LLProgressView::drawLogos(F32 alpha)
+{
+    if (mLogosList.empty())
+    {
+        return;
+    }
+
+    // logos are tied to label,
+    // due to potential resizes we have to figure offsets out on draw or resize
+    LLTextBox *logos_label = getChild<LLTextBox>("logos_lbl");
+    S32 offset_x, offset_y;
+    logos_label->localPointToScreen(0, 0, &offset_x, &offset_y);
+    std::vector<TextureData>::const_iterator iter = mLogosList.begin();
+    std::vector<TextureData>::const_iterator end = mLogosList.end();
+    for (; iter != end; iter++)
+    {
+        gl_draw_scaled_image_with_border(iter->mDrawRect.mLeft + offset_x,
+                             iter->mDrawRect.mBottom + offset_y,
+                             iter->mDrawRect.getWidth(),
+                             iter->mDrawRect.getHeight(),
+                             iter->mTexturep.get(),
+                             UI_VERTEX_COLOR % alpha,
+                             FALSE,
+                             iter->mClipRect,
+                             iter->mOffsetRect);
+    }
+}
 
 void LLProgressView::draw()
 {
@@ -245,6 +272,7 @@ void LLProgressView::draw()
 		}
 		
 		LLPanel::draw();
+		drawLogos(alpha);
 		return;
 	}
 
@@ -257,6 +285,7 @@ void LLProgressView::draw()
 				
 		drawStartTexture(alpha);
 		LLPanel::draw();
+		drawLogos(alpha);
 
 		// faded out completely - remove panel and reveal world
 		if (mFadeToWorldTimer.getElapsedTimeF32() > FADE_TO_WORLD_TIME )
@@ -283,7 +312,7 @@ void LLProgressView::draw()
 			// FIXME: this causes a crash that i haven't been able to fix
 			mMediaCtrl->unloadMediaSource();	
 
-			gStartTexture = NULL;
+            releaseTextures();
 		}
 		return;
 	}
@@ -291,6 +320,7 @@ void LLProgressView::draw()
 	drawStartTexture(1.0f);
 	// draw children
 	LLPanel::draw();
+	drawLogos(1.0f);
 }
 
 void LLProgressView::setText(const std::string& text)
@@ -309,6 +339,196 @@ void LLProgressView::setMessage(const std::string& msg)
 	getChild<LLUICtrl>("message_text")->setValue(mMessage);
 }
 
+void LLProgressView::loadLogo(const std::string &path,
+                              const U8 image_codec,
+                              const LLRect &pos_rect,
+                              const LLRectf &clip_rect,
+                              const LLRectf &offset_rect)
+{
+    // We need these images very early, so we have to force-load them, otherwise they might not load in time.
+    if (!gDirUtilp->fileExists(path))
+    {
+        return;
+    }
+
+    LLPointer<LLImageFormatted> start_image_frmted = LLImageFormatted::createFromType(image_codec);
+    if (!start_image_frmted->load(path))
+    {
+        LL_WARNS("AppInit") << "Image load failed: " << path << LL_ENDL;
+        return;
+    }
+
+    LLPointer<LLImageRaw> raw = new LLImageRaw;
+    if (!start_image_frmted->decode(raw, 0.0f))
+    {
+        LL_WARNS("AppInit") << "Image decode failed " << path << LL_ENDL;
+        return;
+    }
+    // HACK: getLocalTexture allows only power of two dimentions
+    raw->expandToPowerOfTwo();
+
+    TextureData data;
+    data.mTexturep = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE);
+    data.mDrawRect = pos_rect;
+    data.mClipRect = clip_rect;
+    data.mOffsetRect = offset_rect;
+    mLogosList.push_back(data);
+}
+
+void LLProgressView::initLogos()
+{
+    mLogosList.clear();
+
+    const U8 image_codec = IMG_CODEC_PNG;
+    const LLRectf default_clip(0.f, 1.f, 1.f, 0.f);
+    const S32 default_height = 28;
+    const S32 default_pad = 15;
+
+    S32 icon_width, icon_height;
+
+    // We don't know final screen rect yet, so we can't precalculate position fully
+    LLTextBox *logos_label = getChild<LLTextBox>("logos_lbl");
+    S32 texture_start_x = logos_label->getFont()->getWidthF32(logos_label->getText()) + default_pad;
+    S32 texture_start_y = -7;
+
+    // Normally we would just preload these textures from textures.xml,
+    // and display them via icon control, but they are only needed on
+    // startup and preloaded/UI ones stay forever
+    // (and this code was done already so simply reused it)
+    std::string temp_str = gDirUtilp->getExpandedFilename(LL_PATH_DEFAULT_SKIN, "textures", "3p_icons");
+
+    temp_str += gDirUtilp->getDirDelimiter();
+
+#ifdef LL_FMODSTUDIO
+    // original image size is 264x96, it is on longer side but
+    // with no internal paddings so it gets additional padding
+    icon_width = 77;
+    icon_height = 21;
+    S32 pad_y = 4;
+    texture_start_x++;
+    loadLogo(temp_str + "fmod_logo.png",
+        image_codec,
+        LLRect(texture_start_x, texture_start_y + pad_y + icon_height, texture_start_x + icon_width, texture_start_y + pad_y),
+        default_clip,
+        default_clip);
+
+    texture_start_x += icon_width + default_pad + 1;
+#endif
+    // original image size is 342x113, central element is on a larger side
+    // plus internal padding, so it gets slightly more height than desired 32
+    icon_width = 88;
+    icon_height = 29;
+    pad_y = -1;
+    loadLogo(temp_str + "havok_logo.png",
+        image_codec,
+        LLRect(texture_start_x, texture_start_y + pad_y + icon_height, texture_start_x + icon_width, texture_start_y + pad_y),
+        default_clip,
+        default_clip);
+
+    texture_start_x += icon_width + default_pad;
+
+    // 108x41
+    icon_width = 74;
+    loadLogo(temp_str + "vivox_logo.png",
+        image_codec,
+        LLRect(texture_start_x, texture_start_y + default_height, texture_start_x + icon_width, texture_start_y),
+        default_clip,
+        default_clip);
+}
+
+void LLProgressView::initStartTexture(S32 location_id, bool is_in_production)
+{
+    if (gStartTexture.notNull())
+    {
+        gStartTexture = NULL;
+        LL_INFOS("AppInit") << "re-initializing start screen" << LL_ENDL;
+    }
+
+    LL_DEBUGS("AppInit") << "Loading startup bitmap..." << LL_ENDL;
+
+    U8 image_codec = IMG_CODEC_PNG;
+    std::string temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter();
+
+    if ((S32)START_LOCATION_ID_LAST == location_id)
+    {
+        temp_str += LLStartUp::getScreenLastFilename();
+    }
+    else
+    {
+        std::string path = temp_str + LLStartUp::getScreenHomeFilename();
+
+        if (!gDirUtilp->fileExists(path) && is_in_production)
+        {
+            // Fallback to old file, can be removed later
+            // Home image only sets when user changes home, so it will take time for users to switch to pngs
+            temp_str += "screen_home.bmp";
+            image_codec = IMG_CODEC_BMP;
+        }
+        else
+        {
+            temp_str = path;
+        }
+    }
+
+    LLPointer<LLImageFormatted> start_image_frmted = LLImageFormatted::createFromType(image_codec);
+
+    // Turn off start screen to get around the occasional readback 
+    // driver bug
+    if (!gSavedSettings.getBOOL("UseStartScreen"))
+    {
+        LL_INFOS("AppInit") << "Bitmap load disabled" << LL_ENDL;
+        return;
+    }
+    else if (!start_image_frmted->load(temp_str))
+    {
+        LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL;
+        gStartTexture = NULL;
+    }
+    else
+    {
+        gStartImageWidth = start_image_frmted->getWidth();
+        gStartImageHeight = start_image_frmted->getHeight();
+
+        LLPointer<LLImageRaw> raw = new LLImageRaw;
+        if (!start_image_frmted->decode(raw, 0.0f))
+        {
+            LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
+            gStartTexture = NULL;
+        }
+        else
+        {
+            // HACK: getLocalTexture allows only power of two dimentions
+            raw->expandToPowerOfTwo();
+            gStartTexture = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE);
+        }
+    }
+
+    if (gStartTexture.isNull())
+    {
+        gStartTexture = LLViewerTexture::sBlackImagep;
+        gStartImageWidth = gStartTexture->getWidth();
+        gStartImageHeight = gStartTexture->getHeight();
+    }
+}
+
+void LLProgressView::initTextures(S32 location_id, bool is_in_production)
+{
+    initStartTexture(location_id, is_in_production);
+    initLogos();
+
+    childSetVisible("panel_icons", mLogosList.empty() ? FALSE : TRUE);
+    childSetVisible("panel_top_spacer", mLogosList.empty() ? TRUE : FALSE);
+}
+
+void LLProgressView::releaseTextures()
+{
+    gStartTexture = NULL;
+    mLogosList.clear();
+
+    childSetVisible("panel_top_spacer", TRUE);
+    childSetVisible("panel_icons", FALSE);
+}
+
 void LLProgressView::setCancelButtonVisible(BOOL b, const std::string& label)
 {
 	mCancelBtn->setVisible( b );
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
index 813576b21d181b196061fbe17b12ff044b7fddc6..56377a5889d235eee6973220969a1946ecd5b9c9 100644
--- a/indra/newview/llprogressview.h
+++ b/indra/newview/llprogressview.h
@@ -35,6 +35,7 @@
 class LLImageRaw;
 class LLButton;
 class LLProgressBar;
+class LLViewerTexture;
 
 class LLProgressView : 
 	public LLPanel,
@@ -51,6 +52,7 @@ class LLProgressView :
 
 	/*virtual*/ void draw();
 	void drawStartTexture(F32 alpha);
+	void drawLogos(F32 alpha);
 
 	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
@@ -70,6 +72,10 @@ class LLProgressView :
 
 	void setStartupComplete();
 
+	// we have to preload local textures to make sure they won't be grey
+	void initTextures(S32 location_id, bool is_in_production);
+	void releaseTextures();
+
 	void setCancelButtonVisible(BOOL b, const std::string& label);
 
 	static void onCancelButtonClicked( void* );
@@ -95,6 +101,25 @@ class LLProgressView :
 
 	bool handleUpdate(const LLSD& event_data);
 	static void onIdle(void* user_data);
+    void loadLogo(const std::string &path, const U8 image_codec, const LLRect &pos_rect, const LLRectf &clip_rect, const LLRectf &offset_rect);
+    // logos have unusual location and need to be preloaded to not appear grey, then deleted
+    void initLogos();
+    // Loads a bitmap to display during load
+    void initStartTexture(S32 location_id, bool is_in_production);
+
+private:
+    // We need to draw textures on login, but only once.
+    // So this vector gets filled up for textures to render and gets cleaned later
+    // Some textures have unusual requirements, so we are rendering directly
+    class TextureData
+    {
+    public:
+        LLPointer<LLViewerTexture> mTexturep;
+        LLRect mDrawRect;
+        LLRectf mClipRect;
+        LLRectf mOffsetRect;
+    };
+    std::vector<TextureData> mLogosList;
 };
 
 #endif // LL_LLPROGRESSVIEW_H
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 5bc73253b706a9e35f11995ca678710d56d86117..81b9b3be840f3dba19a36b6f6ac2d4bafb97695e 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -655,7 +655,7 @@ bool idle_startup()
 #else
 				void* window_handle = NULL;
 #endif
-				bool init = gAudiop->init(kAUDIO_NUM_SOURCES, window_handle);
+				bool init = gAudiop->init(kAUDIO_NUM_SOURCES, window_handle, LLAppViewer::instance()->getSecondLifeTitle());
 				if(init)
 				{
 					gAudiop->setMuted(TRUE);
@@ -1021,9 +1021,8 @@ bool idle_startup()
 
 		gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT);
 
-		init_start_screen(agent_location_id);
-
 		// Display the startup progress bar.
+		gViewerWindow->initTextures(agent_location_id);
 		gViewerWindow->setShowProgress(TRUE);
 		gViewerWindow->setProgressCancelButtonVisible(TRUE, LLTrans::getString("Quit"));
 
@@ -2751,81 +2750,6 @@ std::string LLStartUp::getUserId()
     return gUserCredential->userID();
 }
 
-// Loads a bitmap to display during load
-void init_start_screen(S32 location_id)
-{
-	if (gStartTexture.notNull())
-	{
-		gStartTexture = NULL;
-		LL_INFOS("AppInit") << "re-initializing start screen" << LL_ENDL;
-	}
-
-	LL_DEBUGS("AppInit") << "Loading startup bitmap..." << LL_ENDL;
-
-	U8 image_codec = IMG_CODEC_PNG;
-	std::string temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter();
-
-	if ((S32)START_LOCATION_ID_LAST == location_id)
-	{
-		temp_str += LLStartUp::getScreenLastFilename();
-	}
-	else
-	{
-		std::string path = temp_str + LLStartUp::getScreenHomeFilename();
-		
-		if (!gDirUtilp->fileExists(path) && LLGridManager::getInstance()->isInProductionGrid())
-		{
-			// Fallback to old file, can be removed later
-			// Home image only sets when user changes home, so it will take time for users to switch to pngs
-			temp_str += "screen_home.bmp";
-			image_codec = IMG_CODEC_BMP;
-		}
-		else
-		{
-			temp_str = path;
-		}
-	}
-
-	LLPointer<LLImageFormatted> start_image_frmted = LLImageFormatted::createFromType(image_codec);
-
-	// Turn off start screen to get around the occasional readback 
-	// driver bug
-	if(!gSavedSettings.getBOOL("UseStartScreen"))
-	{
-		LL_INFOS("AppInit")  << "Bitmap load disabled" << LL_ENDL;
-		return;
-	}
-	else if(!start_image_frmted->load(temp_str) )
-	{
-		LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL;
-		gStartTexture = NULL;
-	}
-	else
-	{
-		gStartImageWidth = start_image_frmted->getWidth();
-		gStartImageHeight = start_image_frmted->getHeight();
-
-		LLPointer<LLImageRaw> raw = new LLImageRaw;
-		if (!start_image_frmted->decode(raw, 0.0f))
-		{
-			LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
-			gStartTexture = NULL;
-		}
-		else
-		{
-			raw->expandToPowerOfTwo();
-			gStartTexture = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE) ;
-		}
-	}
-
-	if(gStartTexture.isNull())
-	{
-		gStartTexture = LLViewerTexture::sBlackImagep ;
-		gStartImageWidth = gStartTexture->getWidth() ;
-		gStartImageHeight = gStartTexture->getHeight() ;
-	}
-}
-
 
 // frees the bitmap
 void release_start_screen()
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 934af6d7eb6dd84a41c6db427edfa99511977de5..c4eaa57c2c2e38677dd6e2985788260268df3bc4 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1903,7 +1903,8 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
                     // If there is a new music URL and it's valid, play it.
                     if (music_url.size() > 12)
                     {
-                        if (music_url.substr(0, 7) == "http://")
+                        if (music_url.substr(0, 7) == "http://"
+                            || music_url.substr(0, 8) == "https://")
                         {
                             LLViewerRegion *region = LLWorld::getInstance()->getRegion(msg->getSender());
                             optionally_start_music(music_url, parcel->mLocalID, region->getRegionID());
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 16f1d434bb4a2c4832e81cca8b191fcf02c29afc..02ecc6efb395abc465bd544b4e1de202a3bbe9fe 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -5279,6 +5279,14 @@ void LLViewerWindow::revealIntroPanel()
 	}
 }
 
+void LLViewerWindow::initTextures(S32 location_id)
+{
+    if (mProgressView)
+    {
+        mProgressView->initTextures(location_id, LLGridManager::getInstance()->isInProductionGrid());
+    }
+}
+
 void LLViewerWindow::setShowProgress(const BOOL show)
 {
 	if (mProgressView)
@@ -5332,7 +5340,6 @@ void LLViewerWindow::setProgressCancelButtonVisible( BOOL b, const std::string&
 	}
 }
 
-
 LLProgressView *LLViewerWindow::getProgressView() const
 {
 	return mProgressView;
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 5c09a36913d984eb56fba0d8a0e196fb0db1f8aa..d60d7a9ac2abb6aa3964b155381a67d00d248716 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -304,6 +304,7 @@ class LLViewerWindow : public LLWindowCallbacks
 	BOOL            getCursorHidden() { return mCursorHidden; }
 	void			moveCursorToCenter();								// move to center of window
 													
+	void			initTextures(S32 location_id);
 	void			setShowProgress(const BOOL show);
 	BOOL			getShowProgress() const;
 	void			setProgressString(const std::string& string);
diff --git a/indra/newview/skins/default/textures/3p_icons/fmod_logo.png b/indra/newview/skins/default/textures/3p_icons/fmod_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a50e0ad34b54c63357a87094a102ba26d0782d6
Binary files /dev/null and b/indra/newview/skins/default/textures/3p_icons/fmod_logo.png differ
diff --git a/indra/newview/skins/default/textures/3p_icons/havok_logo.png b/indra/newview/skins/default/textures/3p_icons/havok_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff1ea3a72e8baf13cf235021482f9d57bab2ef08
Binary files /dev/null and b/indra/newview/skins/default/textures/3p_icons/havok_logo.png differ
diff --git a/indra/newview/skins/default/textures/3p_icons/vivox_logo.png b/indra/newview/skins/default/textures/3p_icons/vivox_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f20e87b7ae817116bad7d2939b545cea3029c3e
Binary files /dev/null and b/indra/newview/skins/default/textures/3p_icons/vivox_logo.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index ad8a3c43686f18787f6dc9b0548d0a1168ec4868..43552fb807676183ec8f304bf88d101d98008cc4 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -499,6 +499,7 @@ with the same filename but different name
   <texture name="Play_Press" file_name="icons/Play_Press.png" preload="false" />
   
   <texture name="ProgressBar" file_name="widgets/ProgressBar.png" preload="true" scale.left="4" scale.top="11" scale.right="48" scale.bottom="3" />
+  <texture name="ProgressBarSolid" file_name="widgets/ProgressBarSolid.png" preload="true" scale.left="4" scale.top="11" scale.right="48" scale.bottom="3" />
   <texture name="ProgressTrack" file_name="widgets/ProgressTrack.png" preload="true" scale.left="4" scale.top="13" scale.right="148" scale.bottom="2" />
 
   <texture name="PushButton_Disabled" file_name="widgets/PushButton_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
diff --git a/indra/newview/skins/default/textures/widgets/ProgressBarSolid.png b/indra/newview/skins/default/textures/widgets/ProgressBarSolid.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec0926bfa1cbc70b172f51704227bc30e418cf6b
Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/ProgressBarSolid.png differ
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
index a8342e723bc28d35ef6dee32b7d92e55514c7354..d783d1e23c513d060daf3955052644400b88e585 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
@@ -2,7 +2,7 @@
 <floater
  legacy_header_height="18"
  can_minimize="false"
- height="488"
+ height="466"
  layout="topleft"
  name="Inventory Finder"
  help_topic="inventory_finder"
@@ -202,7 +202,7 @@
      left="8"
      mouse_opaque="true"
      name="icon_settings"
-     top="262"
+     top="242"
      width="16" />
     <check_box
      height="16"
@@ -220,7 +220,7 @@
      layout="topleft"
      left="8"
      name="All"
-     top="282"
+     top="262"
      width="100" />
     <button
      height="20"
@@ -368,6 +368,6 @@
      layout="topleft"
      name="Close"
      right="-6"
-     top="454"
+     top="434"
      width="76" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index 860caf2d217a91a117c9c8da05b799f90f8ea7b3..e77d097d5f6db9cbec8669a19ff03b7c44a178d0 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -44,68 +44,129 @@
                  width="670" />
                 <layout_panel
                  auto_resize="false"
-                 height="250"
+                 height="275"
                  layout="topleft"
-                 min_height="250"
+                 min_height="275"
                  name="panel4"
                  width="670">
                     <icon
                      color="LoginProgressBoxCenterColor"
                      follows="left|right|bottom|top"
-                     height="250"
+                     height="275"
                      image_name="Rounded_Square"
                      layout="topleft"
                      left="0"
                      top="0"
                      width="670" />
-                    <text
-                     follows="left|right|top"
-                     font="SansSerifHuge"
-                     font_shadow="none"
-                     halign="left"
-                     height="20"
-                     layout="topleft"
-                     left_delta="47"
-                     name="title_text"
-                     text_color="LoginProgressBoxTextColor"
-                     top_delta="50"
-                     right="-47"/>
-                    <text
-                     follows="left|right|top"
-                     font="SansSerif"
-                     font_shadow="none"
-                     halign="left"
-                     height="20"
-                     layout="topleft"
-                     left_delta="0"
-                     name="progress_text"
-                     text_color="LoginProgressBoxTextColor"
-                     top_pad="5"
-                     right="-47"
-                     word_wrap="true"/>
-                    <progress_bar
-                     bottom="115"
-                     color_bar="1 1 1 0.96"
-                     follows="left|right|top"
-                     height="16"
-                     layout="topleft"
-                     left="45"
-                     name="login_progress_bar"
-                     right="-45" />
-                    <text
+                    <layout_stack
                      follows="left|right|top|bottom"
-                     font="SansSerifLarge"
-                     font_shadow="none"
-                     halign="left"
-                     height="100"
+                     height="275"
                      layout="topleft"
-                     left="45"
-                     line_spacing.pixels="2"
-                     name="message_text"
-                     text_color="LoginProgressBoxTextColor"
-                     top="145"
-                     right="-90"
-                     word_wrap="true"/>
+                     left="0"
+                     orientation="vertical"
+                     name="vertical_centering"
+                     animate="false"
+                     top="0"
+                     width="670">
+                      <layout_panel
+                       auto_resize="false"
+                       height="30"
+                       layout="topleft"
+                       min_height="30"
+                       name="panel_top_spacer"
+                       width="670">
+                      </layout_panel>
+                      <layout_panel
+                       auto_resize="false"
+                       height="100"
+                       layout="topleft"
+                       min_height="100"
+                       name="panel_login"
+                       width="670">
+                        <text
+                         follows="left|right|top"
+                         layout="topleft"
+                         font="SansSerifHuge"
+                         font_shadow="none"
+                         halign="left"
+                         height="20"
+                         left="47"
+                         top="32"
+                         right="-47"
+                         name="title_text"
+                         text_color="LoginProgressBoxTextColor"/>
+                        <text
+                         follows="left|right|top"
+                         layout="topleft"
+                         font="SansSerif"
+                         font_shadow="none"
+                         halign="left"
+                         height="20"
+                         top_pad="5"
+                         right="-47"
+                         left_delta="0"
+                         name="progress_text"
+                         text_color="LoginProgressBoxTextColor"
+                         word_wrap="true"/>
+                        <progress_bar
+                         color_bar="0 0.67 0.9 0.96"
+                         follows="left|right|top"
+                         layout="topleft"
+                         image_fill="ProgressBarSolid"
+                         height="16"
+                         left="45"
+                         top_pad="5"
+                         name="login_progress_bar"
+                         right="-45" />
+                      </layout_panel>
+                      <layout_panel
+                       auto_resize="false"
+                       height="110"
+                       layout="topleft"
+                       min_height="110"
+                       name="panel_motd"
+                       width="670">
+                        <text
+                         follows="left|right|top|bottom"
+                         font="SansSerifLarge"
+                         font_shadow="none"
+                         halign="left"
+                         valign="center"
+                         height="100"
+                         layout="topleft"
+                         left="45"
+                         line_spacing.pixels="2"
+                         name="message_text"
+                         text_color="LoginProgressBoxTextColor"
+                         top="7"
+                         right="-90"
+                         word_wrap="true"/>
+                      </layout_panel>
+                      <layout_panel
+                       auto_resize="false"
+                       height="40"
+                       layout="topleft"
+                       min_height="40"
+                       name="panel_icons"
+                       width="670">
+                        <!--Logos are tied to following label from code-->
+                        <text
+                         follows="left|right|top"
+                         layout="topleft"
+                         font="SansSerifLarge"
+                         font_shadow="none"
+                         halign="left"
+                         height="16"
+                         width="240"
+                         left="47"
+                         top="6"
+                         line_spacing.pixels="2"
+                         name="logos_lbl"
+                         text_color="LoginProgressBoxTextColor">
+                          Second Life uses
+                        </text>
+                      </layout_panel>
+                    </layout_stack>
                 </layout_panel>
                 <layout_panel
                  height="200"
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 19d6fa79e219041241dfbdc6bfb783ceffd8a9de..b4643a2afc5f19027ba381f14889bbf3b7adac2e 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -1554,6 +1554,7 @@ def construct(self):
     extra_arguments = [
         dict(name='bugsplat', description="""BugSplat database to which to post crashes,
              if BugSplat crash reporting is desired""", default=''),
+        dict(name='fmodstudio', description="""Indication if fmod studio libraries are needed""", default='OFF'),
         ]
     try:
         main(extra=extra_arguments)