diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp
index b534fc0b4a711655c5ba99dd47a06ae5a13c6c24..60f1de4e8c559f38de432060958bba45fb725945 100644
--- a/indra/newview/llimprocessing.cpp
+++ b/indra/newview/llimprocessing.cpp
@@ -857,7 +857,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
             }
             else // IM_TASK_INVENTORY_OFFERED
             {
-                if (offline == IM_OFFLINE && session_id.isNull() && aux_id.notNull() && binary_bucket_size > sizeof(S8)* 5)
+                if (offline)
                 {
                     // cap received offline message
                     std::string str_bucket = ll_safe_string((char*)binary_bucket, binary_bucket_size);
@@ -889,9 +889,10 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
             info->mIM = dialog;
             info->mFromID = from_id;
             info->mFromGroup = from_group;
-            info->mTransactionID = session_id;
             info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
 
+            info->mTransactionID = session_id.notNull() ? session_id : aux_id;
+
             info->mFromName = name;
             info->mDesc = message;
             info->mHost = sender;
@@ -1569,7 +1570,7 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
         return;
     }
 
-    if (gAgent.getRegion() == NULL)
+    if (!gAgent.getRegion())
     {
         LL_WARNS("Messaging") << "Region null while attempting to load messages." << LL_ENDL;
         return;
@@ -1577,8 +1578,8 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
 
     LL_INFOS("Messaging") << "Processing offline messages." << LL_ENDL;
 
-    std::vector<U8> data;
-    S32 binary_bucket_size = 0;
+//     std::vector<U8> data;
+//     S32 binary_bucket_size = 0;
     LLHost sender = gAgent.getRegionHost();
 
     LLSD::array_iterator i = messages.beginArray();
@@ -1587,38 +1588,46 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
     {
         const LLSD &message_data(*i);
 
-        LLVector3 position(message_data["local_x"].asReal(), message_data["local_y"].asReal(), message_data["local_z"].asReal());
-        data = message_data["binary_bucket"].asBinary();
-        binary_bucket_size = data.size(); // message_data["count"] always 0
-        U32 parent_estate_id = message_data.has("parent_estate_id") ? message_data["parent_estate_id"].asInteger() : 1; // 1 - IMMainland
+        /* RIDER: Many fields in this message are using a '_' rather than the standard '-'.  This 
+         * should be changed but would require tight coordination with the simulator. 
+         */
+        LLVector3 position;
+        if (message_data.has("position"))
+        {
+            position.setValue(message_data["position"]);
+        }
+        else
+        {
+            position.set(message_data["local_x"].asReal(), message_data["local_y"].asReal(), message_data["local_z"].asReal());
+        }
 
-        // Todo: once dirtsim-369 releases, remove one of the int/str options
-        BOOL from_group;
-        if (message_data["from_group"].isInteger())
+        std::vector<U8> bin_bucket;
+        if (message_data.has("binary_bucket"))
         {
-            from_group = message_data["from_group"].asInteger();
+            bin_bucket = message_data["binary_bucket"].asBinary();
         }
         else
         {
-            from_group = message_data["from_group"].asString() == "Y";
+            bin_bucket.push_back(0);
         }
 
-        LLIMProcessing::processNewMessage(message_data["from_agent_id"].asUUID(),
-            from_group,
+        LLIMProcessing::processNewMessage(
+            message_data["from_id"].asUUID(),
+            message_data["from_group"].asBoolean(),
             message_data["to_agent_id"].asUUID(),
-            IM_OFFLINE,
-            (EInstantMessage)message_data["dialog"].asInteger(),
-            message_data["session_id"].asUUID(),
-            message_data["timestamp"].asInteger(),
-            message_data["from_agent_name"].asString(),
-            message_data["message"].asString(),
-            parent_estate_id,
+            static_cast<U8>(message_data["offline"].asInteger()),
+            static_cast<EInstantMessage>(message_data["dialog"].asInteger()),
+            message_data["transaction-id"].asUUID(),
+            static_cast<U32>(message_data["timestamp"].asInteger()),
+            message_data["from_name"].asString(),
+            (message_data.has("message")) ? message_data["message"].asString() : std::string(),
+            static_cast<U32>((message_data.has("parent_estate_id")) ? message_data["parent_estate_id"].asInteger() : 1), // 1 - IMMainland
             message_data["region_id"].asUUID(),
             position,
-            &data[0],
-            binary_bucket_size,
+            bin_bucket.data(),
+            bin_bucket.size(),
             sender,
-            message_data["asset_id"].asUUID()); // not necessarily an asset
+            message_data["asset_id"].asUUID());
     }
 }