diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py
index 62bd09471a308a441933d168ac4140e1fcfd6cd3..0a39db2b216cb3356e0f4348b7de8dc06135cef4 100755
--- a/indra/lib/python/indra/util/llmanifest.py
+++ b/indra/lib/python/indra/util/llmanifest.py
@@ -143,6 +143,9 @@ def get_default_platform(dummy):
          default=None),
     dict(name='versionfile',
          description="""The name of a file containing the full version number."""),
+    dict(name='bundleid',
+         description="""The Mac OS X Bundle identifier.""",
+         default="com.secondlife.indra.viewer"),
     dict(name='signature',
          description="""This specifies an identity to sign the viewer with, if any.
         If no value is supplied, the default signature will be used, if any. Currently
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 8d36214506ecd4ecf4dc7c80c4cdb75facccbc5c..266de7277d6d950ede02758e26eed99786835d43 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1331,7 +1331,7 @@ set(viewer_HEADER_FILES
 
 source_group("CMake Rules" FILES ViewerInstall.cmake)
 
-#summary.json creation moved to viewer_manifest.py MAINT-6413
+#build_data.json creation moved to viewer_manifest.py MAINT-6413
 # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt"
            "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\n")
@@ -2073,6 +2073,7 @@ if (DARWIN)
       --grid=${GRID}
       "--channel=${VIEWER_CHANNEL}"
       --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+      --bundleid=${MACOSX_BUNDLE_GUI_IDENTIFIER}
       --source=${CMAKE_CURRENT_SOURCE_DIR}
     DEPENDS
       ${VIEWER_BINARY_NAME}
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index e806a4fdadf3877f3e19a51b296ebd0ce50efa18..d9fef022e5889cc9cb32794e9fa1cd1e4c918368 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -123,20 +123,20 @@ def construct(self):
 
                 #do not need to test for existence.  If no platform is passed, llmanifest computes a default in get_default_platform
                 #the choice of value names (lnx, mac, win32, win) is dictated by the VMM API
-                summary_json_platform = ""
+                build_data_json_platform = ""
                 if 'linux' in self.args['platform']:
-                    summary_json_platform = 'lnx'
+                    build_data_json_platform = 'lnx'
                 elif 'darwin' in self.args['platform']:
-                    summary_json_platform = 'mac'
+                    build_data_json_platform = 'mac'
                 elif 'windows' in self.args['platform']:
                     #default case
-                    summary_json_platform = 'win'
+                    build_data_json_platform = 'win'
                     if 'arch' in self.args and self.args['arch']:
                         if 'i686' in  self.args['arch']:
-                            summary_json_platform = 'win32'
+                            build_data_json_platform = 'win32'
                 #we really shouldn't be here, something is very wrong at this point
                 else:
-                    summary_json_platform = 'None'
+                    build_data_json_platform = 'None'
 
 
                 # put_in_file(src=) need not be an actual pathname; it
@@ -201,21 +201,26 @@ def construct(self):
             # File in the newview/ directory
             self.path("gpu_table.txt")
 
-            #summary.json.  Standard with exception handling is fine.  If we can't open a new file for writing, we have worse problems
+            #build_data.json.  Standard with exception handling is fine.  If we can't open a new file for writing, we have worse problems
             #platform is computed above with other arg parsing
-            summary_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),
+            build_data_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),
+                            "Channel Base": CHANNEL_VENDOR_BASE,
                             "Channel":self.channel_with_pkg_suffix(),
-                            "Platform":summary_json_platform}
+                            "Platform":build_data_json_platform,
+                            "Update Service":"https://update.secondlife.com/update/",
+                            }
             #MAINT-7294: Windows exe names depend on channel name, so write that in also
-            if summary_json_platform.startswith('win'):
-                summary_dict.update({'Executable':self.final_exe()})
-            with open(os.path.join(os.pardir,'summary.json'), 'w') as summary_handle:
-                json.dump(summary_dict,summary_handle)
+            if build_data_json_platform.startswith('win'):
+                build_data_dict.update({'Executable':self.final_exe()})
+            if build_data_json_platform.startswith('mac'):
+                build_data_dict.update({'Bundle Id':self.args['bundleid']})
+            with open(os.path.join(os.pardir,'build_data.json'), 'w') as build_data_handle:
+                json.dump(build_data_dict,build_data_handle)
 
             #we likely no longer need the test, since we will throw an exception above, but belt and suspenders and we get the
             #return code for free.
-            if not self.path2basename(os.pardir, "summary.json"):
-                print "No summary.json file"
+            if not self.path2basename(os.pardir, "build_data.json"):
+                print "No build_data.json file"
 
     def grid(self):
         return self.args['grid']
diff --git a/indra/viewer_components/Resources/README b/indra/viewer_components/Resources/README
index e1b35730d419ec3721debf4050dfc0522ff12d93..b0863a7f2599e1d11b5087e2790292cdea5590a5 100644
--- a/indra/viewer_components/Resources/README
+++ b/indra/viewer_components/Resources/README
@@ -1,4 +1,4 @@
-This directory only exists as a place for the summary.json file to exist when the unit tests are run on a Mac, where the file goes to a sibling directory of the scripts dir.  In Linux and Windows, the JSON file goes into the same directory as the script.
+This directory only exists as a place for the build_data.json file to exist when the unit tests are run on a Mac, where the file goes to a sibling directory of the scripts dir.  In Linux and Windows, the JSON file goes into the same directory as the script.
 
 See: