Index: sasmodels/models/barbell.c
===================================================================
--- sasmodels/models/barbell.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/barbell.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -63,4 +63,12 @@
 
 static double
+radius_from_excluded_volume(double radius_bell, double radius, double length)
+{
+    const double hdist = sqrt(square(radius_bell) - square(radius));
+    const double length_tot = length + 2.0*(hdist+ radius);
+    return 0.5*cbrt(0.75*radius_bell*(2.0*radius_bell*length_tot + (radius_bell + length_tot)*(M_PI*radius_bell + length_tot)));
+}
+
+static double
 radius_from_volume(double radius_bell, double radius, double length)
 {
@@ -81,11 +89,13 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(radius_bell, radius , length);
+    case 2: // equivalent volume sphere
         return radius_from_volume(radius_bell, radius , length);
-    case 2: // radius
+    case 3: // radius
         return radius;
-    case 3: // half length
+    case 4: // half length
         return 0.5*length;
-    case 4: // half total length
+    case 5: // half total length
         return radius_from_totallength(radius_bell,radius,length);
     }
Index: sasmodels/models/barbell.py
===================================================================
--- sasmodels/models/barbell.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/barbell.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -79,4 +79,5 @@
 .. [#] H Kaya and N R deSouza, *J. Appl. Cryst.*, 37 (2004) 508-509 (addenda
    and errata)
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -116,7 +117,7 @@
 
 source = ["lib/polevl.c", "lib/sas_J1.c", "lib/gauss76.c", "barbell.c"]
-have_Fq = True
+have_Fq = True 
 effective_radius_type = [
-    "equivalent sphere", "radius", "half length", "half total length",
+    "equivalent cylinder excluded volume","equivalent volume sphere", "radius", "half length", "half total length",
     ]
 
Index: sasmodels/models/capped_cylinder.c
===================================================================
--- sasmodels/models/capped_cylinder.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/capped_cylinder.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -85,4 +85,12 @@
 
 static double
+radius_from_excluded_volume(double radius, double radius_cap, double length)
+{
+    const double hc = radius_cap - sqrt(radius_cap*radius_cap - radius*radius);
+    const double length_tot = length + 2.0*hc;
+    return 0.5*cbrt(0.75*radius*(2.0*radius*length_tot + (radius + length_tot)*(M_PI*radius + length_tot)));
+}
+
+static double
 radius_from_volume(double radius, double radius_cap, double length)
 {
@@ -103,11 +111,13 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(radius, radius_cap, length);
+    case 2: // equivalent volume sphere
         return radius_from_volume(radius, radius_cap, length);
-    case 2: // radius
+    case 3: // radius
         return radius;
-    case 3: // half length
+    case 4: // half length
         return 0.5*length;
-    case 4: // half total length
+    case 5: // half total length
         return radius_from_totallength(radius, radius_cap,length);
     }
Index: sasmodels/models/capped_cylinder.py
===================================================================
--- sasmodels/models/capped_cylinder.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/capped_cylinder.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -82,4 +82,5 @@
 .. [#] H Kaya and N-R deSouza, *J. Appl. Cryst.*, 37 (2004) 508-509 (addenda
    and errata)
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -138,5 +139,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "radius", "half length", "half total length",
+    "equivalent cylinder excluded volume", "equivalent volume sphere", "radius", "half length", "half total length",
     ]
 
Index: sasmodels/models/core_shell_bicelle.c
===================================================================
--- sasmodels/models/core_shell_bicelle.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/core_shell_bicelle.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -37,4 +37,12 @@
 
 static double
+radius_from_excluded_volume(double radius, double thick_rim, double thick_face, double length)
+{
+    const double radius_tot = radius + thick_rim;
+    const double length_tot = length + 2.0*thick_face;
+    return 0.5*cbrt(0.75*radius_tot*(2.0*radius_tot*length_tot + (radius_tot + length_tot)*(M_PI*radius_tot + length_tot)));
+}
+
+static double
 radius_from_volume(double radius, double thick_rim, double thick_face, double length)
 {
@@ -56,11 +64,13 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(radius, thick_rim, thick_face, length);
+    case 2: // equivalent sphere
         return radius_from_volume(radius, thick_rim, thick_face, length);
-    case 2: // outer rim radius
+    case 3: // outer rim radius
         return radius + thick_rim;
-    case 3: // half outer thickness
+    case 4: // half outer thickness
         return 0.5*length + thick_face;
-    case 4: // half diagonal
+    case 5: // half diagonal
         return radius_from_diagonal(radius,thick_rim,thick_face,length);
     }
