diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp
index 976e63909890bb5f5533a5715d03cf4ac68fbaea..6a4024649705ee70b3e85adfc50270bb99cced6a 100644
--- a/indra/viewer_components/updater/llupdaterservice.cpp
+++ b/indra/viewer_components/updater/llupdaterservice.cpp
@@ -135,7 +135,7 @@ class LLUpdaterServiceImpl :
 	void downloadComplete(LLSD const & data);
 	void downloadError(std::string const & message);
 
-	bool onMainLoop(LLSD const & event);	
+	bool onMainLoop(LLSD const & event);
 
 private:
 	void restartTimer(unsigned int seconds);
@@ -349,6 +349,13 @@ void LLUpdaterServiceImpl::downloadComplete(LLSD const & data)
 	// marker file. 
 	llofstream update_marker(update_marker_path());
 	LLSDSerialize::toPrettyXML(data, update_marker);
+	
+	LLSD event;
+	event["pump"] = LLUpdaterService::pumpName();
+	LLSD payload;
+	payload["type"] = LLSD(LLUpdaterService::DOWNLOAD_COMPLETE);
+	event["payload"] = payload;
+	LLEventPumps::instance().obtain("mainlooprepeater").post(event);
 }
 
 void LLUpdaterServiceImpl::downloadError(std::string const & message) 
@@ -362,6 +369,14 @@ void LLUpdaterServiceImpl::downloadError(std::string const & message)
 	{
 		restartTimer(mCheckPeriod); 
 	}
+
+	LLSD event;
+	event["pump"] = LLUpdaterService::pumpName();
+	LLSD payload;
+	payload["type"] = LLSD(LLUpdaterService::DOWNLOAD_ERROR);
+	payload["message"] = message;
+	event["payload"] = payload;
+	LLEventPumps::instance().obtain("mainlooprepeater").post(event);
 }
 
 void LLUpdaterServiceImpl::restartTimer(unsigned int seconds)
@@ -405,6 +420,13 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)
 
 //-----------------------------------------------------------------------
 // Facade interface
+
+std::string const & LLUpdaterService::pumpName(void)
+{
+	static std::string name("updater_service");
+	return name;
+}
+
 LLUpdaterService::LLUpdaterService()
 {
 	if(gUpdater.expired())
diff --git a/indra/viewer_components/updater/llupdaterservice.h b/indra/viewer_components/updater/llupdaterservice.h
index ec20dc6e053e92caa0276417f1a9df53d43620e7..8d0b95be86fddda152eaa9973d825a7b028d5b03 100644
--- a/indra/viewer_components/updater/llupdaterservice.h
+++ b/indra/viewer_components/updater/llupdaterservice.h
@@ -39,6 +39,16 @@ class LLUpdaterService
 	public:
 		UsageError(const std::string& msg) : std::runtime_error(msg) {}
 	};
+	
+	// Name of the event pump through which update events will be delivered.
+	static std::string const & pumpName(void);
+	
+	// Type codes for events posted by this service.  Stored the event's 'type' element.
+	enum UpdateEvent {
+		INVALID,
+		DOWNLOAD_COMPLETE,
+		DOWNLOAD_ERROR
+	};
 
 	LLUpdaterService();
 	~LLUpdaterService();