diff --git a/externals/iem/iemmatrix/src/mtx_bessel.c b/externals/iem/iemmatrix/src/mtx_bessel.c
index 458100cc1e6dfd933255d2675db8603cbe54fbd7..8d61c367dbc24dea3907d158d6458bc92482c57d 100644
--- a/externals/iem/iemmatrix/src/mtx_bessel.c
+++ b/externals/iem/iemmatrix/src/mtx_bessel.c
@@ -83,7 +83,7 @@ static void *newMTXBessel (t_symbol *s, int argc, t_atom *argv)
   x->h_re = 0; 
   x->h_im = 0; 
   x->l=0;
-  fsym=atom_getsymbol(argv);
+  fsym= argc ? atom_getsymbol(argv) : &s_;
   if (fsym->s_name!=0)
      whichfunction=fsym->s_name[0];
   switch (whichfunction) {
@@ -96,7 +96,7 @@ static void *newMTXBessel (t_symbol *s, int argc, t_atom *argv)
      case 'Y':
         x->list_h_im_out = outlet_new (&x->x_obj, gensym("matrix"));
   }
-  nmax=(int) atom_getfloat(argv+1);
+  nmax= argc > 1 ? (int) atom_getfloat(argv+1) : 0;
   if (nmax<0)
      nmax=0;
   x->nmax=nmax;
diff --git a/externals/iem/iemmatrix/src/mtx_eig.c b/externals/iem/iemmatrix/src/mtx_eig.c
index 1ab90c96fefa5ba8d425c6f214ab4759d464683d..e9474f0aad1f7101d2545b1babbfbeaa6e1f9b0c 100644
--- a/externals/iem/iemmatrix/src/mtx_eig.c
+++ b/externals/iem/iemmatrix/src/mtx_eig.c
@@ -114,7 +114,7 @@ static void *newMTXEig (t_symbol *s, int argc, t_atom *argv)
   
   x->list_l_out_re = outlet_new (&x->x_obj, gensym("list"));
   x->list_l_out_im = outlet_new (&x->x_obj, gensym("list"));
-  if (atom_getsymbol(argv)==gensym("v")) {
+  if (argc && atom_getsymbol(argv)==gensym("v")) {
      x->withevs=1;
      x->list_q_out_re = outlet_new (&x->x_obj, gensym("matrix"));
      x->list_q_out_im = outlet_new (&x->x_obj, gensym("matrix"));
diff --git a/externals/iem/iemmatrix/src/mtx_ei~.c b/externals/iem/iemmatrix/src/mtx_ei~.c
index e461bf2693e6387447eab49901915d27bb69b9ff..5f8f7f22b0fc569444bfec1464b248dec70bc9f3 100755
--- a/externals/iem/iemmatrix/src/mtx_ei~.c
+++ b/externals/iem/iemmatrix/src/mtx_ei~.c
@@ -22,6 +22,7 @@ void *newMtxEITilde(t_symbol *s, int argc, t_atom *argv)
 {
    int sd=1;
    int sg=1;
+   t_atom sane_defaults[1];
    mtx_ei_tilde *x = (mtx_ei_tilde*) pd_new(mtx_ei_tilde_class);
    x->sig_in_left=0;
    x->sig_in_right=0;
@@ -32,6 +33,12 @@ void *newMtxEITilde(t_symbol *s, int argc, t_atom *argv)
    inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
    x->message_outlet=(t_outlet*)outlet_new(&x->x_obj,&s_list);
 
+   /* Prevent an invalid read */
+   if (!argc) {
+      SETFLOAT(sane_defaults, 0.);
+      argv = sane_defaults; 
+      argc = 1;
+   }
    if (argc > 2) {
       sd = atom_getint(argv++);
       sg = argc-1;
diff --git a/externals/iem/iemmatrix/src/mtx_spherical_harmonics.c b/externals/iem/iemmatrix/src/mtx_spherical_harmonics.c
index 8ecc9a4b9615b62766bc6724d35e37822e194b8d..72b22bb305f0a862c09c0dea008e57821894c164 100644
--- a/externals/iem/iemmatrix/src/mtx_spherical_harmonics.c
+++ b/externals/iem/iemmatrix/src/mtx_spherical_harmonics.c
@@ -83,7 +83,7 @@ static void *newMTXSh (t_symbol *s, int argc, t_atom *argv)
   x->theta = 0; 
   x->ws = 0; 
   x->l=0;
-  nmax=(int) atom_getfloat(argv);
+  nmax= argc ? (int) atom_getfloat(argv) : 0;
   if (nmax<0)
      nmax=0;
   x->nmax=nmax;
diff --git a/externals/iem/iemmatrix/src/mtx_spherical_radial.c b/externals/iem/iemmatrix/src/mtx_spherical_radial.c
index 9f3fd6d66c602ebd1f1b64486ed7545ed18cc836..703914e10cc8b97e5f339a0f22e9883cf1a5a513 100644
--- a/externals/iem/iemmatrix/src/mtx_spherical_radial.c
+++ b/externals/iem/iemmatrix/src/mtx_spherical_radial.c
@@ -80,7 +80,7 @@ static void *newMTXSph (t_symbol *s, int argc, t_atom *argv)
   x->h_re = 0; 
   x->h_im = 0; 
   x->l=0;
-  fsym=atom_getsymbol(argv);
+  fsym= argc ? atom_getsymbol(argv) : &s_;
   if (fsym->s_name!=0)
      whichfunction=fsym->s_name[0];
   switch (whichfunction) {
@@ -93,7 +93,7 @@ static void *newMTXSph (t_symbol *s, int argc, t_atom *argv)
      case 'y':
         x->list_h_im_out = outlet_new (&x->x_obj, gensym("matrix"));
   }
-  nmax=(int) atom_getfloat(argv+1);
+  nmax= argc > 1 ? (int) atom_getfloat(argv+1) : 0;
   if (nmax<0)
      nmax=0;
   x->nmax=nmax;