diff --git a/doc/1.manual/x5.htm b/doc/1.manual/x5.htm
index 9cccef2575b12ef5312b458aebf128d2c2f86e6a..53d6b1d9f40a7c77aeaf5086727eeb44b8bab226 100644
--- a/doc/1.manual/x5.htm
+++ b/doc/1.manual/x5.htm
@@ -20,6 +20,15 @@
 
 <H3> <A name="s2"> 5.1. release notes </A> </H3>
 
+<P> ------------------ 0.42 ---------------------------
+
+<P> ".pdrc" loading suppressed if pd is started with "-noprefs".
+
+<P> Bug fix in pipe object: if sending a list to pipe, it didn't update the
+delay time when asked to.
+
+<P> 
+
 <P> ------------------ 0.41-3,4 ---------------------------
 
 <P> 2 fixes for PC: no bonk~, and the audio device selection
diff --git a/src/d_fftroutine.c b/src/d_fftroutine.c
index 4678d38a77797c4f4a6737ede8055352fcde6c01..0222a0c006ac522e93e1334f4ea5e59cf13eab86 100644
--- a/src/d_fftroutine.c
+++ b/src/d_fftroutine.c
@@ -98,7 +98,7 @@
 #define        FALSE                   0
 #endif
 
-#define        SAMPLE float     /* data type used in calculation */
+#define        SAMPLE PD_FLOATTYPE     /* data type used in calculation */
 
 #define        SHORT_SIZE              sizeof(short)
 #define        INT_SIZE                sizeof(int)
@@ -154,8 +154,8 @@ typedef struct Tfft_net {
 
 
 void cfft(int trnsfrm_dir, int npnt, int window,
-    float *source_buf, int source_form, int source_scale,
-    float *result_buf, int result_form, int result_scale, int debug);
+    SAMPLE *source_buf, int source_form, int source_scale,
+    SAMPLE *result_buf, int result_form, int result_scale, int debug);
 
 
 /*****************************************************************************/
@@ -172,10 +172,10 @@ int power_of_two(int n);
 void create_hanning(SAMPLE *window, int n, SAMPLE scale);
 void create_rectangular(SAMPLE *window, int n, SAMPLE scale);
 void short_to_float(short *short_buf, float *float_buf, int n);
