Index: sasmodels/models/multi_shell.c
===================================================================
--- sasmodels/models/multi_shell.c	(revision c9f885ecf6a755509dd14f68721706d77aa8d69f)
+++ sasmodels/models/multi_shell.c	(revision c9f885ecf6a755509dd14f68721706d77aa8d69f)
@@ -0,0 +1,112 @@
+double form_volume(void);
+
+double Iq(double q,
+          double core_radius,
+          double s_thickness,
+          double w_thickness,
+          double core_sld,
+          double shell_sld,
+          double n_pairs);
+
+double Iqxy(double qx, double qy,
+          double core_radius,
+          double s_thickness,
+          double w_thickness,
+          double core_sld,
+          double shell_sld,
+          double n_pairs);
+
+static
+double F_func(double qr) {
+	double sc;
+
+    if (qr > 0.1){
+        double sn, cn;
+        SINCOS(qr, sn, cn);
+        sc = (3.0*(sn - qr*cn)/(qr*qr*qr));
+    } else{
+        // herbie.uwplse.org/demo low-q solution for the above.
+        sc = 1.0 + 0.0035714285714285718*(qr*qr*qr*qr) - 0.1*qr*qr;
+    }
+
+	return sc;
+}
+static
+double multi_shell_kernel(double q,
+          double core_radius,
+          double s_thickness,
+          double w_thickness,
+          double core_sld,
+          double shell_sld,
+          double n_pairs)
+{
+	//calculate with a loop, two shells at a time
+	int ii=0;
+	double fval=0.0;
+	double voli = 0.0;
+    const double sldi = core_sld-shell_sld;
+
+	do {
+		double ri = core_radius + (double)ii*(s_thickness + w_thickness);
+
+        // layer 1
+		voli = 4.0*M_PI/3.0*ri*ri*ri;
+		fval += voli*sldi*F_func(ri*q);
+
+		ri += s_thickness;
+
+        // layer 2
+		voli = 4.0*M_PI/3.0*ri*ri*ri;
+		fval -= voli*sldi*F_func(ri*q);
+
+        //do 2 layers at a time
+		ii+=1;
+
+	} while(ii<=n_pairs-1);  //change to make 0 < n_pairs < 2 correspond to
+	                         //unilamellar vesicles (C. Glinka, 11/24/03)
+
+    fval *= 1.0e-4*fval/voli;
+
+	return(fval);
+}
+
+double form_volume(void){
+    return NAN;
+}
+
+double Iq(double q,
+          double core_radius,
+          double s_thickness,
+          double w_thickness,
+          double core_sld,
+          double shell_sld,
+          double n_pairs)
+{
+    return multi_shell_kernel(q,
+           core_radius,
+           s_thickness,
+           w_thickness,
+           core_sld,
+           shell_sld,
+           n_pairs);
+}
+
+double Iqxy(double qx, double qy,
+          double core_radius,
+          double s_thickness,
+          double w_thickness,
+          double core_sld,
+          double shell_sld,
+          double n_pairs)
+{
+    double q = sqrt(qx*qx + qy*qy);
+
+    return multi_shell_kernel(q,
+           core_radius,
+           s_thickness,
+           w_thickness,
+           core_sld,
+           shell_sld,
+           n_pairs);
+}
+
Index: sasmodels/models/multi_shell.py
===================================================================
--- sasmodels/models/multi_shell.py	(revision c9f885ecf6a755509dd14f68721706d77aa8d69f)
+++ sasmodels/models/multi_shell.py	(revision c9f885ecf6a755509dd14f68721706d77aa8d69f)
@@ -0,0 +1,103 @@
+r"""
+This model provides the form factor, *P(q)*, for a multi-lamellar vesicle
+with *N* shells where the core is filled with solvent and the shells are
+interleaved with layers of solvent. For *N = 1*, this returns the VesicleModel.
+
+Definition
+----------
+
+.. figure:: img/multi_shell_fig1.jpg
+
+The 2D scattering intensity is the same as 1D, regardless of the orientation
+of the q vector which is defined as:
+
+.. math::
+
+    q = \sqrt{q_x^2 + q_y^2}
+
+.. note:
+    The outer most radius
+    $core_radius + n_pairs * s_thickness + (n_pairs - 1) * w_thickness$
+    is used as the effective radius for *S(Q)* when $P(Q) * S(Q)$ is applied.
+
+
+.. figure:: img/multi_shell_1d.jpg
+
+    1D plot using the default values (with 200 data point).
+
+Our model uses the form factor calculations implemented in a c-library provided
+by the NIST Center for Neutron Research (Kline, 2006).
+
+Reference
+---------
+B Cabane, *Small Angle Scattering Methods*,
+in *Surfactant Solutions: New Methods of Investigation*,
+Ch.2, Surfactant Science Series Vol. 22, Ed. R Zana and M Dekker,
+New York, (1987).
+
+"""
+
+from numpy import inf
+
+name = "multi_shell"
+title = "Multi shell model"
+description = """
+    MultiShell (Sphere) Model (or Multilamellar Vesicles): Model parameters;
+    scale : scale factor
+    core_radius : Core radius of the multishell
+    s_thickness: shell thickness
+    w_thickness: water thickness
+    core_sld: core scattering length density
+    shell_sld: shell scattering length density
+    n_pairs:number of pairs of water/shell
+    background: incoherent background
+        """
+category = "shape:sphere"
+
+# pylint: disable=bad-whitespace, line-too-long
+#   ["name", "units", default, [lower, upper], "type","description"],
+parameters = [
+    ["core_radius", "Ang",        60.0, [0.0, inf],  "", "Core radius of the multishell"],
+    ["s_thickness", "Ang",        10.0, [0.0, inf],  "", "Shell thickness"],
+    ["w_thickness", "Ang",        10.0, [0.0, inf],  "", "Water thickness"],
+    ["core_sld",    "1e-6/Ang^2",  6.4, [-inf, inf], "", "Core scattering length density"],
+    ["shell_sld",   "1e-6/Ang^2",  0.4, [-inf, inf], "", "Shell scattering length density"],
+    ["n_pairs",     "",            2.0, [1.0, inf],  "", "Number of pairs of water and shell"],
+    ]
+# pylint: enable=bad-whitespace, line-too-long
+
+source = ["multi_shell.c"]
+
+demo = dict(scale=1, background=0,
+            core_radius=60.0,
+            s_thickness=10.0,
+            w_thickness=10.0,
+            core_sld=6.4,
+            shell_sld=0.4,
+            n_pairs=2.0)
+
+oldname = 'MultiShellModel'
+oldpars = dict()
+
+tests = [
+    # Accuracy tests based on content in test/utest_other_models.py
+    [{'core_radius': 60.0,
+      's_thickness': 10.0,
+      'w_thickness': 10.0,
+      'core_sld': 6.4,
+      'shell_sld': 0.4,
+      'n_pairs': 2.0,
+      'scale': 1.0,
+      'background': 0.001,
+     }, 0.001, 2442.81],
+
+    [{'core_radius': 60.0,
+      's_thickness': 10.0,
+      'w_thickness': 10.0,
+      'core_sld': 6.4,
+      'shell_sld': 0.4,
+      'n_pairs': 2.0,
+      'scale': 1.0,
+      'background': 0.001,
+     }, (0.001, 0.30903), 1.61873],
+    ]
