diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index 8e4bc479d624b9f9f19ba1451b27fdb83f3f3858..b372e9c635cd3c37216ada53fcc394814ce0e00d 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -14726,7 +14726,7 @@ psa_new_var_decl(cbl_field_t *new_var, const char *external_record_base)
     if( new_var->attr & external_e )
       {
       // For external variables, just stick with the original name
-      strcpy(base_name, new_var->name);
+      sprintf(base_name, "%s_cblc_field", new_var->name);
       }
     else
       {
@@ -15378,7 +15378,11 @@ parser_symbol_add(struct cbl_field_t *new_var )
             {
             // We need a unique name for the allocated data for this COBOL variable:
             char achDataName[256];
-            if( new_var->name[0] == '_' )
+            if( new_var->attr & external_e )
+              {
+              sprintf(achDataName, "%s", new_var->name);
+              }
+            else if( new_var->name[0] == '_' )
               {
               // Avoid doubling up on leading underscore
               sprintf(achDataName,
@@ -15394,7 +15398,16 @@ parser_symbol_add(struct cbl_field_t *new_var )
                       sv_data_name_counter++);
               }
 
-            if( new_var->type != FldLiteralA )
+            if( new_var->attr & external_e )
+              {
+              tree array_type = build_array_type_nelts(UCHAR, bytes_to_allocate);
+              new_var->data_decl_node = gg_define_variable(
+                                  array_type,
+                                  achDataName,
+                                  vs_external);
+              data_area = gg_get_address_of(new_var->data_decl_node);
+              }
+            else if( new_var->type != FldLiteralA )
               {
               tree array_type = build_array_type_nelts(UCHAR, bytes_to_allocate);
               new_var->data_decl_node = gg_define_variable(