-void load_registers(FFT_NET *fft_net, float *buf, int buf_form,
+void load_registers(FFT_NET *fft_net, SAMPLE *buf, int buf_form,
     int buf_scale, int trnsfrm_dir);
 void compute_fft(FFT_NET  *fft_net);
-void store_registers(FFT_NET    *fft_net, float *buf, int buf_form,
+void store_registers(FFT_NET    *fft_net, SAMPLE *buf, int buf_form,
     int buf_scale, int debug);
 void build_fft_network(FFT_NET *fft_net, int n, int window_type);
 
@@ -184,8 +184,8 @@ void build_fft_network(FFT_NET *fft_net, int n, int window_type);
 /*****************************************************************************/
 
 void cfft(int trnsfrm_dir, int npnt, int window,
-    float *source_buf, int source_form, int source_scale,
-    float *result_buf, int result_form, int result_scale, int debug)
+    SAMPLE *source_buf, int source_form, int source_scale,
+    SAMPLE *result_buf, int result_form, int result_scale, int debug)
 
 /* modifies: result_buf
    effects:  Computes npnt FFT specified by form, scale, and dir parameters.  
@@ -471,7 +471,7 @@ void build_fft_network(FFT_NET *fft_net, int n, int window_type)
 /* REGISTER LOAD AND STORE                                                   */
 /*****************************************************************************/
 
-void load_registers(FFT_NET *fft_net, float *buf, int buf_form,
+void load_registers(FFT_NET *fft_net, SAMPLE *buf, int buf_form,
     int buf_scale, int trnsfrm_dir)
 
 /* effects:  Multiplies the input buffer with the appropriate window and
@@ -605,7 +605,7 @@ void load_registers(FFT_NET *fft_net, float *buf, int buf_form,
 }
 
 
-void store_registers(FFT_NET    *fft_net, float *buf, int buf_form,
+void store_registers(FFT_NET    *fft_net, SAMPLE *buf, int buf_form,
     int buf_scale, int debug)
 
 /* modifies: buf
@@ -989,10 +989,10 @@ void short_to_float(short *short_buf, float *float_buf, int n)
 
 /* here's the meat: */
 
-void pd_fft(float *buf, int npoints, int inverse)
+void pd_fft(t_float *buf, int npoints, int inverse)
 {
   double renorm;
-  float *fp, *fp2;
+  SAMPLE *fp, *fp2;
   int i;
   renorm = (inverse ? npoints : 1.);
   cfft((inverse ? INVERSE : FORWARD), npoints, RECTANGULAR, 
diff --git a/src/d_math.c b/src/d_math.c
index 213b866e556fc174a4e21ed192ca0213437d22f9..8c480e37eaf98e5dd51ec0e211e06a5d4cfd0abf 100644
--- a/src/d_math.c
+++ b/src/d_math.c
@@ -97,7 +97,7 @@ static void init_rsqrt(void)
 
     /* these are used in externs like "bonk" */
 
-float q8_rsqrt(float f)
+t_float q8_rsqrt(t_float f)
 {
     long l = *(long *)(&f);
     if (f < 0) return (0);
@@ -105,7 +105,7 @@ float q8_rsqrt(float f)
             rsqrt_mantissatab[(l >> 13) & 0x3ff]);
 }
 
-float q8_sqrt(float f)
+t_float q8_sqrt(t_float f)
 {
     long l = *(long *)(&f);
     if (f < 0) return (0);
@@ -116,8 +116,8 @@ float q8_sqrt(float f)
     /* the old names are OK unless we're in IRIX N32 */
 
 #ifndef N32
-float qsqrt(float f) {return (q8_sqrt(f)); }
-float qrsqrt(float f) {return (q8_rsqrt(f)); }
+t_float qsqrt(t_float f) {return (q8_sqrt(f)); }
+t_float qrsqrt(t_float f) {return (q8_rsqrt(f)); }
 #endif
 
 
diff --git a/src/g_array.c b/src/g_array.c
index 0ebc99fb814113dd47fdd0f2e4929699e4da37ae..a73c5ba544a07b9f9a8a5869f2bf9e90e8d368fc 100644
--- a/src/g_array.c
+++ b/src/g_array.c
@@ -1402,13 +1402,14 @@ static void garray_read(t_garray *x, t_symbol *filename)
     }
     for (i = 0; i < nelem; i++)
     {
-        if (!fscanf(fd, "%f", ((t_float *)(array->a_vec +
-            elemsize * i) + yonset)))
+        float f;
+        if (!fscanf(fd, "%f", &f))
         {
             post("%s: read %d elements into table of size %d",
                 filename->s_name, i, nelem);
             break;
         }
+        else *((t_float *)(array->a_vec + elemsize * i) + yonset) = f;
     }
     while (i < nelem)
         *((t_float *)(array->a_vec +
diff --git a/src/g_template.c b/src/g_template.c
index 4d66bbed55d1bd91e648945c4a8e0715d8b1198c..aff6f7cb443e5da78891836cf0a8c800f236654e 100644
--- a/src/g_template.c
+++ b/src/g_template.c
@@ -721,11 +721,11 @@ struct _fielddesc
         t_symbol *fd_symbol;    /* the field is a constant symbol */
         t_symbol *fd_varsym;    /* the field is variable and this is the name */
     } fd_un;
-    t_float fd_v1;        /* min and max values */
-    t_float fd_v2;
-    t_float fd_screen1;   /* min and max screen values */
-    t_float fd_screen2;
-    t_float fd_quantum;   /* quantization in value */ 
+    float fd_v1;        /* min and max values */
+    float fd_v2;
+    float fd_screen1;   /* min and max screen values */
+    float fd_screen2;
+    float fd_quantum;   /* quantization in value */ 
 };
 
 static void fielddesc_setfloat_const(t_fielddesc *fd, t_float f)
@@ -2225,7 +2225,7 @@ static void drawnumber_key(void *z, t_floatarg fkey)
     else
     {
             /* key entry for a numeric field.  This is just a stopgap. */
-        t_float newf;
+        float newf;
         if (drawnumber_motion_firstkey)
             sbuf[0] = 0;
         else sprintf(sbuf, "%g", template_getfloat(drawnumber_motion_template,
diff --git a/src/m_pd.h b/src/m_pd.h
index 580bac0b8ea2a3dc0bdb3ddacb63993eb0fd37e5..89f6131281fe4dd871f3eaea31998fc7d3a585d0 100644
--- a/src/m_pd.h
+++ b/src/m_pd.h
@@ -55,11 +55,15 @@ extern "C" {
 #define MAXPDARG 5              /* max number of args we can typecheck today */
 
 /* signed and unsigned integer types the size of a pointer:  */
-/* GG: long is the size of a pointer */
-typedef long t_int;
-
-typedef float t_float;  /* a floating-point number at most the same size */
-typedef float t_floatarg;  /* floating-point type for function calls */
+#if !defined(PD_LONGINTTYPE)
+#define PD_LONGINTTYPE long
+#endif
+#if !defined(PD_FLOATTYPE)
+#define PD_FLOATTYPE float
+#endif
+typedef PD_LONGINTTYPE t_int;       /* pointer-size integer */
+typedef PD_FLOATTYPE t_float;       /* a float type at most the same size */
+typedef PD_FLOATTYPE t_floatarg;    /* float type for function calls */
 
 typedef struct _symbol
 {
@@ -443,7 +447,7 @@ EXTERN t_propertiesfn class_getpropertiesfn(t_class *c);
 EXTERN void post(const char *fmt, ...);
 EXTERN void startpost(const char *fmt, ...);
 EXTERN void poststring(const char *s);
-EXTERN void postfloat(float f);
+EXTERN void postfloat(t_floatarg f);
 EXTERN void postatom(int argc, t_atom *argv);
 EXTERN void endpost(void);
 EXTERN void error(const char *fmt, ...);
@@ -474,7 +478,7 @@ EXTERN int sys_trylock(void);
 
 /* --------------- signals ----------------------------------- */
 
-typedef float t_sample;
+typedef PD_FLOATTYPE t_sample;
 #define MAXLOGSIG 32
 #define MAXSIGSIZE (1 << MAXLOGSIG)
 
diff --git a/src/s_main.c b/src/s_main.c
index 877ed41f626953dc8e90b26c7240acdb3243b67d..dcc3bed97ce13e05cd4975863b063543a1710884 100644
--- a/src/s_main.c
+++ b/src/s_main.c
@@ -282,7 +282,8 @@ int sys_main(int argc, char **argv)
     if (!noprefs)
         sys_loadpreferences();                  /* load default settings */
 #ifndef MSW
-    sys_rcfile();                               /* parse the startup file */
+    if (!noprefs)
+        sys_rcfile();                           /* parse the startup file */
 #endif
     if (sys_argparse(argc-1, argv+1))           /* parse cmd line */
         return (1);