diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
index 7ef4e7fb92b3b4abf25cf7f7777403213b05a782..2c5da5d2a703095fae5339c6fdc6a4cd14f36747 100755
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -900,21 +900,26 @@ bool unix_minidump_callback(const google_breakpad::MinidumpDescriptor& minidump_
 	// heap allocations in a crash handler.
 	
 	// path format: <dump_dir>/<minidump_id>.dmp
-	int dirPathLength = strlen(minidump_desc.path());
+	
+	//HACK:  *path points to the buffer in getMiniDumpFilename which has already allocated space
+	//to avoid doing allocation during crash.
+	char * path = LLApp::instance()->getMiniDumpFilename();
+	int dir_path_len = strlen(path);
 	
 	// The path must not be truncated.
-	llassert((dirPathLength + 5) <= LLApp::MAX_MINDUMP_PATH_LENGTH);
+	S32 remaining =  LLApp::MAX_MINDUMP_PATH_LENGTH - dir_path_len;
+
+	llassert( (remaining - strlen(minidump_desc.path())) > 5);
 	
-	char * path = LLApp::instance()->getMiniDumpFilename();
-	S32 remaining = LLApp::MAX_MINDUMP_PATH_LENGTH;
-	strncpy(path, minidump_desc.path(), remaining);
-	remaining -= dirPathLength;
-	path += dirPathLength;
-	if (remaining > 0 && dirPathLength > 0 && path[-1] != '/')
+	path += dir_path_len;
+
+	if (dir_path_len > 0 && path[-1] != '/')
 	{
 		*path++ = '/';
 		--remaining;
 	}
+
+	strncpy(path, minidump_desc.path(), remaining);
 	
 	llinfos << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << llendl;
 	LLApp::runErrorHandler();
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index 073685caff92f40b1110d12584996f39ddcca03f..bd34caf241a02c9859099968937528ce518fbf9b 100755
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -312,7 +312,7 @@ void LLCrashLogger::gatherFiles()
         vec file_vec = gDirUtilp->getFilesInDir(pathname);
         for(vec::const_iterator iter=file_vec.begin(); iter!=file_vec.end(); ++iter)
         {
-            if ( ( iter->length() > 30 ) && (iter->rfind(".log") != (iter->length()-4) ) )
+            if ( ( iter->length() > 30 ) && (iter->rfind(".dmp") == (iter->length()-4) ) )
             {
                 std::string fullname = pathname + *iter;
                 std::ifstream fdat( fullname.c_str(), std::ifstream::binary);
@@ -320,12 +320,16 @@ void LLCrashLogger::gatherFiles()
                 {
                     char buf[5];
                     fdat.read(buf,4);
-                    fdat.close();
+                    fdat.close();  
                     if (!strncmp(buf,"MDMP",4))
                     {
                         minidump_path = *iter;
-                        has_minidump = readMinidump(minidump_path);
+                        has_minidump = readMinidump(fullname);
 						mDebugLog["MinidumpPath"] = fullname;
+						if (has_minidump) 
+						{
+							break;
+						}
                     }
                 }
             }
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 5c0368df19319b8a0c6284ad005682faf7db070a..537142ebde8c5a2b2dfec1b1c46e98245ffd5487 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3376,7 +3376,7 @@ void getFileList()
 	for(vec::const_iterator iter=file_vec.begin(); iter!=file_vec.end(); ++iter)
 	{
 		filenames << *iter << " ";
-		if ( ( iter->length() > 30 ) && (iter->rfind(".log") != (iter->length()-4) ) )
+		if ( ( iter->length() > 30 ) && (iter->rfind(".dmp") == (iter->length()-4) ) )
 		{
 			std::string fullname = pathname + *iter;
 			std::ifstream fdat( fullname.c_str(), std::ifstream::binary);
@@ -3388,6 +3388,7 @@ void getFileList()
 				if (!strncmp(buf,"MDMP",4))
 				{
 					gDebugInfo["Dynamic"]["MinidumpPath"] = fullname;
+					break;
 				}
 			}
 		}
@@ -3504,15 +3505,21 @@ void LLAppViewer::handleViewerCrash()
 		LL_WARNS("MarkerFile") << "No gDirUtilp with which to create error marker file name" << LL_ENDL;
 	}		
 	
+#ifdef LL_WINDOWS //SPATTERS Wild guess that filename for Breakpad is not being returned due to sleep cycle in Crash Reporter.
+	Sleep(2000);
+#endif 
 
 	char *minidump_file = pApp->getMiniDumpFilename();
 
 	if(minidump_file && minidump_file[0] != 0)
 	{
 		gDebugInfo["Dynamic"]["MinidumpPath"] = minidump_file;
+		//SPATTERS another possibility is that when using OOP it must be initiated by a wrapping program so that when the
+		//viewer crashes, we are from a sibling thread than as a child.   Might be able to request minidump at this point
+		//as a work-around.
 	}
 #ifdef LL_WINDOWS
-	else
+	else  //SPATTERS there is no else here in the older code
 	{
 		getFileList();
 	}
diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp
index 30c9cf551b80accc0f72a20d109157c8a2bd13f3..cd9b351fdb69c626badf36529d54f8e35b8e99eb 100644
--- a/indra/win_crash_logger/llcrashloggerwindows.cpp
+++ b/indra/win_crash_logger/llcrashloggerwindows.cpp
@@ -333,13 +333,11 @@ void LLCrashLoggerWindows::OnClientExited(void* context,
 	sInstance->mClientsConnected--;
 }
 
-/*
+
 void LLCrashLoggerWindows::OnClientDumpRequest(void* context,
 	const google_breakpad::ClientInfo* client_info,
 	const std::wstring* file_path) 
 {
-	ProcessingLock lock;
-
 	if (!file_path) 
 	{
 		llwarns << "dump with no file path" << llendl;
@@ -359,18 +357,8 @@ void LLCrashLoggerWindows::OnClientDumpRequest(void* context,
 	}
 
 	DWORD pid = client_info->pid();
-
-
-// Send the crash dump using a worker thread. This operation has retry
-// logic in case there is no internet connection at the time.
-DumpJobInfo* dump_job = new DumpJobInfo(pid, self, map,
-dump_location.value());
-if (!::QueueUserWorkItem(&CrashService::AsyncSendDump,
-dump_job, WT_EXECUTELONGFUNCTION)) {
-LOG(ERROR) << "could not queue job";
 }
-}
-*/
+
 
 bool LLCrashLoggerWindows::initCrashServer()
 {
@@ -397,7 +385,7 @@ bool LLCrashLoggerWindows::initCrashServer()
 	mCrashHandler = new CrashGenerationServer( wpipe_name,
 		NULL, 
  		&LLCrashLoggerWindows::OnClientConnected, this,
-		NULL, NULL,	// 	&LLCrashLoggerWindows::OnClientDumpRequest, this,
+		/*NULL, NULL,    */ &LLCrashLoggerWindows::OnClientDumpRequest, this,
  		&LLCrashLoggerWindows::OnClientExited, this,
  		NULL, NULL,
  		true, &wdump_path);
diff --git a/indra/win_crash_logger/llcrashloggerwindows.h b/indra/win_crash_logger/llcrashloggerwindows.h
index 85cafd54c824b7aa2936d6f32ae4d239c80ad2e5..1812e2737ec1d2f01a6fb46641ba8360a2bd8598 100644
--- a/indra/win_crash_logger/llcrashloggerwindows.h
+++ b/indra/win_crash_logger/llcrashloggerwindows.h
@@ -68,10 +68,10 @@ class LLCrashLoggerWindows : public LLCrashLogger
 	static void OnClientConnected(void* context,
  					const google_breakpad::ClientInfo* client_info);
  	
- 	/*static void OnClientDumpRequest(
+ 	static void OnClientDumpRequest(
  					void* context,
  					const google_breakpad::ClientInfo* client_info,
- 					const std::wstring* file_path);*/
+ 					const std::wstring* file_path);
  	
  	static void OnClientExited(void* context,
 		 			const google_breakpad::ClientInfo* client_info);