diff --git a/autobuild.xml b/autobuild.xml
index 41bdf287ac5ae0ed81ef24a23708242a06245bd8..db44209eca78f681095321a5d5b2e193d78be973 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -3007,6 +3007,64 @@
         <key>version</key>
         <string>0.8.0.1</string>
       </map>
+      <key>viewer-manager</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 2000-2012, Linden Research, Inc.</string>
+        <key>description</key>
+        <string>Linden Lab Viewer Management Process suite.</string>
+        <key>license</key>
+        <string>Proprietary</string>
+        <key>license_file</key>
+        <string>LICENSE</string>
+        <key>name</key>
+        <string>viewer-manager</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>db1da9e5c06338c2f37d781b42d41e54</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/3525/9029/viewer_manager-1.0-darwin64-503513.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin64</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>8c7f32f85850248809ae811ba8e47d81</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/3428/8686/viewer_manager-1.0-linux-503417.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>a431b47b3d6fd8798ae6f99867d8f058</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/3526/9035/viewer_manager-1.0-windows-503513.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+        <key>source</key>
+        <string>https://bitbucket.org/lindenlab/vmp-standalone</string>
+        <key>source_type</key>
+        <string>hg</string>
+        <key>version</key>
+        <string>1.0</string>
+      </map>
       <key>vlc-bin</key>
       <map>
         <key>copyright</key>
diff --git a/indra/cmake/ViewerManager.cmake b/indra/cmake/ViewerManager.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..793ed78b6c61a1c9cc06840a91636ea008b9ef22
--- /dev/null
+++ b/indra/cmake/ViewerManager.cmake
@@ -0,0 +1,2 @@
+include (Prebuilt)
+use_prebuilt_binary(viewer-manager)
\ No newline at end of file
diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py
index f02c5e98b430c3c0b9f2034adac5834511cd8138..210e43b2322788e17c980dcf430bebb8a3cc8920 100755
--- a/indra/cmake/run_build_test.py
+++ b/indra/cmake/run_build_test.py
@@ -312,7 +312,7 @@ def get_windows_table():
     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("-d", "--debug", dest="loglevel", action="store_const",
-                        const=logging.DEBUG, default=logging.WARNING)
+                        const=logging.DEBUG, default=logging.INFO)
     parser.add_argument("-D", "--define", dest="vars", default=[], action="append",
                         metavar="VAR=value",
                         help="Add VAR=value to the env variables defined")
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 394a9c85783dd0a6b59036523259d7d986d6e155..7a62d8baec1a496425cfc290f3ccc2b13d8fb75d 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -47,6 +47,7 @@ include(TemplateCheck)
 include(UI)
 include(UnixInstall)
 include(ViewerMiscLibs)
+include(ViewerManager)
 include(VisualLeakDetector)
 include(ZLIB)
 include(URIPARSER)
@@ -1756,58 +1757,6 @@ if (WINDOWS)
            ${SHARED_LIB_STAGING_DIR}/Debug/fmodexL.dll
           )
     endif (FMODEX)