Index: sasmodels/models/core_shell_bicelle.py
===================================================================
--- sasmodels/models/core_shell_bicelle.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/core_shell_bicelle.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -89,4 +89,6 @@
    from Proquest <http://search.proquest.com/docview/304915826?accountid
    =26379>`_
+   
+   L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -156,5 +158,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "outer rim radius",
+    "excluded volume","equivalent volume sphere", "outer rim radius",
     "half outer thickness", "half diagonal",
     ]
Index: sasmodels/models/core_shell_bicelle_elliptical.c
===================================================================
--- sasmodels/models/core_shell_bicelle_elliptical.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/core_shell_bicelle_elliptical.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -8,4 +8,12 @@
 {
     return M_PI*(r_minor+thick_rim)*(r_minor*x_core+thick_rim)*(length+2.0*thick_face);
+}
+
+static double
+radius_from_excluded_volume(double r_minor, double x_core, double thick_rim, double thick_face, double length)
+{
+    const double r_equiv     = sqrt((r_minor + thick_rim)*(r_minor*x_core + thick_rim));
+    const double length_tot  = length + 2.0*thick_face;
+    return 0.5*cbrt(0.75*r_equiv*(2.0*r_equiv*length_tot + (r_equiv + length_tot)*(M_PI*r_equiv + length_tot)));
 }
 
@@ -31,15 +39,17 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(r_minor, x_core, thick_rim, thick_face, length);
+    case 2: // equivalent volume sphere
         return radius_from_volume(r_minor, x_core, thick_rim, thick_face, length);
-    case 2: // outer rim average radius
+    case 3: // outer rim average radius
         return 0.5*r_minor*(1.0 + x_core) + thick_rim;
-    case 3: // outer rim min radius
+    case 4: // outer rim min radius
         return (x_core < 1.0 ? x_core*r_minor+thick_rim : r_minor+thick_rim);
-    case 4: // outer max radius
+    case 5: // outer max radius
         return (x_core > 1.0 ? x_core*r_minor+thick_rim : r_minor+thick_rim);
-    case 5: // half outer thickness
+    case 6: // half outer thickness
         return 0.5*length + thick_face;
-    case 6: // half diagonal
+    case 7: // half diagonal
         return radius_from_diagonal(r_minor,x_core,thick_rim,thick_face,length);
     }
Index: sasmodels/models/core_shell_bicelle_elliptical.py
===================================================================
--- sasmodels/models/core_shell_bicelle_elliptical.py	(revision 304c775207a9dbbadb23ad414848454d66b556d1)
+++ sasmodels/models/core_shell_bicelle_elliptical.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -100,4 +100,5 @@
 
 .. [#]
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -148,5 +149,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "outer rim average radius", "outer rim min radius",
+    "equivalent cylinder excluded volume", "equivalent volume sphere", "outer rim average radius", "outer rim min radius",
     "outer max radius", "half outer thickness", "half diagonal",
     ]
Index: sasmodels/models/core_shell_bicelle_elliptical_belt_rough.c
===================================================================
--- sasmodels/models/core_shell_bicelle_elliptical_belt_rough.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/core_shell_bicelle_elliptical_belt_rough.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -9,4 +9,12 @@
     return M_PI*(  (r_minor + thick_rim)*(r_minor*x_core + thick_rim)* length +
                  square(r_minor)*x_core*2.0*thick_face  );
+}
+
+static double
+radius_from_excluded_volume(double r_minor, double x_core, double thick_rim, double thick_face, double length)
+{
+    const double r_equiv     = sqrt((r_minor + thick_rim)*(r_minor*x_core + thick_rim));
+    const double length_tot  = length + 2.0*thick_face;
+    return 0.5*cbrt(0.75*r_equiv*(2.0*r_equiv*length_tot + (r_equiv + length_tot)*(M_PI*r_equiv + length_tot)));
 }
 
@@ -32,15 +40,17 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(r_minor, x_core, thick_rim, thick_face, length);
+    case 2: // equivalent sphere
         return radius_from_volume(r_minor, x_core, thick_rim, thick_face, length);
-    case 2: // outer rim average radius
+    case 3: // outer rim average radius
         return 0.5*r_minor*(1.0 + x_core) + thick_rim;
-    case 3: // outer rim min radius
+    case 4: // outer rim min radius
         return (x_core < 1.0 ? x_core*r_minor+thick_rim : r_minor+thick_rim);
-    case 4: // outer max radius
+    case 5: // outer max radius
         return (x_core > 1.0 ? x_core*r_minor+thick_rim : r_minor+thick_rim);
-    case 5: // half outer thickness
+    case 6: // half outer thickness
         return 0.5*length + thick_face;
-    case 6: // half diagonal (this ignores the missing "corners", so may give unexpected answer if thick_face
+    case 7: // half diagonal (this ignores the missing "corners", so may give unexpected answer if thick_face
             //  or thick_rim is extremely large)
         return radius_from_diagonal(r_minor,x_core,thick_rim,thick_face,length);
Index: sasmodels/models/core_shell_bicelle_elliptical_belt_rough.py
===================================================================
--- sasmodels/models/core_shell_bicelle_elliptical_belt_rough.py	(revision 304c775207a9dbbadb23ad414848454d66b556d1)
+++ sasmodels/models/core_shell_bicelle_elliptical_belt_rough.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -112,4 +112,5 @@
 
 .. [#]
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -161,5 +162,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "outer rim average radius", "outer rim min radius",
+    "equivalent cylinder excluded volume", "equivalent volume sphere", "outer rim average radius", "outer rim min radius",
     "outer max radius", "half outer thickness", "half diagonal",
     ]
Index: sasmodels/models/core_shell_cylinder.c
===================================================================
--- sasmodels/models/core_shell_cylinder.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/core_shell_cylinder.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -11,4 +11,12 @@
 {
     return M_PI*square(radius+thickness)*(length+2.0*thickness);
+}
+
+static double
+radius_from_excluded_volume(double radius, double thickness, double length)
+{
+    const double radius_tot = radius + thickness;
+    const double length_tot = length + 2.0*thickness;
+    return 0.5*cbrt(0.75*radius_tot*(2.0*radius_tot*length_tot + (radius_tot + length_tot)*(M_PI*radius_tot + length_tot)));
 }
 
@@ -33,15 +41,17 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: //cylinder excluded volume
+        return radius_from_excluded_volume(radius, thickness, length);
+    case 2: // equivalent volume sphere
         return radius_from_volume(radius, thickness, length);
-    case 2: // outer radius
+    case 3: // outer radius
         return radius + thickness;
-    case 3: // half outer length
+    case 4: // half outer length
         return 0.5*length + thickness;
-    case 4: // half min outer length
+    case 5: // half min outer length
         return (radius < 0.5*length ? radius + thickness : 0.5*length + thickness);
-    case 5: // half max outer length
+    case 6: // half max outer length
         return (radius > 0.5*length ? radius + thickness : 0.5*length + thickness);
-    case 6: // half outer diagonal
+    case 7: // half outer diagonal
         return radius_from_diagonal(radius,thickness,length);
     }
Index: sasmodels/models/core_shell_cylinder.py
===================================================================
--- sasmodels/models/core_shell_cylinder.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/core_shell_cylinder.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -70,4 +70,5 @@
    1445-1452
 .. [#kline] S R Kline, *J Appl. Cryst.*, 39 (2006) 895
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -133,7 +134,6 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "outer radius", "half outer length",
-    "half min outer dimension", "half max outer dimension",
-    "half outer diagonal",
+    "excluded volume", "equivalent volume sphere", "outer radius", "half outer length",
+    "half min outer dimension", "half max outer dimension", "half outer diagonal",
     ]
 
Index: sasmodels/models/core_shell_ellipsoid.c
===================================================================
--- sasmodels/models/core_shell_ellipsoid.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/core_shell_ellipsoid.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -75,8 +75,8 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // average outer curvature
+        return radius_from_curvature(radius_equat_core, x_core, thick_shell, x_polar_shell);
+    case 2: // equivalent volume sphere
         return radius_from_volume(radius_equat_core, x_core, thick_shell, x_polar_shell);
-    case 2: // average outer curvature
-        return radius_from_curvature(radius_equat_core, x_core, thick_shell, x_polar_shell);
     case 3: // min outer radius
         return (radius_polar_tot < radius_equat_tot ? radius_polar_tot : radius_equat_tot);
Index: sasmodels/models/core_shell_ellipsoid.py
===================================================================
--- sasmodels/models/core_shell_ellipsoid.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/core_shell_ellipsoid.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -147,5 +147,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "average outer curvature",
+    "average outer curvature", "equivalent volume sphere",     
     "min outer radius", "max outer radius",
     ]
Index: sasmodels/models/core_shell_parallelepiped.c
===================================================================
--- sasmodels/models/core_shell_parallelepiped.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/core_shell_parallelepiped.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -28,4 +28,36 @@
 
 static double
+radius_from_excluded_volume(double length_a, double length_b, double length_c,
+                   double thick_rim_a, double thick_rim_b, double thick_rim_c)
+{
+    double r_equiv, length;
+    double lengths[3] = {length_a+thick_rim_a, length_b+thick_rim_b, length_c+thick_rim_c};
+    double lengthmax = fmax(lengths[0],fmax(lengths[1],lengths[2]));
+    double length_1 = lengthmax;
+    double length_2 = lengthmax;
+    double length_3 = lengthmax;
+
+    for(int ilen=0; ilen<3; ilen++) {
+        if (lengths[ilen] < length_1) {
+            length_2 = length_1;
+            length_1 = lengths[ilen];
+            } else {
+                if (lengths[ilen] < length_2) {
+                        length_2 = lengths[ilen];
+                }
+            }
+    }
+    if(length_2-length_1 > length_3-length_2) {
+        r_equiv = sqrt(length_2*length_3/M_PI);
+        length  = length_1;
+    } else  {
+        r_equiv = sqrt(length_1*length_2/M_PI);
+        length  = length_3;
+    }
+
+    return 0.5*cbrt(0.75*r_equiv*(2.0*r_equiv*length + (r_equiv + length)*(M_PI*r_equiv + length)));
+}
+
+static double
 radius_from_volume(double length_a, double length_b, double length_c,
                    double thick_rim_a, double thick_rim_b, double thick_rim_c)
@@ -48,17 +80,19 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(length_a, length_b, length_c, thick_rim_a, thick_rim_b, thick_rim_c);
+    case 2: // equivalent volume sphere
         return radius_from_volume(length_a, length_b, length_c, thick_rim_a, thick_rim_b, thick_rim_c);
-    case 2: // half outer length a
+    case 3: // half outer length a
         return 0.5 * length_a + thick_rim_a;
-    case 3: // half outer length b
+    case 4: // half outer length b
         return 0.5 * length_b + thick_rim_b;
-    case 4: // half outer length c
+    case 5: // half outer length c
         return 0.5 * length_c + thick_rim_c;
-    case 5: // equivalent circular cross-section
+    case 6: // equivalent circular cross-section
         return radius_from_crosssection(length_a, length_b, thick_rim_a, thick_rim_b);
-    case 6: // half outer ab diagonal
+    case 7: // half outer ab diagonal
         return 0.5*sqrt(square(length_a+ 2.0*thick_rim_a) + square(length_b+ 2.0*thick_rim_b));
-    case 7: // half outer diagonal
+    case 8: // half outer diagonal
         return 0.5*sqrt(square(length_a+ 2.0*thick_rim_a) + square(length_b+ 2.0*thick_rim_b) + square(length_c+ 2.0*thick_rim_c));
     }
Index: sasmodels/models/core_shell_parallelepiped.py
===================================================================
--- sasmodels/models/core_shell_parallelepiped.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/core_shell_parallelepiped.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -173,4 +173,5 @@
    from Proquest <http://search.proquest.com/docview/304915826?accountid
    =26379>`_
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -228,5 +229,6 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere",
+    "equivalent cylinder excluded volume", 
+    "equivalent volume sphere",
     "half outer length_a", "half outer length_b", "half outer length_c",
     "equivalent circular cross-section",
