diff --git a/client/client_types.cpp b/client/client_types.cpp
index 7976bf90e1305a7f4b8105a188b04b2e5b633875..38b25b31121aa1dd72394c19e42eab237c8a7255 100644
--- a/client/client_types.cpp
+++ b/client/client_types.cpp
@@ -645,7 +645,11 @@ int FILE_INFO::merge_info(FILE_INFO& new_info) {
     // This deals with cases where somehow a file didn't
     // get protected right when it was initially downloaded.
     //
-    if (status == FILE_PRESENT && new_info.executable) {
+    if (status == FILE_PRESENT && !executable && new_info.executable) {
+        msg_printf(project, MSG_INTERNAL_ERROR,
+            "%s has changed to executable", name
+        );
+        executable = true;
         int retval = set_permissions();
         if (retval) {
             msg_printf(project, MSG_INTERNAL_ERROR,
diff --git a/html/user/buda.php b/html/user/buda.php
index b3bfb9fa383208ccf4f1ac430edd944c1549450c..b2fe394e2fe8f12902dbe877c59f964d5be0e3f8 100644
--- a/html/user/buda.php
+++ b/html/user/buda.php
@@ -199,7 +199,7 @@ function create_templates($variant, $variant_desc, $dir) {
     $x = "<input_template>\n";
     $ninfiles = 1 + count($variant_desc->input_file_names) + count($variant_desc->app_files);
     for ($i=0; $i<$ninfiles; $i++) {
-        $x .= "   <file_info>\n      <no_delete/>\n   </file_info>\n";
+        $x .= "   <file_info>\n      <no_delete/>\n      <executable/>\n   </file_info>\n";
     }
     $x .= "   <workunit>\n";
     $x .= file_ref_in($variant_desc->dockerfile);
diff --git a/lib/hostinfo.cpp b/lib/hostinfo.cpp
index 842da0a293fecf1d35d251f21e0ae6c76f7cf9fe..289ab42382d7e98270625a074bf98373acdb9c8b 100644
--- a/lib/hostinfo.cpp
+++ b/lib/hostinfo.cpp
@@ -89,6 +89,7 @@ void HOST_INFO::clear_host_info() {
 }
 
 int HOST_INFO::parse(XML_PARSER& xp, bool static_items_only) {
+    int i;
     clear_host_info();
     while (!xp.get_tag()) {
         if (xp.match_tag("/host_info")) return 0;
@@ -144,8 +145,15 @@ int HOST_INFO::parse(XML_PARSER& xp, bool static_items_only) {
         }
 #else
         if (xp.parse_str("docker_version", docker_version, sizeof(docker_version))) continue;
+        if (xp.parse_int("docker_type", i)) {
+            docker_type = (DOCKER_TYPE)i;
+            continue;
+        }
         if (xp.parse_str("docker_compose_version", docker_compose_version, sizeof(docker_compose_version))) continue;
-        if (xp.parse_str("docker_version", docker_version, sizeof(docker_version))) continue;
+        if (xp.parse_int("docker_compose_type", i)) {
+            docker_compose_type = (DOCKER_TYPE)i;
+            continue;
+        }
 #endif
         if (xp.parse_str("product_name", product_name, sizeof(product_name))) continue;
         if (xp.parse_str("virtualbox_version", virtualbox_version, sizeof(virtualbox_version))) continue;