-
-    get_filename_component(PYTHON_DIRECTORY ${PYTHON_EXECUTABLE} DIRECTORY)
-
-    # http://pythonhosted.org/PyInstaller/#options
-    add_custom_command(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/SL_Launcher.exe
-    COMMAND ${PYTHON_DIRECTORY}/Scripts/pyinstaller.exe
-    ARGS
-       --onefile 
-       --log-level WARN
-       --distpath ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} 
-            ${CMAKE_SOURCE_DIR}/viewer_components/manager/SL_Launcher
-    COMMENT "Performing pyinstaller compile of SL_Launcher"
-)
-
-    add_custom_command(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/apply_update.exe
-    COMMAND ${PYTHON_DIRECTORY}/Scripts/pyinstaller.exe
-    ARGS
-       --onefile 
-       --log-level WARN
-       --distpath ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} 
-            ${CMAKE_SOURCE_DIR}/viewer_components/manager/apply_update.py
-    COMMENT "Performing pyinstaller compile of updater"
-)
-
-    add_custom_command(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/download_update.exe
-    COMMAND ${PYTHON_DIRECTORY}/Scripts/pyinstaller.exe
-    ARGS
-       --onefile 
-       --log-level WARN
-       --distpath ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} 
-            ${CMAKE_SOURCE_DIR}/viewer_components/manager/download_update.py
-    COMMENT "Performing pyinstaller compile of update downloader"
-)
-
-    add_custom_command(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/update_manager.exe
-    COMMAND ${PYTHON_DIRECTORY}/Scripts/pyinstaller.exe
-    ARGS
-       --onefile 
-       --log-level WARN
-       --distpath ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} 
-            ${CMAKE_SOURCE_DIR}/viewer_components/manager/update_manager.py
-    COMMENT "Performing pyinstaller compile of update manager"
-)
-
-add_custom_target(compile_w_viewer_launcher ALL DEPENDS ${CMAKE_CFG_INTDIR}/SL_Launcher.exe)
-add_custom_target(compile_w_viewer_updater ALL DEPENDS ${CMAKE_CFG_INTDIR}/apply_update.exe)
-add_custom_target(compile_w_viewer_downloader ALL DEPENDS ${CMAKE_CFG_INTDIR}/download_update.exe)
-add_custom_target(compile_w_viewer_update_manager ALL DEPENDS ${CMAKE_CFG_INTDIR}/update_manager.exe)
     
     add_custom_command(
       OUTPUT  ${CMAKE_CFG_INTDIR}/copy_touched.bat
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 702f7efa21e4177b7aed80b97f4bf1092c9e600d..c4782ed216cdade83b2ee635326ab9450656a042 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -311,6 +311,8 @@ class LLAppViewer : public LLApp
 	// llcorehttp library init/shutdown helper
 	LLAppCoreHttp mAppCoreHttp;
 
+        bool mIsFirstRun;
+
 };
 
 // consts from viewer.h
diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp
index 375dce485d71b2eec8c332f686a689ecb4bb4b9d..bf9d98ee91f5a45580eee75250b305d5ac0208f7 100644
--- a/indra/newview/llversioninfo.cpp
+++ b/indra/newview/llversioninfo.cpp
@@ -64,6 +64,7 @@ S32 LLVersionInfo::getPatch()
 //static
 S32 LLVersionInfo::getBuild()
 {
+    std::cout << "What we have IN llversioninfo: " << LL_VIEWER_VERSION_BUILD << std::endl;
 	return LL_VIEWER_VERSION_BUILD;
 }
 
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index 55dcb83567bb5b5269f306c5b821f1014a5956cf..3b7ec48d6174659cf2bc28975f8ef8a40d00f115 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -31,6 +31,9 @@
 #include "../llviewernetwork.h"
 #include "../lllogininstance.h"
 
+ // Needed for Auth Test
+ #include "../llhasheduniqueid.h"
+
 // STL headers
 // std headers
 // external library headers
@@ -187,7 +190,6 @@ void LLUIColorTable::saveUserSettings(void)const {}
 #include "../llversioninfo.h"
 const std::string &LLVersionInfo::getVersion() { return VIEWERLOGIN_VERSION; }
 const std::string &LLVersionInfo::getChannel() { return VIEWERLOGIN_CHANNEL; }
