Index: sansmodels/src/sans/models/c_models/CLamellarModel.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/CLamellarModel.cpp	(revision 34c30203f24453aa528815f48e84a90b0bbd95be)
+++ sansmodels/src/sans/models/c_models/CLamellarModel.cpp	(revision 42f193aa18a9b086b81b4861e33abca433f0ba94)
@@ -91,7 +91,4 @@
         DispersionVisitor* visitor = new DispersionVisitor();
         PyObject * disp_dict;
-        disp_dict = PyDict_New();
-        self->model->delta.dispersion->accept_as_source(visitor, self->model->delta.dispersion, disp_dict);
-        PyDict_SetItemString(self->dispersion, "delta", disp_dict);
 
 
@@ -154,6 +151,4 @@
     PyObject* disp_dict;
     DispersionVisitor* visitor = new DispersionVisitor();
-    disp_dict = PyDict_GetItemString(self->dispersion, "delta");
-    self->model->delta.dispersion->accept_as_destination(visitor, self->model->delta.dispersion, disp_dict);
 
 	
@@ -215,6 +210,4 @@
     PyObject* disp_dict;
     DispersionVisitor* visitor = new DispersionVisitor();
-    disp_dict = PyDict_GetItemString(self->dispersion, "delta");
-    self->model->delta.dispersion->accept_as_destination(visitor, self->model->delta.dispersion, disp_dict);
 
 	
@@ -272,7 +265,5 @@
 	// Ugliness necessary to go from python to C
 	    // TODO: refactor this
