Index: sansmodels/src/sans/models/c_models/c_models.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/c_models.cpp	(revision 770bab1b907c20488df256707ca66e7bc3eccb32)
+++ sansmodels/src/sans/models/c_models/c_models.cpp	(revision 59b9b67578f11772d51a4d61028e0dfc7097df5a)
@@ -290,9 +290,9 @@
 	addCMultiShellModel(m);
 	addCBinaryHSModel(m);
-	//addDisperser(m);
-	//addCGaussian(m);
-	//addCSchulz(m);
-	//addCLogNormal(m);
-	//addCLorentzian(m);
+	addDisperser(m);
+	addCGaussian(m);
+	addCSchulz(m);
+	addCLogNormal(m);
+	addCLorentzian(m);
 	addCVesicleModel(m);
 	addCPoly_GaussCoil(m);
Index: sansmodels/src/sans/models/c_models/parameters.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/parameters.cpp	(revision 8dc02d8b4348f58c310e83b1e0b10a5ab1e56f16)
+++ sansmodels/src/sans/models/c_models/parameters.cpp	(revision 59b9b67578f11772d51a4d61028e0dfc7097df5a)
@@ -58,11 +58,19 @@
 	Parameter* par = (Parameter*)param;
 	double value = (*par)();
-
-	if (npts<2) {
-		weights.insert(weights.end(), WeightPoint(value, 1.0));
-	} else {
-		for(int i=0; i<npts; i++) {
-			double val = value + width * (1.0*double(i)/double(npts-1) - 0.5);
-
+	double sig;
+	if (npts<2) {
+		weights.insert(weights.end(), WeightPoint(value, 1.0));
+	} else {
+		for(int i=0; i<npts; i++) {
+
+			if ((*par).has_min==false){
+				// width = sigma for angles
+				sig = width;
+			}
+			else{
+				//width = polydispersity (=sigma/value) for length
+				sig = width * value;
+			}
+			double val = value + sig * (1.0*double(i)/double(npts-1) - 0.5);
 			if ( ((*par).has_min==false || val>(*par).min)
 			  && ((*par).has_max==false || val<(*par).max)  )
@@ -83,7 +91,7 @@
 
 GaussianDispersion :: GaussianDispersion() {
-	npts  = 21;
+	npts  = 11;
 	width = 0.0;
-	nsigmas = 3.0;
+	nsigmas = 2.5;
 };
 
@@ -115,19 +123,27 @@
 		width = 0.0;
 		npts  = 1;
-		nsigmas = 3.0;
-	}
-
-	Parameter* par = (Parameter*)param;
-	double value = (*par)();
-
-	if (npts<2) {
-		weights.insert(weights.end(), WeightPoint(value, 1.0));
-	} else {
-		for(int i=0; i<npts; i++) {
+		nsigmas = 2.5;
+	}
+
+	Parameter* par = (Parameter*)param;
+	double value = (*par)();
+	double sig;
+	if (npts<2) {
+		weights.insert(weights.end(), WeightPoint(value, 1.0));
+	} else {
+		for(int i=0; i<npts; i++) {
+			if ((*par).has_min==false){
+				// width = sigma for angles
+				sig = width;
+			}
+			else{
+				//width = polydispersity (=sigma/value) for length
+				sig = width * value;
+			}
 			// We cover n(nsigmas) times sigmas on each side of the mean
-			double val = value + width * (2.0*nsigmas*double(i)/double(npts-1) - nsigmas);
+			double val = value + sig * (2.0*nsigmas*double(i)/double(npts-1) - nsigmas);
 			if ( ((*par).has_min==false || val>(*par).min)
 			  && ((*par).has_max==false || val<(*par).max)  ) {
-				double _w = gaussian_weight(value, width, val);
+				double _w = gaussian_weight(value, sig, val);
 				weights.insert(weights.end(), WeightPoint(val, _w));
 			}
@@ -142,5 +158,5 @@
 
 RectangleDispersion :: RectangleDispersion() {
-	npts  = 21;
+	npts  = 11;
 	width = 0.0;
 	nsigmas = 1.0;
@@ -182,14 +198,22 @@
 	Parameter* par = (Parameter*)param;
 	double value = (*par)();
-
-	if (npts<2) {
-		weights.insert(weights.end(), WeightPoint(value, 1.0));
-	} else {
-		for(int i=0; i<npts; i++) {
+	double sig;
+	if (npts<2) {
+		weights.insert(weights.end(), WeightPoint(value, 1.0));
+	} else {
+		for(int i=0; i<npts; i++) {
+			if ((*par).has_min==false){
+				// width = sigma for angles
+				sig = width;
+			}
+			else{
+				//width = polydispersity (=sigma/value) for length
+				sig = width * value;
+			}
 			// We cover n(nsigmas) times sigmas on each side of the mean
-			double val = value + width * (2.0*nsigmas*double(i)/double(npts-1) - nsigmas);
+			double val = value + sig * (2.0*nsigmas*double(i)/double(npts-1) - nsigmas);
 			if ( ((*par).has_min==false || val>(*par).min)
 			  && ((*par).has_max==false || val<(*par).max)  ) {
-				double _w = rectangle_weight(value, width, val);
+				double _w = rectangle_weight(value, sig, val);
 				weights.insert(weights.end(), WeightPoint(val, _w));
 			}
@@ -204,5 +228,5 @@
 
 LogNormalDispersion :: LogNormalDispersion() {
-	npts  = 21;
+	npts  = 11;
 	width = 0.0;
 	nsigmas = 3.0;
@@ -240,15 +264,23 @@
 	Parameter* par = (Parameter*)param;
 	double value = (*par)();
-
-	if (npts<2) {
-		weights.insert(weights.end(), WeightPoint(value, 1.0));
-	} else {
-		for(int i=0; i<npts; i++) {
+	double sig;
+	if (npts<2) {
+		weights.insert(weights.end(), WeightPoint(value, 1.0));
+	} else {
+		for(int i=0; i<npts; i++) {
+			if ((*par).has_min==false){
+				// width = sigma for angles
+				sig = width;
+			}
+			else{
+				//width = polydispersity (=sigma/value) for length
+				sig = width * value;
+			}
 			// We cover n(nsigmas) times sigmas on each side of the mean
-			double val = value + width * (2.0*nsigmas*double(i)/double(npts-1) - nsigmas);
+			double val = value + sig * (2.0*nsigmas*double(i)/double(npts-1) - nsigmas);
 
 			if ( ((*par).has_min==false || val>(*par).min)
 			  && ((*par).has_max==false || val<(*par).max)  ) {
-				double _w = lognormal_weight(value, width, val);
+				double _w = lognormal_weight(value, sig, val);
 				weights.insert(weights.end(), WeightPoint(val, _w));
 			}
@@ -264,5 +296,5 @@
 
 SchulzDispersion :: SchulzDispersion() {
-	npts  = 21;
+	npts  = 11;
 	width = 0.0;
 	nsigmas = 3.0;
@@ -303,15 +335,23 @@
 	Parameter* par = (Parameter*)param;
 	double value = (*par)();
-
-	if (npts<2) {
-		weights.insert(weights.end(), WeightPoint(value, 1.0));
-	} else {
-		for(int i=0; i<npts; i++) {
+	double sig;
+	if (npts<2) {
+		weights.insert(weights.end(), WeightPoint(value, 1.0));
+	} else {
+		for(int i=0; i<npts; i++) {
+			if ((*par).has_min==false){
+				// width = sigma for angles
+				sig = width;
+			}
+			else{
+				//width = polydispersity (=sigma/value) for length
+				sig = width * value;
+			}
 			// We cover n(nsigmas) times sigmas on each side of the mean
-			double val = value + width * (2.0*nsigmas*double(i)/double(npts-1) - nsigmas);
+			double val = value + sig * (2.0*nsigmas*double(i)/double(npts-1) - nsigmas);
 
 			if ( ((*par).has_min==false || val>(*par).min)
 			  && ((*par).has_max==false || val<(*par).max)  ) {
-				double _w = schulz_weight(value, width, val);
+				double _w = schulz_weight(value, sig, val);
 				weights.insert(weights.end(), WeightPoint(val, _w));
 			}
@@ -346,4 +386,5 @@
 		for(int i=0; i<npts; i++) {
 			double val = _values[i]; //+ value;  //ToDo: Talk to Paul and put back the 'value'.
+
 			if ( ((*par).has_min==false || val>(*par).min)
 			  && ((*par).has_max==false || val<(*par).max)  )
