Index: sasmodels/models/core_multi_shell.c
===================================================================
--- sasmodels/models/core_multi_shell.c	(revision d277229f02cb7770fbb4ea2ad506d96bed705d75)
+++ sasmodels/models/core_multi_shell.c	(revision a94046f61e19c19ba17cb07580d048db76ec896c)
@@ -32,10 +32,15 @@
 static double
 effective_radius(int mode, double core_radius, double fp_n, double thickness[])
+// this seems regardless to always give the result for outer radius for n=1 shells; why??
+// printf shows fp_n is always 1, not 0,1,2
 {
-    if (mode == 1) {
+//        printf("fp_n =%g \n",fp_n);
+        if (mode == 1) {
         double r = core_radius;
         int n = (int)(fp_n+0.5);
-        for (int i=0; i < n; i++) {
-            r += thickness[i];
+        if ( n > 0) {
+            for (int i=0; i < n; i++) {
+                r += thickness[i];
+            }
         }
         return r;
Index: sasmodels/models/core_shell_cylinder.c
===================================================================
--- sasmodels/models/core_shell_cylinder.c	(revision d277229f02cb7770fbb4ea2ad506d96bed705d75)
+++ sasmodels/models/core_shell_cylinder.c	(revision a94046f61e19c19ba17cb07580d048db76ec896c)
@@ -24,5 +24,5 @@
 {
     const double radius_outer = radius + thickness;
-    const double length_outer = length + thickness;
+    const double length_outer = length + 2.0*thickness;
     return sqrt(radius_outer*radius_outer + 0.25*length_outer*length_outer);
 }
@@ -30,4 +30,6 @@
 static double
 effective_radius(int mode, double radius, double thickness, double length)
+//effective_radius_type = ["equivalent sphere","outer radius","half outer length","half min outer dimension",
+//                         "half max outer dimension","half outer diagonal"]
 {
     if (mode == 1) {
Index: sasmodels/models/core_shell_parallelepiped.c
===================================================================
--- sasmodels/models/core_shell_parallelepiped.c	(revision d277229f02cb7770fbb4ea2ad506d96bed705d75)
+++ sasmodels/models/core_shell_parallelepiped.c	(revision a94046f61e19c19ba17cb07580d048db76ec896c)
@@ -45,19 +45,23 @@
 effective_radius(int mode, double length_a, double length_b, double length_c,
                  double thick_rim_a, double thick_rim_b, double thick_rim_c)
+//effective_radius_type = ["equivalent sphere","half outer length_a", "half outer length_b", "half outer length_c",
+//                         "equivalent circular cross-section","half outer ab diagonal","half outer diagonal"]
+// note the core box is A*B*C with slabs ta, tb & tc on each face but missing the corners, though that fact is ignored here
+// in the equvalent sphere option
 {
     if (mode == 1) {
         return radius_from_volume(length_a, length_b, length_c, thick_rim_a, thick_rim_b, thick_rim_c);
     } else if (mode == 2) {
-        return 0.5 * (length_a + thick_rim_a);
+        return 0.5 * length_a + thick_rim_a;
     } else if (mode == 3) {
-        return 0.5 * (length_b + thick_rim_b);
+        return 0.5 * length_b + thick_rim_b;
     } else if (mode == 4) {
-        return 0.5 * (length_c + thick_rim_c);
+        return 0.5 * length_c + thick_rim_c;
     } else if (mode == 5) {
         return radius_from_crosssection(length_a, length_b, thick_rim_a, thick_rim_b);
     } else if (mode == 6) {
-        return 0.5*sqrt(square(length_a+thick_rim_a) + square(length_b+thick_rim_b));
+        return 0.5*sqrt(square(length_a+ 2.0*thick_rim_a) + square(length_b+ 2.0*thick_rim_b));
     } else {
-        return 0.5*sqrt(square(length_a+thick_rim_a) + square(length_b+thick_rim_b) + square(length_c+thick_rim_c));
+        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/elliptical_cylinder.c
===================================================================
--- sasmodels/models/elliptical_cylinder.c	(revision d277229f02cb7770fbb4ea2ad506d96bed705d75)
+++ sasmodels/models/elliptical_cylinder.c	(revision a94046f61e19c19ba17cb07580d048db76ec896c)
@@ -13,15 +13,15 @@
 
 static double
-radius_from_min_dimension(double radius_minor, double r_ratio, double length)
+radius_from_min_dimension(double radius_minor, double r_ratio, double hlength)
 {
     const double rad_min = (r_ratio > 1.0 ? radius_minor : r_ratio*radius_minor);
-    return (rad_min < length ? rad_min : length);
+    return (rad_min < length ? rad_min : hlength);
 }
 
 static double
-radius_from_max_dimension(double radius_minor, double r_ratio, double length)
+radius_from_max_dimension(double radius_minor, double r_ratio, double hlength)
 {
     const double rad_max = (r_ratio < 1.0 ? radius_minor : r_ratio*radius_minor);
-    return (rad_max > length ? rad_max : length);
+    return (rad_max > length ? rad_max : hlength);
 }
 
@@ -35,4 +35,6 @@
 static double
 effective_radius(int mode, double radius_minor, double r_ratio, double length)
+//effective_radius_type = ["equivalent sphere","average radius","min radius","max radius",
+//                         "equivalent circular cross-section","half length","half min dimension","half max dimension","half diagonal"]
 {
     if (mode == 1) {
@@ -49,7 +51,7 @@
         return 0.5*length;
     } else if (mode == 7) {
-        return radius_from_min_dimension(radius_minor,r_ratio,length);
+        return radius_from_min_dimension(radius_minor,r_ratio,0.5*length);
     } else if (mode == 8) {
-        return radius_from_max_dimension(radius_minor,r_ratio,length);
+        return radius_from_max_dimension(radius_minor,r_ratio,0.5*length);
     } else {
         return radius_from_diagonal(radius_minor,r_ratio,length);
Index: sasmodels/models/hollow_rectangular_prism.c
===================================================================
--- sasmodels/models/hollow_rectangular_prism.c	(revision d277229f02cb7770fbb4ea2ad506d96bed705d75)
+++ sasmodels/models/hollow_rectangular_prism.c	(revision a94046f61e19c19ba17cb07580d048db76ec896c)
@@ -15,4 +15,7 @@
 static double
 effective_radius(int mode, double length_a, double b2a_ratio, double c2a_ratio, double thickness)
+//effective_radius_type = ["equivalent sphere","half length_a", "half length_b", "half length_c",
+//                         "equivalent outer circular cross-section","half ab diagonal","half diagonal"]
+// NOTE length_a is external dimension!
 {
     if (mode == 1) {
Index: sasmodels/models/hollow_rectangular_prism.py
===================================================================
--- sasmodels/models/hollow_rectangular_prism.py	(revision d277229f02cb7770fbb4ea2ad506d96bed705d75)
+++ sasmodels/models/hollow_rectangular_prism.py	(revision a94046f61e19c19ba17cb07580d048db76ec896c)
@@ -126,5 +126,5 @@
                "Solvent scattering length density"],
               ["length_a", "Ang", 35, [0, inf], "volume",
-               "Shorter side of the parallelepiped"],
+               "Shortest, external, size of the parallelepiped"],
               ["b2a_ratio", "Ang", 1, [0, inf], "volume",
                "Ratio sides b/a"],
