Index: sansmodels/src/sans/models/c_extensions/flexible_cylinder.c
===================================================================
--- sansmodels/src/sans/models/c_extensions/flexible_cylinder.c	(revision 50686972861f70ebff2c64a50118cfb6b905253a)
+++ sansmodels/src/sans/models/c_extensions/flexible_cylinder.c	(revision ea070754dad7f17087a33bfe6bf1a95174d93677)
@@ -19,5 +19,5 @@
 double flexible_cylinder_analytical_1D(FlexibleCylinderParameters *pars, double q) {
 	double dp[6];
-	
+
 	// Fill paramater array
 	dp[0] = pars->scale;
@@ -29,5 +29,5 @@
 
 	// Call library function to evaluate model
-	return FlexExclVolCyl(dp, q);	
+	return FlexExclVolCyl(dp, q);
 }
 /**
@@ -40,6 +40,6 @@
 	double q;
 	q = sqrt(qx*qx+qy*qy);
-    return flexible_cylinder_analytical_2D_scaled(pars, q, qx/q, qy/q);
-} 
+    return flexible_cylinder_analytical_1D(pars, q);
+}
 
 
@@ -52,67 +52,6 @@
  */
 double flexible_cylinder_analytical_2D(FlexibleCylinderParameters *pars, double q, double phi) {
-    return flexible_cylinder_analytical_2D_scaled(pars, q, cos(phi), sin(phi));
-} 
-        
-/**
- * Function to evaluate 2D scattering function
- * @param pars: parameters of the flexible cylinder
- * @param q: q-value
- * @param q_x: q_x / q
- * @param q_y: q_y / q
- * @return: function value
- */
-double flexible_cylinder_analytical_2D_scaled(FlexibleCylinderParameters *pars, double q, double q_x, double q_y) {
-	double cyl_x, cyl_y, cyl_z;
-	double q_z;
-	double alpha, vol, cos_val;
-	double answer;
-	
-	
+    return flexible_cylinder_analytical_1D(pars, q);
+}
 
-    // parallelepiped orientation
-    cyl_x = sin(pars->axis_theta) * cos(pars->axis_phi);
-    cyl_y = sin(pars->axis_theta) * sin(pars->axis_phi);
-    cyl_z = cos(pars->axis_theta);
-     
-    // q vector
-    q_z = 0;
-        
-    // Compute the angle btw vector q and the
-    // axis of the parallelepiped
-    cos_val = cyl_x*q_x + cyl_y*q_y + cyl_z*q_z;
-    
-    // The following test should always pass
-    if (fabs(cos_val)>1.0) {
-    	printf("parallel_ana_2D: Unexpected error: cos(alpha)>1\n");
-     	return 0;
-    }
-    
-    // Note: cos(alpha) = 0 and 1 will get an
-    // undefined value from PPKernel
-	alpha = acos( cos_val );
 
