Index: sansmodels/src/sans/models/SphereSLDModel.py
===================================================================
--- sansmodels/src/sans/models/SphereSLDModel.py	(revision c7a7e1b43ffc376e5c441f8a90c5291a702ff4b3)
+++ sansmodels/src/sans/models/SphereSLDModel.py	(revision 7a8faf89408cbad719663a9f4b3e2f655c3dd0cb)
@@ -198,5 +198,5 @@
 
         ## fittable parameters
-        self.fixed=[]
+        self.fixed=['rad_core0.width', 'thick_inter0.width']
         
         ## non-fittable parameters
Index: sansmodels/src/sans/models/SphericalSLDModel.py
===================================================================
--- sansmodels/src/sans/models/SphericalSLDModel.py	(revision 4b3d25baa17f0bb0a51e61b205a2b0b0c2548415)
+++ sansmodels/src/sans/models/SphericalSLDModel.py	(revision 7a8faf89408cbad719663a9f4b3e2f655c3dd0cb)
@@ -76,6 +76,16 @@
         """ 
         ##set dispersion from model 
-        self.dispersion = {}
-                    
+        for name , value in self.model.dispersion.iteritems():   
+              
+            nshell = -1
+            if name.split('_')[0] == 'thick':
+                while nshell<1:
+                    nshell += 1
+                    if name.split('_')[1] == 'inter%s' % str(nshell):
+                        self.dispersion[name]= value
+                    else: 
+                        continue
+            else:
+                self.dispersion[name]= value
 
     def _set_params(self):
@@ -279,5 +289,12 @@
         Helper function to setParam
         """
-
+        toks = name.split('.')
+        if len(toks)==2:
+            for item in self.dispersion.keys():
+                if item.lower()==toks[0].lower():
+                    for par in self.dispersion[item]:
+                        if par.lower() == toks[1].lower():
+                            self.dispersion[item][par] = value
+                            return
         # Look for standard parameter
         for item in self.params.keys():
@@ -293,4 +310,9 @@
         Fill the self.fixed list with the model fixed list
         """
+        for item in self.model.fixed:
+            if item.split('.')[0] in self.params.keys(): 
+                self.fixed.append(item)
+
+        self.fixed.sort()
         pass         
 
@@ -339,3 +361,10 @@
         :dispersion: dispersion object of type DispersionModel
         """
-        pass
+        value= None
+        try:
+            if parameter in self.model.dispersion.keys():
+                value= self.model.set_dispersion(parameter, dispersion)
+            self._set_dispersion()
+            return value
+        except:
+            raise 
Index: sansmodels/src/sans/models/c_extensions/spheresld.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/spheresld.h	(revision 0164899a491d20467a714225f7ea955c852265f3)
+++ sansmodels/src/sans/models/c_extensions/spheresld.h	(revision 7a8faf89408cbad719663a9f4b3e2f655c3dd0cb)
@@ -6,5 +6,5 @@
  */
  //[PYTHONCLASS] = SphereSLDModel
- //[DISP_PARAMS] = thick_inter0
+ //[DISP_PARAMS] = rad_core0, thick_inter0
  //[DESCRIPTION] =<text>Calculate neutron reflectivity using the Parratt iterative formula
  //				Parameters:
@@ -26,5 +26,5 @@
  //					from the bottom (substrate) to the top.
  //		</text>
- //[FIXED]=  <text></text>
+ //[FIXED]=  <text>rad_core0.width; thick_inter0.width</text>
  //[NON_FITTABLE_PARAMS]= <text>n_shells;func_inter0;func_inter1;func_inter2;func_inter3;func_inter4;func_inter5;func_inter5;func_inter7;func_inter8;func_inter9;func_inter10 </text>
  //[ORIENTATION_PARAMS]= <text> </text>
Index: sansmodels/src/sans/models/c_models/CSphereSLDModel.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/CSphereSLDModel.cpp	(revision 0164899a491d20467a714225f7ea955c852265f3)
+++ sansmodels/src/sans/models/c_models/CSphereSLDModel.cpp	(revision 7a8faf89408cbad719663a9f4b3e2f655c3dd0cb)
@@ -154,4 +154,7 @@
         PyObject * disp_dict;
         disp_dict = PyDict_New();
+        self->model->rad_core0.dispersion->accept_as_source(visitor, self->model->rad_core0.dispersion, disp_dict);
+        PyDict_SetItemString(self->dispersion, "rad_core0", disp_dict);
+        disp_dict = PyDict_New();
         self->model->thick_inter0.dispersion->accept_as_source(visitor, self->model->thick_inter0.dispersion, disp_dict);
         PyDict_SetItemString(self->dispersion, "thick_inter0", disp_dict);
@@ -348,4 +351,6 @@
     PyObject* disp_dict;
     DispersionVisitor* visitor = new DispersionVisitor();
+    disp_dict = PyDict_GetItemString(self->dispersion, "rad_core0");
+    self->model->rad_core0.dispersion->accept_as_destination(visitor, self->model->rad_core0.dispersion, disp_dict);
     disp_dict = PyDict_GetItemString(self->dispersion, "thick_inter0");
     self->model->thick_inter0.dispersion->accept_as_destination(visitor, self->model->thick_inter0.dispersion, disp_dict);
