diff --git a/gcc/cobol/cdf.y b/gcc/cobol/cdf.y
index 6e53f1b64907bda8323a13904a4e9e6095b57847..d38f3fb6703a6c3b727c92ba10ccea3f8b99e85c 100644
--- a/gcc/cobol/cdf.y
+++ b/gcc/cobol/cdf.y
@@ -249,7 +249,7 @@ apply_cdf_turn( exception_turns_t& turns ) {
 %type	<cdfarg>	namelit name_any name_one
 %type	<string>	name subscript subscripts inof
 %token	<boolean>	BOOL
-%token	<number>	FEATURE 361 NUMBER EXCEPTION_NAME 279 
+%token	<number>	FEATURE 361  NUMBER 302 EXCEPTION_NAME 279 
 
 %type	<cdfval>	cdf_expr
 %type	<cdfval>	cdf_relexpr cdf_reloper cdf_and cdf_bool_expr
@@ -280,18 +280,18 @@ apply_cdf_turn( exception_turns_t& turns ) {
 %token AS 451  CONSTANT 357  DEFINED 359 
 %type	<boolean>	     DEFINED
 %token OTHER 671  PARAMETER_kw 364  OFF 660  OVERRIDE 365 
-%token THRU 908 
-%token TRUE_kw 782 
+%token THRU 909 
+%token TRUE_kw 783 
 
-%token TURN 784  CHECKING 475  LOCATION 623  ON 662  WITH 809 
+%token TURN 785  CHECKING 475  LOCATION 623  ON 662  WITH 811 
 
-%left OR 909 
-%left AND 910 
-%right NOT 911 
-%left '<'  '>'  '='  NE 912  LE 913  GE 914 
+%left OR 910 
+%left AND 911 
+%right NOT 912 
+%left '<'  '>'  '='  NE 913  LE 914  GE 915 
 %left '-'  '+' 
 %left '*'  '/' 
-%right NEG 915 
+%right NEG 916 
 
 %define api.prefix {ydf}
 %define api.token.prefix{YDF_}
diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index bec4ad4fb8033fe413bac0a1e5d31f675128bdb6..a549db5cd8c08f4525c685b4e35109a8b2bd23f5 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -14756,7 +14756,6 @@ parser_symbol_add(struct cbl_field_t *new_var )
     if( new_var->type == FldClass && new_var->level != 88 )
       {
       new_var->data.initial = get_class_condition_string(new_var);
-      //// new_var->attr |= class_is_string_e; not used? 
       }
 
     if( new_var->type == FldLiteralA )
diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y
index 1cbeba64eb6005cbe3215ca66ef3e028de01eff7..848dbc9ab899e82fe72b6aff22429f767f40a4c5 100644
--- a/gcc/cobol/parse.y
+++ b/gcc/cobol/parse.y
@@ -721,7 +721,7 @@
                         SEPARATE SEQUENCE SEQUENTIAL SHARING
 			SIGN SIN SIZE SIZE_ERROR SOURCE SOURCE_COMPUTER
                         SPACES SPECIAL_NAMES SQRT STANDARD STANDARD_ALPHABET
-                        STANDARD_1 STANDARD_DEVIATION STATUS
+                        STANDARD_1 STANDARD_DEVIATION STATUS STRONG
 			STDERR STDIN STDOUT
 			LITERAL SUBSTITUTE SUM SWITCH SYMBOL SYMBOLIC SYNCHRONIZED
                         SYSIN SYSIPT SYSLST SYSOUT SYSPCH SYSPUNCH
@@ -730,7 +730,7 @@
                         TEST_DAY_YYYYDDD TEST_FORMATTED_DATETIME TEST_NUMVAL
                         TEST_NUMVAL_C TEST_NUMVAL_F THAN TIME TIMES TO TOP
                         TRACKS TRACK_AREA TRAILING TRANSFORM TRIM TRUE_kw TRY
-                        TURN TYPE
+                        TURN TYPE TYPEDEF
 
                         ULENGTH UNBOUNDED UNIT UNITS UNIT_RECORD UNTIL UP UPON
                         UPOS UPPER_CASE UPSI USAGE USING USUBSTR USUPPLEMENTARY
@@ -759,7 +759,7 @@
 			PREFIXED PREVIOUS PROHIBITED RELATION REQUIRED
 			REVERSE_VIDEO ROUNDING
 			SECONDS SECURE SHORT SIGNED STANDARD_BINARY
-			STANDARD_DECIMAL STATEMENT STEP STRONG STRUCTURE
+			STANDARD_DECIMAL STATEMENT STEP STRUCTURE
 			TOWARD_GREATER TOWARD_LESSER TRUNCATION
 			UCS_4 UNDERLINE UNSIGNED UTF_16 UTF_8
 
@@ -3299,6 +3299,7 @@ data_clause:    any_length        { $$ = any_length_e; }
         |       same_clause       { $$ = same_clause_e; }
         |       sign_clause       { $$ = sign_clause_e; }
         |       synched_clause    { $$ = synched_clause_e; }
+        |       typedef_clause    { $$ = typedef_clause_e; }
         |       usage_clause      { $$ = usage_clause_e; }
         |       value_clause      { $$ = value_clause_e;
                   cbl_field_t *field = current_field();
@@ -3841,6 +3842,14 @@ sign_separate:  %empty              { $$ = false; }
         |       SEPARATE            { $$ = true; }
                 ;
 
+typedef_clause: is TYPEDEF strong 
+		{
+                  cbl_field_t *field = current_field();
+		  field->attr |= typedef_e;
+		  yywarn("warning: TYPEDEF not implemented");
+		}
+		;
+
 volatile_clause:
 		VOLATILE
 		{
@@ -9360,14 +9369,16 @@ record:         %empty
 sign:           %empty
         |       SIGN
                 ;
-
 status:         %empty
         |       STATUS
                 ;
+strong:          %empty
+        |       STRONG
+                ;
+
 times:          %empty
         |       TIMES
                 ;
-
 then:           %empty
         |       THEN
                 ;
diff --git a/gcc/cobol/parse_ante.h b/gcc/cobol/parse_ante.h
index ae62c9b741e36ca845ec969056286cf3558ed730..f185636d3941cb86c09c12b9ea1f6cdfb17ba5ec 100644
--- a/gcc/cobol/parse_ante.h
+++ b/gcc/cobol/parse_ante.h
@@ -200,6 +200,7 @@ enum data_clause_t {
   based_clause_e       = 0x0800,
   same_clause_e        = 0x1000,
   volatile_clause_e    = 0x2000,
+  typedef_clause_e     = 0x4000,
 };
 
 static inline bool
diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l
index d1fd0b9edfca5515f0369c9ce8c487d70cdd366b..3cdfd0f75317665a1d1dfb19bfd0c41df2b0cb64 100644
--- a/gcc/cobol/scan.l
+++ b/gcc/cobol/scan.l
@@ -1046,12 +1046,14 @@ USE({SPC}FOR)?		{ return USE; }
   SIGN			{ return SIGN; }
   SIZE			{ return SIZE; }
   STANDARD		{ return STANDARD; }
+  STRONG		{ return STRONG; }
   SYNC(HRONIZED)?	{ return SYNCHRONIZED; }
   TIMES			{ return TIMES; }
   TIMES[[:space::]]+DEPENDING		{ return DEPENDING; }
   TO			{ return TO; }
   TRAILING		{ return TRAILING; }
   TRUE			{ return TRUE_kw; }
+  TYPEDEF		{ return TYPEDEF; }
   VARYING		{ return VARYING; }
   VOLATILE    		{ return VOLATILE; }
   WHEN    		{ return WHEN; }
diff --git a/gcc/cobol/symbols.cc b/gcc/cobol/symbols.cc
index 73dd70c93a3ac8b5a4e8b670d8d47bebb43ccc6e..ee1170a25f5bbf9702dd153b6ee36c3a5dccfddb 100644
--- a/gcc/cobol/symbols.cc
+++ b/gcc/cobol/symbols.cc
@@ -3004,7 +3004,6 @@ temporaries_t::literal( const char value[], uint32_t len, cbl_field_attr_t attr
             __func__, __LINE__,
             field->data.initial, field->attr, attr);
     }
-    assert(field->data.capacity == len);
     return field;
   }
   return literals[key] = new_literal_add(value, len, attr);
diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h
index cd4dca5a888e8dc3724ef9559b727609869d1a21..18aada2201ebd693f3b4e7b8f359e5828fc028c8 100644
--- a/gcc/cobol/symbols.h
+++ b/gcc/cobol/symbols.h
@@ -273,7 +273,6 @@ enum cbl_field_attr_t {
   intermediate_e    = 0x0000001000, // Used for intermediate arithmetic
   anyhow_e          = 0x0000004000, // compares true to anything. (Note the break in the bit pattern)
   otherhow_e        = 0x0000006000, // compares true and returns true
-  class_is_string_DNU = 0x0000008000, // as opposed to numeric
   embiggened_e      = 0x0000008000, // redefined numeric made 64-bit by USAGE POINTER
   thru_fact_e       = 0x0000010000, // logical value was established by THRU
   scaled_e          = 0x0000020000,
@@ -299,6 +298,7 @@ enum cbl_field_attr_t {
   big_endian_e      = 0x1000000000, // Indicates a value is big-endian
   same_as_e         = 0x2000000000, // Field produced by SAME AS (cannot take new members)
   record_key_e      = 0x4000000000,
+  typedef_e         = 0x8000000000, // IS TYPEDEF
 };
 
 // This constant establishes the maximum number of digits in a fixed point