-	// Call the IGOR library function to get the kernel
-	answer = CylKernel(q, pars->radius, pars->length/2.0, alpha) / sin(alpha);
-	
-	// Multiply by contrast^2
-	answer *= pars->contrast*pars->contrast;
-	
-	//normalize by cylinder volume
-	//NOTE that for this (Fournet) definition of the integral, one must MULTIPLY by Vparallel
-    vol = acos(-1.0) * pars->radius * pars->radius * pars->length;
-	answer *= vol;
-	
-	//convert to [cm-1]
-	answer *= 1.0e8;
-	
-	//Scale
-	answer *= pars->scale;
-	
-	// add in the background
-	answer += pars->background;
-	
-	return answer;
-}
-    
-
Index: sansmodels/src/sans/models/c_extensions/flexible_cylinder.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/flexible_cylinder.h	(revision 50686972861f70ebff2c64a50118cfb6b905253a)
+++ sansmodels/src/sans/models/c_extensions/flexible_cylinder.h	(revision ea070754dad7f17087a33bfe6bf1a95174d93677)
@@ -7,10 +7,12 @@
 /** Structure definition for Flexible cylinder parameters
  * [PYTHONCLASS] = FlexibleCylinderModel
- * [DISP_PARAMS] = length, radius, axis_theta, axis_phi
-   [DESCRIPTION] = <text> Note : scale and contrast are both multiplicative factors in the model and are perfectly
-			correlated. One or both of these parameters must be held fixed during model fitting.
+ * [DISP_PARAMS] = length, kuhn_length, radius
+   [DESCRIPTION] = <text> Note : 'scale' and 'contrast' are both multiplicative factors in the
+		model and are perfectly correlated. One or
+		both of these parameters must be held fixed
+		during model fitting.
 		</text>
-	[FIXED]= <text>length.width; radius.width; axis_theta.width; axis_phi.width</text>
-	[ORIENTATION_PARAMS]= <text>axis_phi; axis_theta; axis_phi.width; axis_theta.width</text>
+	[FIXED]= <text>length.width; radius.width; , kuhn_length.width</text>
+	[ORIENTATION_PARAMS]= <text></text>
 
 
@@ -32,13 +34,7 @@
     //  [DEFAULT]=contrast=5.3e-6 [1/A²]
     double contrast;
-	/// Incoherent Background [1/cm] 
+	/// Incoherent Background [1/cm]
 	//  [DEFAULT]=background=0.0001 [1/cm]
 	double background;
-    /// Orientation of the flexible cylinder axis w/respect incoming beam [rad]
-    //  [DEFAULT]=axis_theta=1.0 [rad]
-    double axis_theta;
-    /// Orientation of the flexible cylinder in the plane of the detector [rad]
-    //  [DEFAULT]=axis_phi=1.0 [rad]
-    double axis_phi;
 
 
@@ -53,5 +49,4 @@
 double flexible_cylinder_analytical_2D(FlexibleCylinderParameters *pars, double q, double phi);
 double flexible_cylinder_analytical_2DXY(FlexibleCylinderParameters *pars, double qx, double qy);
-double flexible_cylinder_analytical_2D_scaled(FlexibleCylinderParameters *pars, double q, double q_x, double q_y);
 
 #endif
Index: sansmodels/src/sans/models/c_models/CFlexibleCylinderModel.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/CFlexibleCylinderModel.cpp	(revision 50686972861f70ebff2c64a50118cfb6b905253a)
+++ sansmodels/src/sans/models/c_models/CFlexibleCylinderModel.cpp	(revision ea070754dad7f17087a33bfe6bf1a95174d93677)
@@ -84,7 +84,5 @@
         // Initialize parameter dictionary
         PyDict_SetItemString(self->params,"scale",Py_BuildValue("d",1.000000));
-        PyDict_SetItemString(self->params,"axis_theta",Py_BuildValue("d",1.000000));
         PyDict_SetItemString(self->params,"length",Py_BuildValue("d",1000.000000));
-        PyDict_SetItemString(self->params,"axis_phi",Py_BuildValue("d",1.000000));
         PyDict_SetItemString(self->params,"radius",Py_BuildValue("d",20.000000));
         PyDict_SetItemString(self->params,"background",Py_BuildValue("d",0.000100));
@@ -98,12 +96,9 @@
         PyDict_SetItemString(self->dispersion, "length", disp_dict);
         disp_dict = PyDict_New();
+        self->model->kuhn_length.dispersion->accept_as_source(visitor, self->model->kuhn_length.dispersion, disp_dict);
+        PyDict_SetItemString(self->dispersion, "kuhn_length", disp_dict);
+        disp_dict = PyDict_New();
         self->model->radius.dispersion->accept_as_source(visitor, self->model->radius.dispersion, disp_dict);
         PyDict_SetItemString(self->dispersion, "radius", disp_dict);
-        disp_dict = PyDict_New();
-        self->model->axis_theta.dispersion->accept_as_source(visitor, self->model->axis_theta.dispersion, disp_dict);
-        PyDict_SetItemString(self->dispersion, "axis_theta", disp_dict);
-        disp_dict = PyDict_New();
-        self->model->axis_phi.dispersion->accept_as_source(visitor, self->model->axis_phi.dispersion, disp_dict);
-        PyDict_SetItemString(self->dispersion, "axis_phi", disp_dict);
 
 
@@ -159,7 +154,5 @@
 	    // Reader parameter dictionary
     self->model->scale = PyFloat_AsDouble( PyDict_GetItemString(self->params, "scale") );
-    self->model->axis_theta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "axis_theta") );
     self->model->length = PyFloat_AsDouble( PyDict_GetItemString(self->params, "length") );
-    self->model->axis_phi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "axis_phi") );
     self->model->radius = PyFloat_AsDouble( PyDict_GetItemString(self->params, "radius") );
     self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") );
@@ -171,10 +164,8 @@
     disp_dict = PyDict_GetItemString(self->dispersion, "length");
     self->model->length.dispersion->accept_as_destination(visitor, self->model->length.dispersion, disp_dict);
+    disp_dict = PyDict_GetItemString(self->dispersion, "kuhn_length");
+    self->model->kuhn_length.dispersion->accept_as_destination(visitor, self->model->kuhn_length.dispersion, disp_dict);
     disp_dict = PyDict_GetItemString(self->dispersion, "radius");
     self->model->radius.dispersion->accept_as_destination(visitor, self->model->radius.dispersion, disp_dict);
-    disp_dict = PyDict_GetItemString(self->dispersion, "axis_theta");
-    self->model->axis_theta.dispersion->accept_as_destination(visitor, self->model->axis_theta.dispersion, disp_dict);
-    disp_dict = PyDict_GetItemString(self->dispersion, "axis_phi");
-    self->model->axis_phi.dispersion->accept_as_destination(visitor, self->model->axis_phi.dispersion, disp_dict);
 
 	
@@ -229,7 +220,5 @@
 	    // Reader parameter dictionary
     self->model->scale = PyFloat_AsDouble( PyDict_GetItemString(self->params, "scale") );
-    self->model->axis_theta = PyFloat_AsDouble( PyDict_GetItemString(self->params, "axis_theta") );
     self->model->length = PyFloat_AsDouble( PyDict_GetItemString(self->params, "length") );
-    self->model->axis_phi = PyFloat_AsDouble( PyDict_GetItemString(self->params, "axis_phi") );
     self->model->radius = PyFloat_AsDouble( PyDict_GetItemString(self->params, "radius") );
     self->model->background = PyFloat_AsDouble( PyDict_GetItemString(self->params, "background") );
@@ -241,10 +230,8 @@
     disp_dict = PyDict_GetItemString(self->dispersion, "length");
     self->model->length.dispersion->accept_as_destination(visitor, self->model->length.dispersion, disp_dict);
+    disp_dict = PyDict_GetItemString(self->dispersion, "kuhn_length");
+    self->model->kuhn_length.dispersion->accept_as_destination(visitor, self->model->kuhn_length.dispersion, disp_dict);
     disp_dict = PyDict_GetItemString(self->dispersion, "radius");
     self->model->radius.dispersion->accept_as_destination(visitor, self->model->radius.dispersion, disp_dict);
-    disp_dict = PyDict_GetItemString(self->dispersion, "axis_theta");
-    self->model->axis_theta.dispersion->accept_as_destination(visitor, self->model->axis_theta.dispersion, disp_dict);
-    disp_dict = PyDict_GetItemString(self->dispersion, "axis_phi");
-    self->model->axis_phi.dispersion->accept_as_destination(visitor, self->model->axis_phi.dispersion, disp_dict);
 
 	
@@ -304,10 +291,8 @@
     if (!strcmp(par_name, "length")) {
         self->model->length.dispersion = dispersion;
+    } else    if (!strcmp(par_name, "kuhn_length")) {
+        self->model->kuhn_length.dispersion = dispersion;
     } else    if (!strcmp(par_name, "radius")) {
         self->model->radius.dispersion = dispersion;
-    } else    if (!strcmp(par_name, "axis_theta")) {
-        self->model->axis_theta.dispersion = dispersion;
-    } else    if (!strcmp(par_name, "axis_phi")) {
-        self->model->axis_phi.dispersion = dispersion;
     } else {
 	    PyErr_SetString(CFlexibleCylinderModelError,
Index: sansmodels/src/sans/models/c_models/flexiblecylinder.cpp
===================================================================
--- sansmodels/src/sans/models/c_models/flexiblecylinder.cpp	(revision 50686972861f70ebff2c64a50118cfb6b905253a)
+++ sansmodels/src/sans/models/c_models/flexiblecylinder.cpp	(revision ea070754dad7f17087a33bfe6bf1a95174d93677)
@@ -19,5 +19,5 @@
  *
  *	TODO: refactor so that we pull in the old sansmodels.c_extensions
- *	TODO: add 2d 
+ *	TODO: add 2d
  */
 
