diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index 83fcb5db0f51b907f162b4bd14c7f3c36f01f736..3b4d2c7d43875d24d5a1feea6db5acfda680a22e 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -1214,7 +1214,10 @@ initialize_variable_internal( cbl_refer_t refer,
                     : 0;
   flag_bits     |= (refer.nsubscript << NSUBSCRIPT_SHIFT) & NSUBSCRIPT_MASK;
   flag_bits     |= just_once ? JUST_ONCE_BIT : 0 ;
-//  if( is_redefined || flag_bits || !refer_is_clean(refer) )
+  
+  suppress_dest_depends = false;  // Set this to false so that refer_is_clean is valid
+  //fprintf(stderr, "refer_is_clean %2.2d %s %d 0x%lx\n", refer.field->level, refer.field->name, refer_is_clean(refer), refer.field->attr);
+  if( !refer_is_clean(refer) )
     {
     refer_fill_dest(refer);
     gg_call(VOID,
@@ -1223,16 +1226,18 @@ initialize_variable_internal( cbl_refer_t refer,
             gg_get_address_of(refer.refer_decl_node),
             build_int_cst_type(INT, flag_bits) );
     }
-//  else
-//    {
-//    // We have a clean refer with no mods, so we can send just the pointer to
-//    // the field
-//    refer_fill_dest(refer);
-//    gg_call(VOID,
-//            "__gg__initialize_variable_clean",
-//            1,
-//            gg_get_address_of(refer.field->var_decl_node));
-//    }
+  else
+    {
+    // We have a clean refer with no mods, so we can send just the pointer to
+    // the field
+    refer_fill_dest(refer);
+    gg_call(VOID,
+            "__gg__initialize_variable_clean",
+            2,
+            gg_get_address_of(refer.field->var_decl_node),
+            build_int_cst_type(INT, flag_bits) );
+    }
+  suppress_dest_depends = true;
 
   TRACE1
     {
diff --git a/gcc/cobol/genutil.cc b/gcc/cobol/genutil.cc
index 6a4b3b7c524d7cf1dc80a46e7beb22c8de4d6d6f..46cad81ce76aa1fed12f858c7333adacc68b4c14 100644
--- a/gcc/cobol/genutil.cc
+++ b/gcc/cobol/genutil.cc
@@ -2701,6 +2701,17 @@ bool
 refer_is_clean(cbl_refer_t &refer)
   {
   // By "clean", I mean that it has no remods or subscripts or other modifications
+
+  // if(    refer.field
+      // && (refer.field->attr & (temporary_e | intermediate_e)) )
+    // {
+    // }
+  // else
+    // {
+    // cbl_field_t *odo = symbol_find_odo(refer.field);
+    // fprintf(stderr, "    odo is %p\n", odo);
+    // }
+
   return     !refer.all
           && !refer.addr_of
           && !refer.nsubscript
diff --git a/libgcobol/libgcobol.cc b/libgcobol/libgcobol.cc
index 91ae85d37159d6d03e7793d403804d6f2c171bb7..606b970618ac25120460525402461221ab0cc707 100644
--- a/libgcobol/libgcobol.cc
+++ b/libgcobol/libgcobol.cc
@@ -4396,11 +4396,11 @@ __gg__initialize_variable(cblc_refer_t *var_ref,
 
 extern "C"
 void
-__gg__initialize_variable_clean(cblc_field_t *var)
+__gg__initialize_variable_clean(cblc_field_t *var, int flag_bits)
   {
   init_var_both(  var,
                   var->data,
-                  0);
+                  flag_bits);
   }
 
 static void