-    if (!strcmp(par_name, "delta")) {
-        self->model->delta.dispersion = dispersion;
-    } else {
+ {
 	    PyErr_SetString(CLamellarModelError,
 	    	"CLamellarModel.set_dispersion expects a valid parameter name.");
Index: sansmodels/src/sans/models/c_models/CVesicleModel.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/CVesicleModel.cpp	(revision 3d25331f0e8a822fc6c59f15883b1cd21463b567)
+++ sansmodels/src/sans/models/c_models/CVesicleModel.cpp	(revision 42f193aa18a9b086b81b4861e33abca433f0ba94)
@@ -95,4 +95,7 @@
         self->model->core_radius.dispersion->accept_as_source(visitor, self->model->core_radius.dispersion, disp_dict);
         PyDict_SetItemString(self->dispersion, "core_radius", disp_dict);
+        disp_dict = PyDict_New();
+        self->model->thickness.dispersion->accept_as_source(visitor, self->model->thickness.dispersion, disp_dict);
+        PyDict_SetItemString(self->dispersion, "thickness", disp_dict);
 
 
@@ -158,4 +161,6 @@
     disp_dict = PyDict_GetItemString(self->dispersion, "core_radius");
     self->model->core_radius.dispersion->accept_as_destination(visitor, self->model->core_radius.dispersion, disp_dict);
+    disp_dict = PyDict_GetItemString(self->dispersion, "thickness");
+    self->model->thickness.dispersion->accept_as_destination(visitor, self->model->thickness.dispersion, disp_dict);
 
 	
@@ -220,4 +225,6 @@
     disp_dict = PyDict_GetItemString(self->dispersion, "core_radius");
     self->model->core_radius.dispersion->accept_as_destination(visitor, self->model->core_radius.dispersion, disp_dict);
+    disp_dict = PyDict_GetItemString(self->dispersion, "thickness");
+    self->model->thickness.dispersion->accept_as_destination(visitor, self->model->thickness.dispersion, disp_dict);
 
 	
@@ -277,4 +284,6 @@
     if (!strcmp(par_name, "core_radius")) {
         self->model->core_radius.dispersion = dispersion;
+    } else    if (!strcmp(par_name, "thickness")) {
+        self->model->thickness.dispersion = dispersion;
     } else {
 	    PyErr_SetString(CVesicleModelError,
Index: sansmodels/src/sans/models/c_models/lamellar.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/lamellar.cpp	(revision 34c30203f24453aa528815f48e84a90b0bbd95be)
+++ sansmodels/src/sans/models/c_models/lamellar.cpp	(revision 42f193aa18a9b086b81b4861e33abca433f0ba94)
@@ -34,7 +34,8 @@
 LamellarModel :: LamellarModel() {
 	scale      = Parameter(1.0);
-	delta     = Parameter(50.0, true);
+	delta     = Parameter(50.0);
 	delta.set_min(0.0);
-	sigma    = Parameter(0.15, true);
+	sigma    = Parameter(0.15);
+	sigma.set_min(0.0);
 	contrast   = Parameter(5.3e-6);
 	background = Parameter(0.0);
@@ -59,21 +60,5 @@
 	dp[4] = background();
 
-
-	// Get the dispersion points for the bilayer thickness(delta)
-	vector<WeightPoint> weights_delta;
-	delta.get_weights(weights_delta);
-
-	// Perform the computation, with all weight points
-	double sum = 0.0;
-	double norm = 0.0;
-
-	// Loop over semi axis A weight points
-	for(int i=0; i< (int)weights_delta.size(); i++) {
-		dp[1] = weights_delta[i].value;
-		sum += weights_delta[i].weight* LamellarFF(dp, q);
-		norm += weights_delta[i].weight;
-				
-	}
-	return sum/norm + background();
+	return LamellarFF(dp, q);
 }
 
@@ -86,31 +71,6 @@
 
 double LamellarModel :: operator()(double qx, double qy) {
-	LamellarParameters dp;
-
-	// Fill parameter array for IGOR library
-	// Add the background after averaging
-	dp.scale = scale();
-	dp.delta = delta();
-	dp.sigma = sigma();
-	dp.contrast = contrast();
-	dp.background = background();
-
-
-	// Get the dispersion points for the bilayer thickness(delta)
-	vector<WeightPoint> weights_delta;
-	delta.get_weights(weights_delta);
-
-	// Perform the computation, with all weight points
-	double sum = 0.0;
-	double norm = 0.0;
-
-	// Loop over detla  weight points
-	for(int i=0; i< (int)weights_delta.size(); i++) {
-		dp.delta = weights_delta[i].value;
-		sum += weights_delta[i].weight* lamellar_analytical_2DXY(&dp, qx, qy);
-		norm += weights_delta[i].weight;
-				
-	}
-	return sum/norm + background();
+	double q = sqrt(qx*qx + qy*qy);
+	return (*this).operator()(q);
 }
 
@@ -123,6 +83,4 @@
  */
 double LamellarModel :: evaluate_rphi(double q, double phi) {
-	double qx = q*cos(phi);
-	double qy = q*sin(phi);
-	return (*this).operator()(qx, qy);
+	return (*this).operator()(q);
 }
Index: sansmodels/src/sans/models/c_models/multishell.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/multishell.cpp	(revision 2cc633bae7266a8ade40cec768899907446f505e)
+++ sansmodels/src/sans/models/c_models/multishell.cpp	(revision 42f193aa18a9b086b81b4861e33abca433f0ba94)
@@ -34,6 +34,8 @@
 	core_radius     = Parameter(60.0, true);
 	core_radius.set_min(0.0);
-	s_thickness  = Parameter(10.0);
-	w_thickness   = Parameter(10.0);
+	s_thickness  = Parameter(10.0, true);
+	s_thickness.set_min(0.0);
+	w_thickness   = Parameter(10.0, true);
+	w_thickness.set_min(0.0);
 	core_sld   = Parameter(6.4e-6);
 	shell_sld   = Parameter(4.0e-7);
@@ -60,5 +62,5 @@
 	dp[5] = shell_sld();
 	dp[6] = n_pairs();
-	dp[7] = background();
+	dp[7] = 0.0;
 
 	// Get the dispersion points for the core radius
Index: sansmodels/src/sans/models/c_models/vesicle.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/vesicle.cpp	(revision 3d25331f0e8a822fc6c59f15883b1cd21463b567)
+++ sansmodels/src/sans/models/c_models/vesicle.cpp	(revision 42f193aa18a9b086b81b4861e33abca433f0ba94)
@@ -34,5 +34,6 @@
 	core_radius     = Parameter(100.0, true);
 	core_radius.set_min(0.0);
-	thickness  = Parameter(30.0);
+	thickness  = Parameter(30.0, true);
+	thickness.set_min(0.0);
 	core_sld   = Parameter(6.36e-6);
 	shell_sld   = Parameter(5.0e-7);
@@ -57,9 +58,12 @@
 	dp[4] = shell_sld();
 	dp[5] = background();
-	
+
 
 	// Get the dispersion points for the core radius
 	vector<WeightPoint> weights_core_radius;
 	core_radius.get_weights(weights_core_radius);
+	// Get the dispersion points for the thickness
+	vector<WeightPoint> weights_thickness;
+	thickness.get_weights(weights_thickness);
 
 	// Perform the computation, with all weight points
@@ -70,8 +74,10 @@
 	for(int i=0; i< (int)weights_core_radius.size(); i++) {
 		dp[1] = weights_core_radius[i].value;
-
-		sum += weights_core_radius[i].weight
-			* VesicleForm(dp, q);
-		norm += weights_core_radius[i].weight;
+		for(int j=0; j< (int)weights_core_radius.size(); j++) {
+			dp[2] = weights_thickness[j].value;
+			sum += weights_core_radius[i].weight
+				* weights_thickness[j].weight * VesicleForm(dp, q);
+			norm += weights_core_radius[i].weight * weights_thickness[j].weight;
+		}
 	}
 	return sum/norm + background();
