diff --git a/gcc/doc/gm2.texi b/gcc/doc/gm2.texi
index 5af8b228831f84151f94a4f3a2317cb29b475ef6..f8ae148b99ba4c77950b3eae94c3cb7a03d0d241 100644
--- a/gcc/doc/gm2.texi
+++ b/gcc/doc/gm2.texi
@@ -502,7 +502,8 @@ the previous forms could be:
 
 @item -fm2-file-offset-bits=
 force the type @code{SYSTEM.COFF_T} to be built using the specified
-number of bits.  If this option is not used then default is 64 bits.
+number of bits.  If this option is not used then default is
+@code{CSSIZE_T} bits.
 
 @item -fm2-g
 improve the debugging experience for new programmers at the expense
@@ -2895,10 +2896,13 @@ base module).  PIM-2 defined @code{SIZE} in the @code{SYSTEM} module
 GNU Modula-2 allows users to specify the dialect of Modula-2 by using
 the @code{-fiso} and @code{-fpim2} command line switches.
 
-The data types @code{CSIZE_T} and @code{CSSIZE_T} are also exported from
-the @code{SYSTEM} module.  The type @code{CSIZE_T} is unsigned and is
-mapped onto the target C data type @code{size_t} whereas the type
-@code{CSSIZE_T} is mapped onto the signed C data type @code{ssize_t}.
+The data types @code{CSIZE_T}, @code{CSSIZE_T} and @code{COFF_T} are
+also exported from the @code{SYSTEM} module.  The type @code{CSIZE_T}
+is unsigned and is mapped onto the target C data type @code{size_t}
+whereas the type @code{CSSIZE_T} is mapped onto the signed C data type
+@code{ssize_t}.  The default size for the signed type @code{COFF_T} is
+the same as @code{CSSIZE_T} and this can be overridden by the
+@code{-fm2-file-offset-bits=} command line option.
 
 It is anticipated that these should only be used to provide cross
 platform definition modules for C libraries.
diff --git a/gcc/m2/gm2-compiler/M2Options.mod b/gcc/m2/gm2-compiler/M2Options.mod
index 4c03dfeddfba49b9252f5a8eb9eb7a6d788b64ec..39f0b2a73fb2ef3c74e4ad6fd103141c27fb2ee7 100644
--- a/gcc/m2/gm2-compiler/M2Options.mod
+++ b/gcc/m2/gm2-compiler/M2Options.mod
@@ -2147,5 +2147,5 @@ BEGIN
    M2Dump                            := NIL ;
    M2DumpFilter                      := NIL ;
    EnableForward                     := TRUE ;
-   OffTBits                          := 64 ;  (* Default to 64bit OFF_T.  *)
+   OffTBits                          := 0 ;  (* Default to CSSIZE_T.  *)
 END M2Options.
diff --git a/gcc/m2/gm2-gcc/m2type.cc b/gcc/m2/gm2-gcc/m2type.cc
index 9f7a433e98061d844fc7ba0bf744215c1a3fcd66..a946509d1c25904c0f4d1cdc9ee6a75f9e6edbdb 100644
--- a/gcc/m2/gm2-gcc/m2type.cc
+++ b/gcc/m2/gm2-gcc/m2type.cc
@@ -1077,7 +1077,6 @@ build_m2_specific_size_type (location_t location, enum tree_code base,
     {
       if (!float_mode_for_size (TYPE_PRECISION (c)).exists ())
         return NULL;
-      layout_type (c);
     }
   else if (base == SET_TYPE)
     return build_m2_size_set_type (location, precision);
@@ -1096,6 +1095,7 @@ build_m2_specific_size_type (location_t location, enum tree_code base,
           TYPE_UNSIGNED (c) = true;
         }
     }
+  layout_type (c);
   return c;
 }
 
@@ -1385,8 +1385,12 @@ static tree
 build_m2_offt_type_node (location_t location)
 {
   m2assert_AssertLocation (location);
+  int offt_size = M2Options_GetFileOffsetBits ();
+
+  if (offt_size == 0)
+    offt_size = TREE_INT_CST_LOW (TYPE_SIZE (ssizetype));
   return build_m2_specific_size_type (location, INTEGER_TYPE,
-				      M2Options_GetFileOffsetBits (), true);
+				      offt_size, true);
 }
 
 /* m2type_InitSystemTypes initialise loc and word derivatives.  */
diff --git a/gcc/testsuite/gm2/pim/run/pass/printtypesize.mod b/gcc/testsuite/gm2/pim/run/pass/printtypesize.mod
new file mode 100644
index 0000000000000000000000000000000000000000..690c4c1878470d43faba1fd52b010127204d8c93
--- /dev/null
+++ b/gcc/testsuite/gm2/pim/run/pass/printtypesize.mod
@@ -0,0 +1,15 @@
+MODULE printtypesize ;  
+
+FROM libc IMPORT printf ;
+FROM SYSTEM IMPORT SIZE, CSIZE_T, COFF_T ;
+
+BEGIN
+   printf ("SIZE (CHAR) = %d bytes\n", SIZE (CHAR));
+   printf ("SIZE (INTEGER) = %d bytes\n", SIZE (INTEGER));
+   printf ("SIZE (CARDINAL) = %d bytes\n", SIZE (CARDINAL));
+   printf ("SIZE (BITSET) = %d bytes\n", SIZE (BITSET));
+   printf ("SIZE (LONGINT) = %d bytes\n", SIZE (LONGINT));
+   printf ("SIZE (LONGCARD) = %d bytes\n", SIZE (LONGCARD));
+   printf ("SIZE (CSIZE_T) = %d bytes\n", SIZE (CSIZE_T));
+   printf ("SIZE (COFF_T) = %d bytes\n", SIZE (COFF_T));   
+END printtypesize.