@@ -475,4 +480,6 @@
     PyObject* disp_dict;
     DispersionVisitor* visitor = new DispersionVisitor();
+    disp_dict = PyDict_GetItemString(self->dispersion, "rad_core0");
+    self->model->rad_core0.dispersion->accept_as_destination(visitor, self->model->rad_core0.dispersion, disp_dict);
     disp_dict = PyDict_GetItemString(self->dispersion, "thick_inter0");
     self->model->thick_inter0.dispersion->accept_as_destination(visitor, self->model->thick_inter0.dispersion, disp_dict);
@@ -589,4 +596,6 @@
     PyObject* disp_dict;
     DispersionVisitor* visitor = new DispersionVisitor();
+    disp_dict = PyDict_GetItemString(self->dispersion, "rad_core0");
+    self->model->rad_core0.dispersion->accept_as_destination(visitor, self->model->rad_core0.dispersion, disp_dict);
     disp_dict = PyDict_GetItemString(self->dispersion, "thick_inter0");
     self->model->thick_inter0.dispersion->accept_as_destination(visitor, self->model->thick_inter0.dispersion, disp_dict);
@@ -672,4 +681,6 @@
     PyObject* disp_dict;
     DispersionVisitor* visitor = new DispersionVisitor();
+    disp_dict = PyDict_GetItemString(self->dispersion, "rad_core0");
+    self->model->rad_core0.dispersion->accept_as_destination(visitor, self->model->rad_core0.dispersion, disp_dict);
     disp_dict = PyDict_GetItemString(self->dispersion, "thick_inter0");
     self->model->thick_inter0.dispersion->accept_as_destination(visitor, self->model->thick_inter0.dispersion, disp_dict);
@@ -729,5 +740,7 @@
 	// Ugliness necessary to go from python to C
 	    // TODO: refactor this
-    if (!strcmp(par_name, "thick_inter0")) {
+    if (!strcmp(par_name, "rad_core0")) {
+        self->model->rad_core0.dispersion = dispersion;
+    } else    if (!strcmp(par_name, "thick_inter0")) {
         self->model->thick_inter0.dispersion = dispersion;
     } else {
Index: sansmodels/src/sans/models/c_models/spheresld.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/spheresld.cpp	(revision 0164899a491d20467a714225f7ea955c852265f3)
+++ sansmodels/src/sans/models/c_models/spheresld.cpp	(revision 7a8faf89408cbad719663a9f4b3e2f655c3dd0cb)
@@ -13,5 +13,6 @@
 	n_shells = Parameter(1.0);
 	scale = Parameter(1.0);
-	thick_inter0 = Parameter(1.0);
+	thick_inter0 = Parameter(1.0, true);
+	thick_inter0.set_min(0.0);
 	func_inter0 = Parameter(0);
 	sld_core0 = Parameter(2.07e-06);
@@ -80,5 +81,6 @@
     npts_inter = Parameter(35.0);
     nu_inter0 = Parameter(2.5);
-    rad_core0 = Parameter(60.0);
+    rad_core0 = Parameter(60.0, true);
+    rad_core0.set_min(0.0);
 }
 
@@ -98,5 +100,5 @@
 	dp[4] = sld_core0();
 	dp[5] = sld_solv();
-	dp[6] = background();
+	dp[6] = 0.0;
 
 	dp[7] = sld_flat1();
@@ -161,6 +163,38 @@
 
 	// No polydispersion supported in this model.
-
-	return sphere_sld_kernel(dp,q);
+	// Get the dispersion points for the radius
+	vector<WeightPoint> weights_rad_core0;
+	rad_core0.get_weights(weights_rad_core0);
+	vector<WeightPoint> weights_thick_inter0;
+	thick_inter0.get_weights(weights_thick_inter0);
+	// Perform the computation, with all weight points
+	double sum = 0.0;
+	double norm = 0.0;
+	double vol = 0.0;
+
+	// Loop over core weight points
+	for(int i=0; i<weights_rad_core0.size(); i++) {
+		dp[59] = weights_rad_core0[i].value;
+		// Loop over thick_inter0 weight points
+		for(int j=0; j<weights_thick_inter0.size(); j++) {
+			dp[2] = weights_thick_inter0[j].value;
+
+			//Un-normalize Sphere by volume
+			sum += weights_rad_core0[i].weight * weights_thick_inter0[j].weight
+				* sphere_sld_kernel(dp,q) * pow((weights_rad_core0[i].value +
+						weights_thick_inter0[j].value),3.0);
+			//Find average volume
+			vol += weights_rad_core0[i].weight * weights_thick_inter0[j].weight
+				* pow((weights_rad_core0[i].value+weights_thick_inter0[j].value),3.0);
+
+			norm += weights_rad_core0[i].weight * weights_thick_inter0[j].weight;
+		}
+	}
+
+	if (vol != 0.0 && norm != 0.0) {
+		//Re-normalize by avg volume
+		sum = sum/(vol/norm);}
+
+	return sum/norm + background();
 }
 