Index: sasmodels/models/cylinder.c
===================================================================
--- sasmodels/models/cylinder.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/cylinder.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -11,4 +11,10 @@
 {
     return sas_2J1x_x(qab*radius) * sas_sinx_x(qc*0.5*length);
+}
+
+static double
+radius_from_excluded_volume(double radius, double length)
+{
+    return 0.5*cbrt(0.75*radius*(2.0*radius*length + (radius + length)*(M_PI*radius + length)));
 }
 
@@ -31,14 +37,16 @@
     default:
     case 1:
+        return radius_from_excluded_volume(radius, length);
+    case 2:
         return radius_from_volume(radius, length);
-    case 2:
+    case 3:
         return radius;
-    case 3:
+    case 4:
         return 0.5*length;
-    case 4:
+    case 5:
         return (radius < 0.5*length ? radius : 0.5*length);
-    case 5:
+    case 6:
         return (radius > 0.5*length ? radius : 0.5*length);
-    case 6:
+    case 7:
         return radius_from_diagonal(radius,length);
     }
Index: sasmodels/models/cylinder.py
===================================================================
--- sasmodels/models/cylinder.py	(revision 5024a563075fb86e48bd868acf2f39ea4af2e90b)
+++ sasmodels/models/cylinder.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -98,4 +98,5 @@
 J. S. Pedersen, Adv. Colloid Interface Sci. 70, 171-210 (1997).
 G. Fournet, Bull. Soc. Fr. Mineral. Cristallogr. 74, 39-113 (1951).
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 """
 
@@ -140,5 +141,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "radius",
+    "excluded volume", "equivalent volume sphere", "radius",
     "half length", "half min dimension", "half max dimension", "half diagonal",
     ]
@@ -185,11 +186,12 @@
 radius, length = parameters[2][2], parameters[3][2]
 tests.extend([
-    ({'radius_effective_mode': 0}, 0.1, None, None, 0., pi*radius**2*length, 1.0),
-    ({'radius_effective_mode': 1}, 0.1, None, None, (0.75*radius**2*length)**(1./3.), None, None),
-    ({'radius_effective_mode': 2}, 0.1, None, None, radius, None, None),
-    ({'radius_effective_mode': 3}, 0.1, None, None, length/2., None, None),
-    ({'radius_effective_mode': 4}, 0.1, None, None, min(radius, length/2.), None, None),
-    ({'radius_effective_mode': 5}, 0.1, None, None, max(radius, length/2.), None, None),
-    ({'radius_effective_mode': 6}, 0.1, None, None, np.sqrt(4*radius**2 + length**2)/2., None, None),
+    ({'radius_effective_mode': 0}, 0.1, None, None, 0., pi*radius**2*length, 1.0),   
+    ({'radius_effective_mode': 1}, 0.1, None, None, 0.5*(0.75*radius*(2.0*radius*length + (radius + length)*(pi*radius + length)))**(1./3.), None, None),    
+    ({'radius_effective_mode': 2}, 0.1, None, None, (0.75*radius**2*length)**(1./3.), None, None),
+    ({'radius_effective_mode': 3}, 0.1, None, None, radius, None, None),
+    ({'radius_effective_mode': 4}, 0.1, None, None, length/2., None, None),
+    ({'radius_effective_mode': 5}, 0.1, None, None, min(radius, length/2.), None, None),
+    ({'radius_effective_mode': 6}, 0.1, None, None, max(radius, length/2.), None, None),
+    ({'radius_effective_mode': 7}, 0.1, None, None, np.sqrt(4*radius**2 + length**2)/2., None, None),
 ])
 del radius, length
Index: sasmodels/models/ellipsoid.c
===================================================================
--- sasmodels/models/ellipsoid.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/ellipsoid.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -36,8 +36,8 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // average curvature
+        return radius_from_curvature(radius_polar, radius_equatorial);
+    case 2: // equivalent volume sphere
         return radius_from_volume(radius_polar, radius_equatorial);
-    case 2: // average curvature
-        return radius_from_curvature(radius_polar, radius_equatorial);
     case 3: // min radius
         return (radius_polar < radius_equatorial ? radius_polar : radius_equatorial);
Index: sasmodels/models/ellipsoid.py
===================================================================
--- sasmodels/models/ellipsoid.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/ellipsoid.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -170,5 +170,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "average curvature", "min radius", "max radius",
+    "average curvature", "equivalent volume sphere", "min radius", "max radius",
     ]
 
Index: sasmodels/models/elliptical_cylinder.c
===================================================================
--- sasmodels/models/elliptical_cylinder.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/elliptical_cylinder.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -3,4 +3,11 @@
 {
     return M_PI * radius_minor * radius_minor * r_ratio * length;
+}
+
+static double
+radius_from_excluded_volume(double radius_minor, double r_ratio, double length)
+{
+    const double r_equiv = sqrt(radius_minor*radius_minor*r_ratio);
+    return 0.5*cbrt(0.75*r_equiv*(2.0*r_equiv*length + (r_equiv + length)*(M_PI*r_equiv + length)));
 }
 
@@ -38,21 +45,23 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(radius_minor, r_ratio, length);
+    case 2: // equivalent volume sphere
         return radius_from_volume(radius_minor, r_ratio, length);
-    case 2: // average radius
+    case 3: // average radius
         return 0.5*radius_minor*(1.0 + r_ratio);
-    case 3: // min radius
+    case 4: // min radius
         return (r_ratio > 1.0 ? radius_minor : r_ratio*radius_minor);
-    case 4: // max radius
+    case 5: // max radius
         return (r_ratio < 1.0 ? radius_minor : r_ratio*radius_minor);
-    case 5: // equivalent circular cross-section
+    case 6: // equivalent circular cross-section
         return sqrt(radius_minor*radius_minor*r_ratio);
-    case 6: // half length
+    case 7: // half length
         return 0.5*length;
-    case 7: // half min dimension
+    case 8: // half min dimension
         return radius_from_min_dimension(radius_minor,r_ratio,0.5*length);
-    case 8: // half max dimension
+    case 9: // half max dimension
         return radius_from_max_dimension(radius_minor,r_ratio,0.5*length);
-    case 9: // half diagonal
+    case 10: // half diagonal
         return radius_from_diagonal(radius_minor,r_ratio,length);
     }
Index: sasmodels/models/elliptical_cylinder.py
===================================================================
--- sasmodels/models/elliptical_cylinder.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/elliptical_cylinder.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -88,4 +88,5 @@
 L A Feigin and D I Svergun, *Structure Analysis by Small-Angle X-Ray and
 Neutron Scattering*, Plenum, New York, (1987) [see table 3.4]
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -124,5 +125,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "average radius", "min radius", "max radius",
+    "equivalent cylinder excluded volume", "equivalent volume sphere", "average radius", "min radius", "max radius",
     "equivalent circular cross-section",
     "half length", "half min dimension", "half max dimension", "half diagonal",
Index: sasmodels/models/hollow_cylinder.c
===================================================================
--- sasmodels/models/hollow_cylinder.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/hollow_cylinder.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -11,4 +11,11 @@
 {
     return M_PI*length*square(radius+thickness);
+}
+
+static double
+radius_from_excluded_volume(double radius, double thickness, double length)
+{
+    const double radius_tot = radius + thickness;
+    return 0.5*cbrt(0.75*radius_tot*(2.0*radius_tot*length + (radius_tot + length)*(M_PI*radius_tot + length)));
 }
 
@@ -31,15 +38,17 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // excluded volume
+        return radius_from_excluded_volume(radius, thickness, length);
+    case 2: // equivalent volume sphere
         return radius_from_volume(radius, thickness, length);
-    case 2: // outer radius
+    case 3: // outer radius
         return radius + thickness;
-    case 3: // half length
+    case 4: // half length
         return 0.5*length;
-    case 4: // half outer min dimension
+    case 5: // half outer min dimension
         return (radius + thickness < 0.5*length ? radius + thickness : 0.5*length);
-    case 5: // half outer max dimension
+    case 6: // half outer max dimension
         return (radius + thickness > 0.5*length ? radius + thickness : 0.5*length);
-    case 6: // half outer diagonal
+    case 7: // half outer diagonal
         return radius_from_diagonal(radius,thickness,length);
     }
Index: sasmodels/models/hollow_cylinder.py
===================================================================
--- sasmodels/models/hollow_cylinder.py	(revision 304c775207a9dbbadb23ad414848454d66b556d1)
+++ sasmodels/models/hollow_cylinder.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -60,4 +60,5 @@
 .. [#] L A Feigin and D I Svergun, *Structure Analysis by Small-Angle X-Ray and
    Neutron Scattering*, Plenum Press, New York, (1987)
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -102,5 +103,5 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "outer radius", "half length",
+    "excluded volume", "equivalent outer volume sphere", "outer radius", "half length",
     "half outer min dimension", "half outer max dimension",
     "half outer diagonal",
@@ -140,5 +141,5 @@
     [{}, 0.00005, 1764.926],
     [{}, 0.1, None, None,
-     (3./4*(radius+thickness)**2*length)**(1./3),  # R_eff from volume
+     0.5*(0.75*(radius+thickness)*(2.0*(radius+thickness)*length + ((radius+thickness) + length)*(pi*(radius+thickness) + length)))**(1./3.),  # R_eff from excluded volume
      pi*((radius+thickness)**2-radius**2)*length,  # shell volume
      (radius+thickness)**2/((radius+thickness)**2 - radius**2), # form:shell ratio
Index: sasmodels/models/hollow_rectangular_prism.c
===================================================================
--- sasmodels/models/hollow_rectangular_prism.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/hollow_rectangular_prism.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -22,4 +22,12 @@
 
 static double
+radius_from_excluded_volume(double length_a, double b2a_ratio, double c2a_ratio)
+{
+    const double r_equiv = sqrt(length_a*length_a*b2a_ratio/M_PI);
+    const double length_c = length_a*c2a_ratio;
+    return 0.5*cbrt(0.75*r_equiv*(2.0*r_equiv*length_c + (r_equiv + length_c)*(M_PI*r_equiv + length_c)));
+}
+
+static double
 effective_radius(int mode, double length_a, double b2a_ratio, double c2a_ratio, double thickness)
 // NOTE length_a is external dimension!
@@ -27,17 +35,19 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(length_a, b2a_ratio, c2a_ratio);
+    case 2: // equivalent outer volume sphere
         return cbrt(cube(length_a)*b2a_ratio*c2a_ratio/M_4PI_3);
-    case 2: // half length_a
+    case 3: // half length_a
         return 0.5 * length_a;
-    case 3: // half length_b
+    case 4: // half length_b
         return 0.5 * length_a*b2a_ratio;
-    case 4: // half length_c
+    case 5: // half length_c
         return 0.5 * length_a*c2a_ratio;
-    case 5: // equivalent outer circular cross-section
+    case 6: // equivalent outer circular cross-section
         return length_a*sqrt(b2a_ratio/M_PI);
-    case 6: // half ab diagonal
+    case 7: // half ab diagonal
         return 0.5*sqrt(square(length_a) * (1.0 + square(b2a_ratio)));
-    case 7: // half diagonal
+    case 8: // half diagonal
         return 0.5*sqrt(square(length_a) * (1.0 + square(b2a_ratio) + square(c2a_ratio)));
     }
Index: sasmodels/models/hollow_rectangular_prism.py
===================================================================
--- sasmodels/models/hollow_rectangular_prism.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/hollow_rectangular_prism.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -98,4 +98,5 @@
 
 .. [#Nayuk2012] R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 
@@ -150,5 +151,6 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "half length_a", "half length_b", "half length_c",
+    "equivalent cylinder excluded volume", "equivalent outer volume sphere", 
+    "half length_a", "half length_b", "half length_c",
     "equivalent outer circular cross-section",
     "half ab diagonal", "half diagonal",
Index: sasmodels/models/hollow_rectangular_prism_thin_walls.c
===================================================================
--- sasmodels/models/hollow_rectangular_prism_thin_walls.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/hollow_rectangular_prism_thin_walls.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -18,21 +18,31 @@
 
 static double
+radius_from_excluded_volume(double length_a, double b2a_ratio, double c2a_ratio)
+{
+    const double r_equiv = sqrt(length_a*length_a*b2a_ratio/M_PI);
+    const double length_c = length_a*c2a_ratio;
+    return 0.5*cbrt(0.75*r_equiv*(2.0*r_equiv*length_c + (r_equiv + length_c)*(M_PI*r_equiv + length_c)));
+}
+
+static double
 effective_radius(int mode, double length_a, double b2a_ratio, double c2a_ratio)
 {
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(length_a, b2a_ratio, c2a_ratio);
+    case 2: // equivalent outer volume sphere
         return cbrt(cube(length_a)*b2a_ratio*c2a_ratio/M_4PI_3);
-    case 2: // half length_a
+    case 3: // half length_a
         return 0.5 * length_a;
-    case 3: // half length_b
+    case 4: // half length_b
         return 0.5 * length_a*b2a_ratio;
-    case 4: // half length_c
+    case 5: // half length_c
         return 0.5 * length_a*c2a_ratio;
-    case 5: // equivalent outer circular cross-section
+    case 6: // equivalent outer circular cross-section
         return length_a*sqrt(b2a_ratio/M_PI);
-    case 6: // half ab diagonal
+    case 7: // half ab diagonal
         return 0.5*sqrt(square(length_a) * (1.0 + square(b2a_ratio)));
-    case 7: // half diagonal
+    case 8: // half diagonal
         return 0.5*sqrt(square(length_a) * (1.0 + square(b2a_ratio) + square(c2a_ratio)));
     }
Index: sasmodels/models/hollow_rectangular_prism_thin_walls.py
===================================================================
--- sasmodels/models/hollow_rectangular_prism_thin_walls.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/hollow_rectangular_prism_thin_walls.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -72,4 +72,5 @@
 
 .. [#Nayuk2012] R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 
@@ -110,5 +111,6 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "half length_a", "half length_b", "half length_c",
+    "equivalent cylinder excluded volume", "equivalent outer volume sphere", 
+    "half length_a", "half length_b", "half length_c",
     "equivalent outer circular cross-section",
     "half ab diagonal", "half diagonal",
Index: sasmodels/models/parallelepiped.c
===================================================================
--- sasmodels/models/parallelepiped.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/parallelepiped.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -6,21 +6,54 @@
 
 static double
+radius_from_excluded_volume(double length_a, double length_b, double length_c)
+{
+    double r_equiv, length;
+    double lengths[3] = {length_a, length_b, length_c};
+    double lengthmax = fmax(lengths[0],fmax(lengths[1],lengths[2]));
+    double length_1 = lengthmax;
+    double length_2 = lengthmax;
+    double length_3 = lengthmax;
+
+    for(int ilen=0; ilen<3; ilen++) {
+        if (lengths[ilen] < length_1) {
+            length_2 = length_1;
+            length_1 = lengths[ilen];
+            } else {
+                if (lengths[ilen] < length_2) {
+                        length_2 = lengths[ilen];
+                }
+            }
+    }
+    if(length_2-length_1 > length_3-length_2) {
+        r_equiv = sqrt(length_2*length_3/M_PI);
+        length  = length_1;
+    } else  {
+        r_equiv = sqrt(length_1*length_2/M_PI);
+        length  = length_3;
+    }
+
+    return 0.5*cbrt(0.75*r_equiv*(2.0*r_equiv*length + (r_equiv + length)*(M_PI*r_equiv + length)));
+}
+
+static double
 effective_radius(int mode, double length_a, double length_b, double length_c)
 {
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(length_a,length_b,length_c);
+    case 2: // equivalent volume sphere
         return cbrt(length_a*length_b*length_c/M_4PI_3);
-    case 2: // half length_a
+    case 3: // half length_a
         return 0.5 * length_a;
-    case 3: // half length_b
+    case 4: // half length_b
         return 0.5 * length_b;
-    case 4: // half length_c
+    case 5: // half length_c
         return 0.5 * length_c;
-    case 5: // equivalent circular cross-section
+    case 6: // equivalent circular cross-section
         return sqrt(length_a*length_b/M_PI);
-    case 6: // half ab diagonal
+    case 7: // half ab diagonal
         return 0.5*sqrt(length_a*length_a + length_b*length_b);
-    case 7: // half diagonal
+    case 8: // half diagonal
         return 0.5*sqrt(length_a*length_a + length_b*length_b + length_c*length_c);
     }
Index: sasmodels/models/parallelepiped.py
===================================================================
--- sasmodels/models/parallelepiped.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/parallelepiped.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -180,4 +180,5 @@
    14 (1961) 185-211
 .. [#] R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 
 Authorship and Verification
@@ -232,5 +233,6 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "half length_a", "half length_b", "half length_c",
+    "equivalent cylinder excluded volume", "equivalent volume sphere", 
+    "half length_a", "half length_b", "half length_c",
     "equivalent circular cross-section", "half ab diagonal", "half diagonal",
     ]
Index: sasmodels/models/pearl_necklace.c
===================================================================
--- sasmodels/models/pearl_necklace.c	(revision 3f853bebcb00b60a94839b6814ab5fd833196ce6)
+++ sasmodels/models/pearl_necklace.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -67,6 +67,5 @@
 }
 
-double form_volume(double radius, double edge_sep,
-    double thick_string, double fp_num_pearls)
+double form_volume(double radius, double edge_sep, double thick_string, double fp_num_pearls)
 {
     const int num_pearls = (int)(fp_num_pearls + 0.5); //Force integer number of pearls
@@ -77,4 +76,22 @@
 
     return volume;
+}
+
+static double
+radius_from_volume(double radius, double edge_sep, double thick_string, double fp_num_pearls)
+{
+    const int num_pearls = (int) fp_num_pearls +0.5;
+    const double vol_tot = form_volume(radius, edge_sep, thick_string, fp_num_pearls);
+    return cbrt(vol_tot/M_4PI_3);
+}
+
+static double
+effective_radius(int mode, double radius, double edge_sep, double thick_string, double fp_num_pearls)
+{
+    switch (mode) {
+    default:
+    case 1:
+        return radius_from_volume(radius, edge_sep, thick_string, fp_num_pearls);
+    }
 }
 
Index: sasmodels/models/pearl_necklace.py
===================================================================
--- sasmodels/models/pearl_necklace.py	(revision 2cc8aa2a798267dbefb6309f9f93a254fa180b82)
+++ sasmodels/models/pearl_necklace.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -53,4 +53,5 @@
 R Schweins and K Huber, *Particle Scattering Factor of Pearl Necklace Chains*,
 *Macromol. Symp.* 211 (2004) 25-42 2004
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
 """
 
