diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l
index 758754a1c3e067cf5cb3c105cf76dd384f2ff9d3..70fe98dd35c67e06ba88fe7895e658e7c0e182f7 100644
--- a/gcc/cobol/scan.l
+++ b/gcc/cobol/scan.l
@@ -1776,9 +1776,8 @@ COPY		{
                   ydflval.string = yylval.string = strdup(yytext);
 
                   int token = keyword_tok(null_trim(yylval.string), true);
-		  auto elem = symbol_field(PROGRAM, 0, yylval.string);
 
-                  if( token && ! elem ) { // not a data item name
+                  if( token && ! symbol_field(PROGRAM, 0, yylval.string) ) { 
                     // If token is an intrinsic, and not in Repository, pretend
                     // it's a name and let the parser sort it out.
                     auto name = intrinsic_function_name(token);
diff --git a/gcc/cobol/symbols.cc b/gcc/cobol/symbols.cc
index b09d38892f599b02e0969d547408889d27aee17f..00f271fd4829a49d4494b569cc6a5ea4a221dda8 100644
--- a/gcc/cobol/symbols.cc
+++ b/gcc/cobol/symbols.cc
@@ -1940,7 +1940,7 @@ symbol_field_parent_set( struct cbl_field_t *field )
       auto redefined = symbol_redefines(prior);
       if( redefined ) prior = redefined;
       field->parent = prior->parent;
-      return prior;
+      return cbl_field_of(symbol_at(field->parent));
     }
     
     if( prior->level < field->level ) {