diff --git a/omaha_request_builder_xml.cc b/omaha_request_builder_xml.cc
index 95fb183..823894e 100644
--- a/omaha_request_builder_xml.cc
+++ b/omaha_request_builder_xml.cc
@@ -309,14 +309,18 @@
       product_components_args +
       fingerprint_arg +
       buildtype_arg +
-      "lang=\"" + XmlEncodeWithDefault(params_->app_lang(), "en-US") + "\" " +
       "board=\"" + XmlEncodeWithDefault(params_->os_board()) + "\" " +
       "hardware_class=\"" + XmlEncodeWithDefault(params_->hwid()) + "\" " +
-      "delta_okay=\"" + delta_okay_str + "\" "
+      "delta_okay=\"" + delta_okay_str + "\" " +
+      install_date_in_days_str +
+
+      // DLC excluded for installs and updates.
+      (app_data.is_dlc ? "" :
+      "lang=\"" + XmlEncodeWithDefault(params_->app_lang(), "en-US") + "\" " +
       "fw_version=\"" + XmlEncodeWithDefault(params_->fw_version()) + "\" " +
       "ec_version=\"" + XmlEncodeWithDefault(params_->ec_version()) + "\" " +
-      install_date_in_days_str +
-      requisition_arg +
+      requisition_arg) +
+
       ">\n" +
          app_body +
       "    </app>\n";
@@ -363,12 +367,14 @@
       .version = params_->app_version(),
       .product_components = params_->product_components(),
       // Skips updatecheck for platform app in case of an install operation.
-      .skip_update = params_->is_install()};
+      .skip_update = params_->is_install(),
+      .is_dlc = false};
   app_xml += GetApp(product_app);
   if (!params_->system_app_id().empty()) {
     OmahaAppData system_app = {.id = params_->system_app_id(),
                                .version = params_->system_version(),
-                               .skip_update = false};
+                               .skip_update = false,
+                               .is_dlc = false};
     app_xml += GetApp(system_app);
   }
   // Create APP ID according to |dlc_module_id| (sticking the current AppID to
@@ -377,7 +383,8 @@
     OmahaAppData dlc_module_app = {
         .id = params_->GetAppId() + "_" + dlc_module_id,
         .version = params_->app_version(),
-        .skip_update = false};
+        .skip_update = false,
+        .is_dlc = true};
     app_xml += GetApp(dlc_module_app);
   }
   return app_xml;
diff --git a/omaha_request_builder_xml.h b/omaha_request_builder_xml.h
index 495ddd7..488be8a 100644
--- a/omaha_request_builder_xml.h
+++ b/omaha_request_builder_xml.h
@@ -85,6 +85,7 @@
   std::string version;
   std::string product_components;
   bool skip_update;
+  bool is_dlc;
 };
 
 // Encodes XML entities in a given string. Input must be ASCII-7 valid. If
@@ -139,6 +140,9 @@
   std::string GetRequest() const override;
 
  private:
+  FRIEND_TEST(OmahaRequestBuilderXmlTest, PlatformGetAppTest);
+  FRIEND_TEST(OmahaRequestBuilderXmlTest, DlcGetAppTest);
+
   // Returns an XML that corresponds to the entire <os> node of the Omaha
   // request based on the member variables.
   std::string GetOs() const;
diff --git a/omaha_request_builder_xml_unittest.cc b/omaha_request_builder_xml_unittest.cc
index 4375bed..ecab0e0 100644
--- a/omaha_request_builder_xml_unittest.cc
+++ b/omaha_request_builder_xml_unittest.cc
@@ -80,6 +80,56 @@
   EXPECT_EQ("<not escaped>", XmlEncodeWithDefault("\xc2", "<not escaped>"));
 }
 
+TEST_F(OmahaRequestBuilderXmlTest, PlatformGetAppTest) {
+  OmahaRequestParams omaha_request_params{&fake_system_state_};
+  omaha_request_params.set_device_requisition("device requisition");
+  OmahaRequestBuilderXml omaha_request{nullptr,
+                                       &omaha_request_params,
+                                       false,
+                                       false,
+                                       0,
+                                       0,
+                                       0,
+                                       fake_system_state_.prefs(),
+                                       ""};
+  OmahaAppData dlc_module_app = {.id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
+                                 .version = "",
+                                 .skip_update = false,
+                                 .is_dlc = false};
+
+  // Verify that the attributes that shouldn't be missing for Platform AppID are
+  // in fact present in the <app ...></app>.
+  const string app = omaha_request.GetApp(dlc_module_app);
+  EXPECT_NE(string::npos, app.find("lang="));
+  EXPECT_NE(string::npos, app.find("fw_version="));
+  EXPECT_NE(string::npos, app.find("ec_version="));
+  EXPECT_NE(string::npos, app.find("requisition="));
+}
+
+TEST_F(OmahaRequestBuilderXmlTest, DlcGetAppTest) {
+  OmahaRequestParams omaha_request_params{&fake_system_state_};
+  omaha_request_params.set_device_requisition("device requisition");
+  OmahaRequestBuilderXml omaha_request{nullptr,
+                                       &omaha_request_params,
+                                       false,
+                                       false,
+                                       0,
+                                       0,
+                                       0,
+                                       fake_system_state_.prefs(),
+                                       ""};
+  OmahaAppData dlc_module_app = {
+      .id = "_dlc_id", .version = "", .skip_update = false, .is_dlc = true};
+
+  // Verify that the attributes that should be missing for DLC AppIDs are in
+  // fact not present in the <app ...></app>.
+  const string app = omaha_request.GetApp(dlc_module_app);
+  EXPECT_EQ(string::npos, app.find("lang="));
+  EXPECT_EQ(string::npos, app.find("fw_version="));
+  EXPECT_EQ(string::npos, app.find("ec_version="));
+  EXPECT_EQ(string::npos, app.find("requisition="));
+}
+
 TEST_F(OmahaRequestBuilderXmlTest, GetRequestXmlRequestIdTest) {
   OmahaEvent omaha_event;
   OmahaRequestParams omaha_request_params{&fake_system_state_};