@@ -95,26 +96,29 @@
 source = ["lib/sas_Si.c", "lib/sas_3j1x_x.c", "pearl_necklace.c"]
 single = False  # use double precision unless told otherwise
-
-def volume(radius, edge_sep, thick_string, num_pearls):
-    """
-    Calculates the total particle volume of the necklace.
-    Redundant with form_volume.
-    """
-    num_pearls = int(num_pearls + 0.5)
-    number_of_strings = num_pearls - 1.0
-    string_vol = edge_sep * pi * pow((thick_string / 2.0), 2.0)
-    pearl_vol = 4.0 /3.0 * pi * pow(radius, 3.0)
-    total_vol = number_of_strings * string_vol
-    total_vol += num_pearls * pearl_vol
-    return total_vol
-
-def ER(radius, edge_sep, thick_string, num_pearls):
-    """
-    Calculation for effective radius.
-    """
-    num_pearls = int(num_pearls + 0.5)
-    tot_vol = volume(radius, edge_sep, thick_string, num_pearls)
-    rad_out = (tot_vol/(4.0/3.0*pi)) ** (1./3.)
-    return rad_out
+effective_radius_type = [
+    "equivalent volume sphere", 
+    ]
+    
+#def volume(radius, edge_sep, thick_string, num_pearls):
+#    """
+#    Calculates the total particle volume of the necklace.
+#    Redundant with form_volume.
+#    """
+#    num_pearls = int(num_pearls + 0.5)
+#    number_of_strings = num_pearls - 1.0
+#    string_vol = edge_sep * pi * pow((thick_string / 2.0), 2.0)
+#    pearl_vol = 4.0 /3.0 * pi * pow(radius, 3.0)
+#    total_vol = number_of_strings * string_vol
+#    total_vol += num_pearls * pearl_vol
+#    return total_vol
+#
+#def ER(radius, edge_sep, thick_string, num_pearls):
+#    """
+#    Calculation for effective radius.
+#    """
+#    num_pearls = int(num_pearls + 0.5)
+#    tot_vol = volume(radius, edge_sep, thick_string, num_pearls)
+#    rad_out = (tot_vol/(4.0/3.0*pi)) ** (1./3.)
+#    return rad_out
 
 def random():