@@ -43,6 +43,4 @@
 	contrast   = Parameter(5.3e-6);
 	background = Parameter(0.0001);
-	axis_theta  = Parameter(0.0, true);
-	axis_phi    = Parameter(0.0, true);
 }
 
@@ -101,74 +99,6 @@
  */
 double FlexibleCylinderModel :: operator()(double qx, double qy) {
-	FlexibleCylinderParameters dp;
-	// Fill parameter array
-	dp.scale      = scale();
-	dp.length     = length();
-	dp.kuhn_length= kuhn_length();
-	dp.radius     = radius();
-	dp.contrast   = contrast();
-	dp.background = background();
-	dp.axis_theta  = axis_theta();
-	dp.axis_phi    = axis_phi();
-
-	// Get the dispersion points for the length
-	vector<WeightPoint> weights_length;
-	length.get_weights(weights_length);
-
-	// Get the dispersion points for the radius
-	vector<WeightPoint> weights_radius;
-	radius.get_weights(weights_radius);
-
-	// Get angular averaging for theta
-	vector<WeightPoint> weights_theta;
-	axis_theta.get_weights(weights_theta);
-
-	// Get angular averaging for phi
-	vector<WeightPoint> weights_phi;
-	axis_phi.get_weights(weights_phi);
-
-	// Perform the computation, with all weight points
-	double sum = 0.0;
-	double norm = 0.0;
-
-	// Loop over length weight points
-	for(int i=0; i< (int)weights_length.size(); i++) {
-		dp.length = weights_length[i].value;
-
-		// Loop over radius weight points
-		for(int j=0; j< (int)weights_radius.size(); j++) {
-			dp.radius = weights_radius[j].value;
-
-				// Average over theta distribution
-				for(int k=0; k< (int)weights_theta.size(); k++) {
-					dp.axis_theta = weights_theta[k].value;
-
-					// Average over phi distribution
-					for(int l=0; l <(int)weights_phi.size(); l++) {
-						dp.axis_phi = weights_phi[l].value;
-
-						double _ptvalue = weights_length[i].weight
-							* weights_radius[j].weight
-							* weights_theta[k].weight
-							* weights_phi[l].weight
-							* flexible_cylinder_analytical_2DXY(&dp, qx, qy);
-						if (weights_theta.size()>1) {
-							_ptvalue *= sin(weights_theta[k].value);
-						}
-						sum += _ptvalue;
-
-						norm += weights_length[i].weight
-							* weights_radius[j].weight
-							* weights_theta[k].weight
-							* weights_phi[l].weight;
-				}
-			}
-		}
-	}
-	// Averaging in theta needs an extra normalization
-	// factor to account for the sin(theta) term in the
-	// integration (see documentation).
-	if (weights_theta.size()>1) norm = norm / asin(1.0);
-	return sum/norm + background();
+	double q = sqrt(qx*qx + qy*qy);
+	return (*this).operator()(q);
 }
 
@@ -181,6 +111,6 @@
  */
 double FlexibleCylinderModel :: evaluate_rphi(double q, double phi) {
-	double qx = q*cos(phi);
-	double qy = q*sin(phi);
-	return (*this).operator()(qx, qy);
+	//double qx = q*cos(phi);
+	//double qy = q*sin(phi);
+	return (*this).operator()(q);
 }