@@ -225,27 +259,78 @@
 	dp.thick_inter10 = thick_inter10();
 
-	double rad_out = dp.rad_core0 + dp.thick_inter0;
-	if (dp.n_shells > 0)
-		rad_out += dp.thick_flat1 + dp.thick_inter1;
-	if (dp.n_shells > 1)
-		rad_out += dp.thick_flat2 + dp.thick_inter2;
-	if (dp.n_shells > 2)
-		rad_out += dp.thick_flat3 + dp.thick_inter3;
-	if (dp.n_shells > 3)
-		rad_out += dp.thick_flat4 + dp.thick_inter4;
-	if (dp.n_shells > 4)
-		rad_out += dp.thick_flat5 + dp.thick_inter5;
-	if (dp.n_shells > 5)
-		rad_out += dp.thick_flat6 + dp.thick_inter6;
-	if (dp.n_shells > 6)
-		rad_out += dp.thick_flat7 + dp.thick_inter7;
-	if (dp.n_shells > 7)
-		rad_out += dp.thick_flat8 + dp.thick_inter8;
-	if (dp.n_shells > 8)
-		rad_out += dp.thick_flat9 + dp.thick_inter9;
-	if (dp.n_shells > 9)
-		rad_out += dp.thick_flat10 + dp.thick_inter10;
-
-	return rad_out;
-
-}
+	double rad_out = 0.0;
+	double out = 0.0;
+	// Perform the computation, with all weight points
+	double sum = 0.0;
+	double norm = 0.0;
+
+	// Get the dispersion points for the radius
+	vector<WeightPoint> weights_rad_core0;
+	rad_core0.get_weights(weights_rad_core0);
+
+	// Get the dispersion points for the thick 1
+	vector<WeightPoint> weights_thick_inter0;
+	thick_inter0.get_weights(weights_thick_inter0);
+	// Loop over radius weight points
+	for(int i=0; i<weights_rad_core0.size(); i++) {
+		dp.rad_core0 = weights_rad_core0[i].value;
+		// Loop over radius weight points
+		for(int j=0; j<weights_thick_inter0.size(); j++) {
+			dp.thick_inter0 = weights_thick_inter0[j].value;
+			rad_out = dp.rad_core0 + dp.thick_inter0;
+			if (dp.n_shells > 0)
+				rad_out += dp.thick_flat1 + dp.thick_inter1;
+			if (dp.n_shells > 1)
+				rad_out += dp.thick_flat2 + dp.thick_inter2;
+			if (dp.n_shells > 2)
+				rad_out += dp.thick_flat3 + dp.thick_inter3;
+			if (dp.n_shells > 3)
+				rad_out += dp.thick_flat4 + dp.thick_inter4;
+			if (dp.n_shells > 4)
+				rad_out += dp.thick_flat5 + dp.thick_inter5;
+			if (dp.n_shells > 5)
+				rad_out += dp.thick_flat6 + dp.thick_inter6;
+			if (dp.n_shells > 6)
+				rad_out += dp.thick_flat7 + dp.thick_inter7;
+			if (dp.n_shells > 7)
+				rad_out += dp.thick_flat8 + dp.thick_inter8;
+			if (dp.n_shells > 8)
+				rad_out += dp.thick_flat9 + dp.thick_inter9;
+			if (dp.n_shells > 9)
+				rad_out += dp.thick_flat10 + dp.thick_inter10;
+			sum += weights_rad_core0[i].weight*weights_thick_inter0[j].weight
+				* (rad_out);
+			norm += weights_rad_core0[i].weight*weights_thick_inter0[j].weight;
+		}
+	}
+	if (norm != 0){
+		//return the averaged value
+		out =  sum/norm;}
+	else{
+		//return normal value
+		out = dp.rad_core0 + dp.thick_inter0;
+		if (dp.n_shells > 0)
+			out += dp.thick_flat1 + dp.thick_inter1;
+		if (dp.n_shells > 1)
+			out += dp.thick_flat2 + dp.thick_inter2;
+		if (dp.n_shells > 2)
+			out += dp.thick_flat3 + dp.thick_inter3;
+		if (dp.n_shells > 3)
+			out += dp.thick_flat4 + dp.thick_inter4;
+		if (dp.n_shells > 4)
+			out += dp.thick_flat5 + dp.thick_inter5;
+		if (dp.n_shells > 5)
+			out += dp.thick_flat6 + dp.thick_inter6;
+		if (dp.n_shells > 6)
+			out += dp.thick_flat7 + dp.thick_inter7;
+		if (dp.n_shells > 7)
+			out += dp.thick_flat8 + dp.thick_inter8;
+		if (dp.n_shells > 8)
+			out += dp.thick_flat9 + dp.thick_inter9;
+		if (dp.n_shells > 9)
+			out += dp.thick_flat10 + dp.thick_inter10;
+		}
+
+	return out;
+
+}