Index: sasmodels/models/pringle.c
===================================================================
--- sasmodels/models/pringle.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/pringle.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -105,11 +105,19 @@
 
 static double
+radius_from_excluded_volume(double radius, double thickness)
+{
+    return 0.5*cbrt(0.75*radius*(2.0*radius*thickness + (radius + thickness)*(M_PI*radius + thickness)));
+}
+
+static double
 effective_radius(int mode, double radius, double thickness, double alpha, double beta)
 {
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(radius, thickness);
+    case 2: // equivalent volume sphere
         return cbrt(M_PI*radius*radius*thickness/M_4PI_3);
-    case 2: // radius
+    case 3: // radius
         return radius;
     }
Index: sasmodels/models/pringle.py
===================================================================
--- sasmodels/models/pringle.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/pringle.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -42,4 +42,5 @@
 Karen Edler, Universtiy of Bath, Private Communication. 2012.
 Derivation by Stefan Alexandru Rautu.
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949).
 
 * **Author:** Andrew Jackson **Date:** 2008
@@ -74,5 +75,5 @@
 source = ["lib/polevl.c", "lib/sas_J0.c", "lib/sas_J1.c",
           "lib/sas_JN.c", "lib/gauss76.c", "pringle.c"]
-effective_radius_type = ["equivalent sphere", "radius"]
+effective_radius_type = ["equivalent cylinder excluded volume", "equivalent volume sphere", "radius"]
 
 def random():