-const int MD5HEX_STR_SIZE = 33;  // char hex[MD5HEX_STR_SIZE]; with null
 
 bool llHashedUniqueID(unsigned char* id) 
 {
diff --git a/indra/newview/tests/llversioninfo_test.cpp b/indra/newview/tests/llversioninfo_test.cpp
index f1f69f33f19b7ba2da08e56499e77434dce1e995..2f7a4e96012b8017e53f95c749c0c677938399fc 100644
--- a/indra/newview/tests/llversioninfo_test.cpp
+++ b/indra/newview/tests/llversioninfo_test.cpp
@@ -29,6 +29,8 @@
 
 #include "../llversioninfo.h"
 
+ #include <iostream>
+
 // LL_VIEWER_CHANNEL is a macro defined on the compiler command line. The
 // macro expands to the string name of the channel, but without quotes. We
 // need to turn it into a quoted string. This macro trick does that.
@@ -81,7 +83,9 @@ namespace tut
 
 	template<> template<>
 	void versioninfo_object_t::test<1>()
-	{
+	{   
+		std::cout << "What we parsed from CMake: " << LL_VIEWER_VERSION_BUILD << std::endl;
+		std::cout << "What we get from llversioninfo: " << LLVersionInfo::getBuild() << std::endl;
 		ensure_equals("Major version", 
 					  LLVersionInfo::getMajor(), 
 					  LL_VIEWER_VERSION_MAJOR);
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 0506fc553eaa95c9b97f9d8a52ced08d8412fd10..859ca8f9d61c29df8932c211772d14b46213ebed 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -223,7 +223,7 @@ def channel_type(self): # returns 'release', 'beta', 'project', or 'test'
         return channel_type
 
     def channel_variant_app_suffix(self):
-        # get any part of the compiled channel name after the CHANNEL_VENDOR_BASE
+        # get any part of the channel name after the CHANNEL_VENDOR_BASE
         suffix=self.channel_variant()
         # by ancient convention, we don't use Release in the app name
         if self.channel_type() == 'release':
@@ -342,19 +342,42 @@ def construct(self):
         pkgdir = os.path.join(self.args['build'], os.pardir, 'packages')
         relpkgdir = os.path.join(pkgdir, "lib", "release")
         debpkgdir = os.path.join(pkgdir, "lib", "debug")
+        vmpdir = os.path.join(pkgdir, "VMP")
+        llbasedir = os.path.join(pkgdir, "llbase")
 
         if self.is_packaging_viewer():
             # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.
             self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())
-            # include the compiled launcher script so that it gets included in the file_list
-            self.path(src='%s/SL_Launcher.exe' % self.args['configuration'], dst="SL_Launcher.exe")
+
+            # include the compiled launcher scripts so that it gets included in the file_list
+            self.path(src='%s/apply_update.exe' % vmpdir, dst="apply_update.exe")
+            self.path(src='%s/download_update.exe' % vmpdir, dst="download_update.exe")
+            self.path(src='%s/SL_Launcher.exe' % vmpdir, dst="SL_Launcher.exe")
+            self.path(src='%s/update_manager.exe' % vmpdir, dst="update_manager.exe")
+
+            #IUM is not normally executed directly, just imported.  No exe needed.
+            self.path2basename(vmpdir,"InstallerUserMessage.py")
+
+            #VMP  Tkinter icons
+            if self.prefix("vmp_icons"):
+                self.path("*.png")
+                self.path("*.gif")
+                self.end_prefix("vmp_icons")
+
+            #before, we only needed llbase at build time.  With VMP, we need it at run time.
+            llbase_path = os.path.join(self.get_dst_prefix(),'llbase')
+            if not os.path.exists(llbase_path):
+                os.makedirs(llbase_path)
+            if self.prefix(dst="llbase"):
+                self.path2basename(llbasedir,"*.py")
+                self.path2basename(llbasedir,"_cllsd.so")
+                self.end_prefix()
 
         # Plugin host application
         self.path2basename(os.path.join(os.pardir,
                                         'llplugin', 'slplugin', self.args['configuration']),
                            "slplugin.exe")
         
-        #note, launcher and friends do not need viewer_manifest in Windows as the scripts are compiled into executables
         # Get shared libs from the shared libs staging directory
         if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
                        dst=""):
@@ -687,7 +710,17 @@ def package_finish(self):
         if not python or python == "${PYTHON}":
             python = 'python'
         if os.path.exists(sign_py):
+            print "about to run signing of: ", self.dst_path_of(installer_file).replace('\\', '\\\\\\\\')
             self.run_command("%s %s %s" % (python, sign_py, self.dst_path_of(installer_file).replace('\\', '\\\\\\\\')))
+            #Unlike the viewer binary, the VMP filenames are invariant with respect to version, os, etc.
+            print "about to run signing of: ", self.dst_path_of("apply_update.exe").replace('\\', '\\\\\\\\')
+            self.run_command("%s %s %s" % (python, sign_py, self.dst_path_of("apply_update.exe").replace('\\', '\\\\\\\\')))
+            print "about to run signing of: ", self.dst_path_of("download_update.exe").replace('\\', '\\\\\\\\')
+            self.run_command("%s %s %s" % (python, sign_py, self.dst_path_of("download_update.exe").replace('\\', '\\\\\\\\')))
+            print "about to run signing of: ", self.dst_path_of("SL_Launcher.exe").replace('\\', '\\\\\\\\')
+            self.run_command("%s %s %s" % (python, sign_py, self.dst_path_of("SL_Launcher.exe").replace('\\', '\\\\\\\\')))
+            print "about to run signing of: ", self.dst_path_of("update_manager.exe").replace('\\', '\\\\\\\\')
+            self.run_command("%s %s %s" % (python, sign_py, self.dst_path_of("update_manager.exe").replace('\\', '\\\\\\\\')))
         else:
             print "Skipping code signing,", sign_py, "does not exist"
         self.created_path(self.dst_path_of(installer_file))
@@ -716,28 +749,29 @@ def construct(self):
         pkgdir = os.path.join(self.args['build'], os.pardir, 'packages')
         relpkgdir = os.path.join(pkgdir, "lib", "release")
         debpkgdir = os.path.join(pkgdir, "lib", "debug")
-        llbasedir = os.path.join(pkgdir, os.pardir)
+        vmpdir = os.path.join(pkgdir, "VMP")
+        llbasedir = os.path.join(pkgdir, "llbase")
 
         if self.prefix(src="", dst="Contents"):  # everything goes in Contents
             self.path("Info.plist", dst="Info.plist")
 
             # copy additional libs in <bundle>/Contents/MacOS/
             self.path(os.path.join(relpkgdir, "libndofdev.dylib"), dst="Resources/libndofdev.dylib")
-            self.path(os.path.join(relpkgdir, "libhunspell-1.3.0.dylib"), dst="Resources/libhunspell-1.3.0.dylib")
+            self.path(os.path.join(relpkgdir, "libhunspell-1.3.0.dylib"), dst="Resources/libhunspell-1.3.0.dylib")   
 
             if self.prefix(dst="MacOS"):
-                self.path2basename("../viewer_components/updater/scripts/darwin", "*.py")
                 #this copies over the python wrapper script, associated utilities and required libraries, see SL-321, SL-322 and SL-323
-                self.path2basename("../viewer_components/manager","SL_Launcher")
-                self.path2basename("../viewer_components/manager","*.py")
+                self.path2basename(vmpdir,"SL_Launcher")
+                self.path2basename(vmpdir,"*.py")
                 llbase_path = os.path.join(self.get_dst_prefix(),'llbase')
                 if not os.path.exists(llbase_path):
                     os.makedirs(llbase_path)
+                #before, we only needed llbase at build time.  With VMP, we need it at run time.
                 if self.prefix(dst="llbase"):
-                    self.path2basename("../packages/llbase","*.py")
-                    self.path2basename("../packages/llbase","_cllsd.so")
+                    self.path2basename(llbasedir,"*.py")
+                    self.path2basename(llbasedir,"_cllsd.so")
                     self.end_prefix()
-                self.end_prefix()         
+                self.end_prefix()  
 
             # most everything goes in the Resources directory
             if self.prefix(src="", dst="Resources"):
@@ -756,6 +790,12 @@ def construct(self):
                     self.path("secondlife.icns")
                     self.end_prefix(icon_path)
 
+                #VMP Tkinter icons
+                if self.prefix("vmp_icons"):
+                    self.path("*.png")
+                    self.path("*.gif")
+                    self.end_prefix("vmp_icons")
+
                 self.path("SecondLife.nib")
                 
                 # Translations
@@ -780,12 +820,6 @@ def construct(self):
                 self.path("uk.lproj")
                 self.path("zh-Hans.lproj")
 
-                #VMP icons
-                if self.prefix("vmp_icons"):
-                    self.path("*.png")
-                    self.path("*.gif")
-                    self.end_prefix("vmp_icons")
-
                 def path_optional(src, dst):
                     """
                     For a number of our self.path() calls, not only do we want
@@ -1158,7 +1192,7 @@ def construct(self):
         if self.prefix(src="", dst="bin"):
             self.path("secondlife-bin","do-not-directly-run-secondlife-bin")
             self.path("../linux_crash_logger/linux-crash-logger","linux-crash-logger.bin")
-            self.path2basename("../llplugin/slplugin", "SLPlugin")
+            self.path2basename("../llplugin/slplugin", "SLPlugin") 
             #this copies over the python wrapper script, associated utilities and required libraries, see SL-321, SL-322 and SL-323
             self.path2basename("../viewer_components/manager","SL_Launcher")
             self.path2basename("../viewer_components/manager","*.py")
@@ -1167,8 +1201,7 @@ def construct(self):
                 os.makedirs(llbase_path)
             if self.prefix(dst="llbase"):
                 self.path2basename("../packages/llbase","*.py")
-                self.path2basename("../packages/llbase","_cllsd.so")
-                self.end_prefix()            
+                self.path2basename("../packages/llbase","_cllsd.so")         
             self.end_prefix("bin")
 
         if self.prefix("res-sdl"):