diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 44f6a481aeb54d051622c9733e8c18960d0293e2..12894296a2e57f5a0f6c3f95386fe8d9a377cc69 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-01-11  Paul Thomas  <pault@gcc.gnu.org>
+
+	PR fortran/25730
+	* trans-types.c (copy_dt_decls_ifequal): Copy backend decl for
+	character lengths.
+
 2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>
 
 	fortran/24936
diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c
index b41940c1cdc874bc5f5d0e498c1301179c58f6fd..fcdef6a0c0e7da24ed2e44bec45a09447de069f3 100644
--- a/gcc/fortran/trans-types.c
+++ b/gcc/fortran/trans-types.c
@@ -1418,12 +1418,16 @@ copy_dt_decls_ifequal (gfc_symbol *from, gfc_symbol *to)
      a derived type, we need a copy of its component declarations.
      This is done by recursing into gfc_get_derived_type and
      ensures that the component's component declarations have
-     been built.  */
+     been built.  If it is a character, we need the character 
+     length, as well.  */
   for (; to_cm; to_cm = to_cm->next, from_cm = from_cm->next)
     {
       to_cm->backend_decl = from_cm->backend_decl;
       if (from_cm->ts.type == BT_DERIVED)
 	gfc_get_derived_type (to_cm->ts.derived);
+
+      else if (from_cm->ts.type == BT_CHARACTER)
+	to_cm->ts.cl->backend_decl = from_cm->ts.cl->backend_decl;
     }
 
   return 1;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b8d1bba48c5995b93f4e691a8f41113de1a68792..be973a022c4462ba614373807512116caec8a77a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-01-11  Paul Thomas  <pault@gcc.gnu.org>
+
+	PR fortran/25730
+	* gfortran.dg/used_types_1.f90: New test.
+
 2006-01-10  Hans-Peter Nilsson  <hp@axis.com>
 
 	PR target/25718
diff --git a/gcc/testsuite/gfortran.dg/used_types_1.f90 b/gcc/testsuite/gfortran.dg/used_types_1.f90
new file mode 100644
index 0000000000000000000000000000000000000000..61356ab2c5630813dbfbbc4f30a1e5f4e08ced31
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/used_types_1.f90
@@ -0,0 +1,21 @@
+! { dg-do compile }
+! This checks that the fix for PR25730, which was a regression
+! caused by the fix for PR19362.
+!
+! Contributed by Andrea Bedini <andrea.bedini@gmail.com>
+!==============
+MODULE testcase
+  TYPE orbit_elem
+     CHARACTER(4) :: coo
+  END TYPE orbit_elem
+END MODULE
+MODULE tp_trace
+  USE testcase
+  TYPE(orbit_elem) :: tp_store
+CONTAINS
+  SUBROUTINE str_clan()
+    USE testcase
+    TYPE(orbit_elem) :: mtpcar
+    mtpcar%coo='a'             !ICE was here
+  END SUBROUTINE str_clan
+END MODULE