Index: sasmodels/models/rectangular_prism.c
===================================================================
--- sasmodels/models/rectangular_prism.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/rectangular_prism.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -6,21 +6,31 @@
 
 static double
+radius_from_excluded_volume(double length_a, double b2a_ratio, double c2a_ratio)
+{
+    double const r_equiv   = sqrt(length_a*length_a*b2a_ratio/M_PI);
+    double const length_c  = c2a_ratio*length_a;
+    return 0.5*cbrt(0.75*r_equiv*(2.0*r_equiv*length_c + (r_equiv + length_c)*(M_PI*r_equiv + length_c)));
+}
+
+static double
 effective_radius(int mode, double length_a, double b2a_ratio, double c2a_ratio)
 {
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent cylinder excluded volume
+        return radius_from_excluded_volume(length_a,b2a_ratio,c2a_ratio);
+    case 2: // equivalent volume sphere
         return cbrt(cube(length_a)*b2a_ratio*c2a_ratio/M_4PI_3);
-    case 2: // half length_a
+    case 3: // half length_a
         return 0.5 * length_a;
-    case 3: // half length_b
+    case 4: // half length_b
         return 0.5 * length_a*b2a_ratio;
-    case 4: // half length_c
+    case 5: // half length_c
         return 0.5 * length_a*c2a_ratio;
-    case 5: // equivalent circular cross-section
+    case 6: // equivalent circular cross-section
         return length_a*sqrt(b2a_ratio/M_PI);
-    case 6: // half ab diagonal
+    case 7: // half ab diagonal
         return 0.5*sqrt(square(length_a) * (1.0 + square(b2a_ratio)));
-    case 7: // half diagonal
+    case 8: // half diagonal
         return 0.5*sqrt(square(length_a) * (1.0 + square(b2a_ratio) + square(c2a_ratio)));
     }
