diff --git a/compiler2/record.c b/compiler2/record.c
index 0671f8e4403c56e602360217caa4427e56ffe9f4..e8ee59f191fe7a30613e9a237ea1750b76d62aa6 100644
--- a/compiler2/record.c
+++ b/compiler2/record.c
@@ -3723,20 +3723,24 @@ void defRecordClass1(const struct_def *sdef, output_struct *output)
       "  boolean is_bound() const;\n\n");
   src = mputprintf(src,
       "boolean %s::is_bound() const\n"
-      "{\n", name);
+      "{\n"
+      "return ", name);
       for(i=0; i < sdef->nElements; i++) {
+        if (i != 0 ) {
+          src = mputstr(src, "\n  || ");
+        }
         if(sdef->elements[i].isOptional) {
           src = mputprintf(src,
-            "if(OPTIONAL_OMIT == field_%s.get_selection() || field_%s.is_bound()) return TRUE;\n",
+            "(OPTIONAL_OMIT == field_%s.get_selection() || field_%s.is_bound())",
             sdef->elements[i].name, sdef->elements[i].name);
         } else {
           src = mputprintf(src,
-            "if(field_%s.is_bound()) return TRUE;\n",
+            "(field_%s.is_bound())",
             sdef->elements[i].name);
         }
       }
   src = mputprintf(src,
-      "return FALSE;\n"
+      ";\n"
       "}\n");
 
   /* is_present */
@@ -3748,20 +3752,24 @@ void defRecordClass1(const struct_def *sdef, output_struct *output)
       "  boolean is_value() const;\n\n");
   src = mputprintf(src,
       "boolean %s::is_value() const\n"
-      "{\n", name);
+      "{\n"
+      "return ", name);
       for(i=0; i < sdef->nElements; i++) {
+        if (i != 0 ) {
+          src = mputstr(src, "\n  && ");
+        }
         if(sdef->elements[i].isOptional) {
           src = mputprintf(src,
-            "if(OPTIONAL_OMIT != field_%s.get_selection() && !field_%s.is_value()) return FALSE;\n",
+            "(OPTIONAL_OMIT == field_%s.get_selection() || field_%s.is_value())",
             sdef->elements[i].name, sdef->elements[i].name);
         } else {
           src = mputprintf(src,
-            "if(!field_%s.is_value()) return FALSE;\n",
+            "field_%s.is_value()",
             sdef->elements[i].name);
         }
       }
   src = mputprintf(src,
-      "return TRUE;\n}\n");
+      ";\n}\n");
 
   /* field accessor methods */
   for (i = 0; i < sdef->nElements; i++) {
@@ -5959,19 +5967,23 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output)
         "if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) "
         "return FALSE;\n", name);
     src = mputstr(src, "if (template_selection != SPECIFIC_VALUE) return TRUE;\n");
+    src = mputstr(src, "return ");
     for (i = 0; i < sdef->nElements; i++) {
+      if (i != 0) {
+        src = mputstr(src, "\n ||");
+      }
         if (sdef->elements[i].isOptional) {
             src = mputprintf(src,
-                "if (single_value->field_%s.is_omit() ||"
-                    " single_value->field_%s.is_bound()) return TRUE;\n",
+                "(single_value->field_%s.is_omit() ||"
+                    " single_value->field_%s.is_bound())\n",
                 sdef->elements[i].name, sdef->elements[i].name);
         } else {
             src = mputprintf(src,
-                "if (single_value->field_%s.is_bound()) return TRUE;\n",
+                "single_value->field_%s.is_bound()\n",
                 sdef->elements[i].name);
         }
     }
-    src = mputstr(src, "return FALSE;\n"
+    src = mputstr(src, ";\n"
         "}\n\n");
 
     /* is_value */
@@ -5981,19 +5993,23 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output)
         "{\n"
         "if (template_selection != SPECIFIC_VALUE || is_ifpresent) "
         "return FALSE;\n", name);
+        src = mputstr(src, "return ");
     for (i = 0; i < sdef->nElements; i++) {
+      if (i != 0) {
+        src = mputstr(src, "\n &&");
+      }
         if (sdef->elements[i].isOptional) {
             src = mputprintf(src,
-                "if (!single_value->field_%s.is_omit() &&"
-                    " !single_value->field_%s.is_value()) return FALSE;\n",
+                "(single_value->field_%s.is_omit() ||"
+                    " single_value->field_%s.is_value())",
                 sdef->elements[i].name, sdef->elements[i].name);
         } else {
             src = mputprintf(src,
-                "if (!single_value->field_%s.is_value()) return FALSE;\n",
+                "single_value->field_%s.is_value()",
                 sdef->elements[i].name);
         }
     }
-    src = mputstr(src, "return TRUE;\n"
+    src = mputstr(src, ";\n"
         "}\n\n");
 
     /* clean_up function */