diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y
index 01140e74c164b5a5b477001c01c191da55eabc29..c108a0358ab970bcd365c4d9743b4c0bb77e252f 100644
--- a/gcc/cobol/parse.y
+++ b/gcc/cobol/parse.y
@@ -3172,10 +3172,11 @@ data_clauses:   data_clause
                     YYERROR;
                   }
                   cbl_field_t *field = current_field();
+#if 0
                   if( symbol_redefines(field) ) {
                     redefine_field(field);
                   }
-
+#endif
                   const int globex = (global_e | external_e);
                   if( (($$ | $2) & globex) == globex ) {
                     yyerror("GLOBAL and EXTERNAL specified");
diff --git a/gcc/cobol/symbols.cc b/gcc/cobol/symbols.cc
index 110c3f038255721950cb5d98adf463a29c3e9550..dbb56bc54a59b2ac9461bbbd683fa90231702824 100644
--- a/gcc/cobol/symbols.cc
+++ b/gcc/cobol/symbols.cc
@@ -1312,6 +1312,13 @@ static struct symbol_elem_t *
     if( redefined ) {
       assert( group == redefined );
       max_memsize = std::max(max_memsize, field_memsize(field));
+      field->data.capacity = redefined->data.capacity;
+      if( is_table(field) ) { // reduce capacity by occurs, if any
+        if( field->data.digits == field->data.capacity ) {
+          field->data.digits /= field->occurs.ntimes();
+        }
+        field->data.capacity /= field->occurs.ntimes();    
+      }
       field->data.memsize = 0;
       continue;
     }
diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
index f3ec7fc036e5c708dd5be5e0148bf433d890a745..7f94c2e8d9ccc425e8f3afc7b20b89443cf51917 100644
--- a/gcc/cobol/util.cc
+++ b/gcc/cobol/util.cc
@@ -753,13 +753,6 @@ redefine_field( cbl_field_t *field ) {
 
   if( field->data.capacity == 0 ) field->data = primary->data;
 
-  if( field->occurs.ntimes() > 0 ) {
-    if( field->data.digits == field->data.capacity ) {
-      field->data.digits /= field->occurs.ntimes();
-    }
-      field->data.capacity /= field->occurs.ntimes();    
-  }
-  
   if( is_numeric(field->type) && field->usage == FldDisplay ) {
     fOK = symbol_field_type_update(field, FldNumericDisplay, false);
   }