Index: sasmodels/models/rectangular_prism.py
===================================================================
--- sasmodels/models/rectangular_prism.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/rectangular_prism.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -99,4 +99,7 @@
 
 R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854
+
+L. Onsager, Ann. New York Acad. Sci. 51, 627-659 (1949). 
+
 """
 
@@ -137,5 +140,6 @@
 have_Fq = True
 effective_radius_type = [
-    "equivalent sphere", "half length_a", "half length_b", "half length_c",
+    "equivalent cylinder excluded volume", "equivalent volume sphere", 
+    "half length_a", "half length_b", "half length_c",
     "equivalent circular cross-section", "half ab diagonal", "half diagonal",
     ]
Index: sasmodels/models/triaxial_ellipsoid.c
===================================================================
--- sasmodels/models/triaxial_ellipsoid.c	(revision d42dd4a6467163ad6ef165b733218fc2181ec1de)
+++ sasmodels/models/triaxial_ellipsoid.c	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -5,4 +5,52 @@
 {
     return M_4PI_3*radius_equat_minor*radius_equat_major*radius_polar;
+}
+
+static double
+radius_from_curvature(double radius_equat_minor, double radius_equat_major, double radius_polar)
+{
+    // Trivial cases
+    if (radius_equat_minor == radius_equat_major == radius_polar) return radius_polar;
+    if (radius_equat_minor * radius_equat_major * radius_polar == 0.)  return 0.;
+
+
+    double r_equat_equiv, r_polar_equiv;
+    double radii[3] = {radius_equat_minor, radius_equat_major, radius_polar};
+    double radmax = fmax(radii[0],fmax(radii[1],radii[2]));
+
+    double radius_1 = radmax;
+    double radius_2 = radmax;
+    double radius_3 = radmax;
+
+    for(int irad=0; irad<3; irad++) {
+        if (radii[irad] < radius_1) {
+            radius_3 = radius_2;
+            radius_2 = radius_1;
+            radius_1 = radii[irad];
+            } else {
+                if (radii[irad] < radius_2) {
+                        radius_2 = radii[irad];
+                }
+            }
+    }
+    if(radius_2-radius_1 > radius_3-radius_2) {
+        r_equat_equiv = sqrt(radius_2*radius_3);
+        r_polar_equiv = radius_1;
+    } else  {
+        r_equat_equiv = sqrt(radius_1*radius_2);
+        r_polar_equiv = radius_3;
+    }
+
+    // see equation (26) in A.Isihara, J.Chem.Phys. 18(1950)1446-1449
+    const double ratio = (r_polar_equiv < r_equat_equiv
+                          ? r_polar_equiv / r_equat_equiv
+                          : r_equat_equiv / r_polar_equiv);
+    const double e1 = sqrt(1.0 - ratio*ratio);
+    const double b1 = 1.0 + asin(e1) / (e1 * ratio);
+    const double bL = (1.0 + e1) / (1.0 - e1);
+    const double b2 = 1.0 + 0.5 * ratio * ratio / e1 * log(bL);
+    const double delta = 0.75 * b1 * b2;
+    const double ddd = 2.0 * (delta + 1.0) * r_polar_equiv * r_equat_equiv * r_equat_equiv;
+    return 0.5 * cbrt(ddd);
 }
 
@@ -32,9 +80,11 @@
     switch (mode) {
     default:
-    case 1: // equivalent sphere
+    case 1: // equivalent biaxial ellipsoid average curvature
+        return radius_from_curvature(radius_equat_minor,radius_equat_major, radius_polar);
+    case 2: // equivalent volume sphere
         return radius_from_volume(radius_equat_minor,radius_equat_major, radius_polar);
-    case 2: // min radius
+    case 3: // min radius
         return radius_from_min_dimension(radius_equat_minor,radius_equat_major, radius_polar);
-    case 3: // max radius
+    case 4: // max radius
         return radius_from_max_dimension(radius_equat_minor,radius_equat_major, radius_polar);
     }
Index: sasmodels/models/triaxial_ellipsoid.py
===================================================================
--- sasmodels/models/triaxial_ellipsoid.py	(revision ee60aa768b29c58e20b19e94578ec3a94a0889d7)
+++ sasmodels/models/triaxial_ellipsoid.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -158,5 +158,5 @@
 source = ["lib/sas_3j1x_x.c", "lib/gauss76.c", "triaxial_ellipsoid.c"]
 have_Fq = True
-effective_radius_type = ["equivalent sphere", "min radius", "max radius"]
+effective_radius_type = ["equivalent biaxial ellipsoid average curvature", "equivalent volume sphere", "min radius", "max radius"]
 
 def random():
Index: sasmodels/product.py
===================================================================
--- sasmodels/product.py	(revision 5024a563075fb86e48bd868acf2f39ea4af2e90b)
+++ sasmodels/product.py	(revision 99658f6e997e12486269a52113af19f5089e0ef0)
@@ -56,5 +56,5 @@
                 RADIUS_MODE_ID,
                 "",
-                0,
+                1,
                 [["unconstrained"] + p_info.effective_radius_type],
                 "",
