Index: sansmodels/src/sans/models/BaseComponent.py
===================================================================
--- sansmodels/src/sans/models/BaseComponent.py	(revision c9636f7de6fe28781d52b93f5c1323e695a97e27)
+++ sansmodels/src/sans/models/BaseComponent.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -33,4 +33,6 @@
         #list of parameter that can be fitted
         self.fixed= []
+        ## parameters with orientation
+        self.orientation_params =[]
            
     def __str__(self):
Index: sansmodels/src/sans/models/CoreShellCylinderModel.py
===================================================================
--- sansmodels/src/sans/models/CoreShellCylinderModel.py	(revision 836fe6e73d15cf2f32c74bbf3b953b37d776f2ff)
+++ sansmodels/src/sans/models/CoreShellCylinderModel.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -89,4 +89,7 @@
 		## fittable parameters
         self.fixed=['axis_phi.width', 'axis_theta.width', 'length.width', 'radius.width', 'thickness_width']
+        
+        ## parameters with orientation
+        self.orientation_params =['axis_phi', 'axis_theta', 'axis_phi.width', 'axis_theta.width']
    
     def clone(self):
Index: sansmodels/src/sans/models/CoreShellModel.py
===================================================================
--- sansmodels/src/sans/models/CoreShellModel.py	(revision 369e492eff727618a57722d4e88f17e42770d4b0)
+++ sansmodels/src/sans/models/CoreShellModel.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -17,5 +17,5 @@
 
 	WARNING: THIS FILE WAS GENERATED BY WRAPPERGENERATOR.PY
- 	         DO NOT MODIFY THIS FILE, MODIFY c:\ECLPS\workspace\trunk\sansmodels\src\sans\models\c_extensions\core_shell.h
+ 	         DO NOT MODIFY THIS FILE, MODIFY ..\c_extensions\core_shell.h
  	         AND RE-RUN THE GENERATOR SCRIPT
 
@@ -28,5 +28,5 @@
 class CoreShellModel(CCoreShellModel, BaseComponent):
     """ Class that evaluates a CoreShellModel model. 
-    	This file was auto-generated from c:\ECLPS\workspace\trunk\sansmodels\src\sans\models\c_extensions\core_shell.h.
+    	This file was auto-generated from ..\c_extensions\core_shell.h.
     	Refer to that file and the structure it contains
     	for details of the model.
@@ -75,4 +75,7 @@
 		## fittable parameters
         self.fixed=['thickness.width', 'radius.width']
+        
+        ## parameters with orientation
+        self.orientation_params =[]
    
     def clone(self):
Index: sansmodels/src/sans/models/CylinderModel.py
===================================================================
--- sansmodels/src/sans/models/CylinderModel.py	(revision 836fe6e73d15cf2f32c74bbf3b953b37d776f2ff)
+++ sansmodels/src/sans/models/CylinderModel.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -75,4 +75,7 @@
 		## fittable parameters
         self.fixed=['cyl_phi.width', 'cyl_theta.width', 'length.width', 'radius.width']
+        
+        ## parameters with orientation
+        self.orientation_params =['cyl_phi', 'cyl_theta', 'cyl_phi.width', 'cyl_theta.width']
    
     def clone(self):
Index: sansmodels/src/sans/models/EllipsoidModel.py
===================================================================
--- sansmodels/src/sans/models/EllipsoidModel.py	(revision da3dae3d5a4e99fc052375bfeef51168d5ea25dd)
+++ sansmodels/src/sans/models/EllipsoidModel.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -73,5 +73,8 @@
 
 		## fittable parameters
-        self.fixed=['axis_phi.width', 'axis_theta.width', 'radius_a.width', 'radius_b.width', 'length.width', 'r_minor.width', 'r_ratio.width']
+        self.fixed=['axis_phi.width', 'axis_theta.width', 'radius_a.width', 'radius_b.width', 'length.width', 'r_minor.width']
+        
+        ## parameters with orientation
+        self.orientation_params =['axis_phi.width', 'axis_theta.width', 'axis_phi', 'axis_theta']
    
     def clone(self):
Index: sansmodels/src/sans/models/EllipticalCylinderModel.py
===================================================================
--- sansmodels/src/sans/models/EllipticalCylinderModel.py	(revision da3dae3d5a4e99fc052375bfeef51168d5ea25dd)
+++ sansmodels/src/sans/models/EllipticalCylinderModel.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -69,5 +69,8 @@
 
 		## fittable parameters
-        self.fixed=['cyl_phi.width', 'cyl_theta.width', 'cyl_psi.width', 'length.width', 'r_minor.width', 'r_ratio.width']
+        self.fixed=['cyl_phi.width', 'cyl_theta.width', 'cyl_psi.width', 'length.width', 'r_minor.width', 'r_ratio.width </text>']
+        
+        ## parameters with orientation
+        self.orientation_params =['cyl_phi', 'cyl_theta', 'cyl_psi', 'cyl_phi.width', 'cyl_theta.width', 'cyl_psi.width']
    
     def clone(self):
Index: sansmodels/src/sans/models/SphereModel.py
===================================================================
--- sansmodels/src/sans/models/SphereModel.py	(revision 836fe6e73d15cf2f32c74bbf3b953b37d776f2ff)
+++ sansmodels/src/sans/models/SphereModel.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -66,4 +66,7 @@
 		## fittable parameters
         self.fixed=['radius.width']
+        
+        ## parameters with orientation
+        self.orientation_params =[]
    
     def clone(self):
Index: sansmodels/src/sans/models/c_extensions/Hardsphere.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/Hardsphere.h	(revision 25579e8c451417db52ac6ed70a3c116d52d8717d)
+++ sansmodels/src/sans/models/c_extensions/Hardsphere.h	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -21,4 +21,6 @@
  //	 </text>
  //[FIXED]= radius.width  
+
+
 typedef struct {
     /// Radius of hardsphere [A]
Index: sansmodels/src/sans/models/c_extensions/SquareWell.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/SquareWell.h	(revision 25579e8c451417db52ac6ed70a3c116d52d8717d)
+++ sansmodels/src/sans/models/c_extensions/SquareWell.h	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -22,4 +22,5 @@
 //   			</text>
 //   [FIXED]= radius.width 
+//[ORIENTATION_PARAMS]= <text> </text>
 
 
Index: sansmodels/src/sans/models/c_extensions/core_shell.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/core_shell.h	(revision 25579e8c451417db52ac6ed70a3c116d52d8717d)
+++ sansmodels/src/sans/models/c_extensions/core_shell.h	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -19,4 +19,6 @@
  //				</text>
  //[FIXED]= <text> thickness.width;radius.width</text>
+
+
 typedef struct {
     /// Scale factor
Index: sansmodels/src/sans/models/c_extensions/core_shell_cylinder.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/core_shell_cylinder.h	(revision 836fe6e73d15cf2f32c74bbf3b953b37d776f2ff)
+++ sansmodels/src/sans/models/c_extensions/core_shell_cylinder.h	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -27,4 +27,6 @@
  //					</text>
  //[FIXED]= <text> axis_phi.width; axis_theta.width; length.width;radius.width; thickness_width</text>
+ //[ORIENTATION_PARAMS]= axis_phi; axis_theta;axis_phi.width; axis_theta.width 
+
 
 typedef struct {
Index: sansmodels/src/sans/models/c_extensions/cylinder.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/cylinder.h	(revision da3dae3d5a4e99fc052375bfeef51168d5ea25dd)
+++ sansmodels/src/sans/models/c_extensions/cylinder.h	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -15,8 +15,8 @@
 						sin(alpha)*dalpha+ bkg
 					</text>
-	[FIXED]= <text>
-				cyl_phi.width; cyl_theta.width; length.width;radius.width
-			</text>
+	[FIXED]= <text>cyl_phi.width; cyl_theta.width; length.width;radius.width</text>
+	[ORIENTATION_PARAMS]= <text>cyl_phi; cyl_theta; cyl_phi.width; cyl_theta.width</text>
 	
+
  **/
 typedef struct {
Index: sansmodels/src/sans/models/c_extensions/ellipsoid.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/ellipsoid.h	(revision da3dae3d5a4e99fc052375bfeef51168d5ea25dd)
+++ sansmodels/src/sans/models/c_extensions/ellipsoid.h	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -22,4 +22,7 @@
  //radius_b.width; length.width; r_minor.width
  //, r_ratio.width</text>
+ //[ORIENTATION_PARAMS]=  axis_phi.width; axis_theta.width;axis_phi; axis_theta
+
+
 typedef struct {
     /// Scale factor
Index: sansmodels/src/sans/models/c_extensions/elliptical_cylinder.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/elliptical_cylinder.h	(revision da3dae3d5a4e99fc052375bfeef51168d5ea25dd)
+++ sansmodels/src/sans/models/c_extensions/elliptical_cylinder.h	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -8,5 +8,8 @@
  * [FIXED]= <text> cyl_phi.width;
  * cyl_theta.width; cyl_psi.width; length.width; r_minor.width; r_ratio.width </text>
+ * [ORIENTATION_PARAMS]= cyl_phi; cyl_theta; cyl_psi;  cyl_phi.width; cyl_theta.width; cyl_psi.width 
  * */
+
+
 typedef struct {
     /// Scale factor
Index: sansmodels/src/sans/models/c_extensions/sphere.h
===================================================================
--- sansmodels/src/sans/models/c_extensions/sphere.h	(revision da3dae3d5a4e99fc052375bfeef51168d5ea25dd)
+++ sansmodels/src/sans/models/c_extensions/sphere.h	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -16,4 +16,5 @@
  //				</text>
  //[FIXED]=  radius.width
+ //[ORIENTATION_PARAMS]= <text> </text>
  
 typedef struct {
Index: sansmodels/src/sans/models/c_models/WrapperGenerator.py
===================================================================
--- sansmodels/src/sans/models/c_models/WrapperGenerator.py	(revision da3dae3d5a4e99fc052375bfeef51168d5ea25dd)
+++ sansmodels/src/sans/models/c_models/WrapperGenerator.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -4,54 +4,5 @@
 
 import os, sys,re
-def split_list(separator, mylist, n=0):
-    """
-        @return a list of string without white space of separator
-        @param separator: the string to remove
-    """
-    list=[]
-    for item in mylist:
-        if re.search( separator,item)!=None:
-            if n >0:
-                word =re.split(separator,item,int(n))
-            else:
-                word =re.split( separator,item)
-            for new_item in word: 
-                if new_item.lstrip().rstrip() !='':
-                    list.append(new_item.lstrip().rstrip())
-    return list
-def split_text(separator, string1, n=0):
-    """
-        @return a list of string without white space of separator
-        @param separator: the string to remove
-    """
-    list=[]
-    if re.search( separator,string1)!=None:
-        if n >0:
-            word =re.split(separator,string1,int(n))
-        else:
-            word =re.split(separator,string1)
-        for item in word: 
-            if item.lstrip().rstrip() !='':
-                list.append(item.lstrip().rstrip())
-    return list
-def look_for_tag( string1,begin, end=None ):
-    """
-        @note: this method  remove the begin and end tags given by the user
-        from the string .
-        @param begin: the initial tag
-        @param end: the final tag
-        @param string: the string to check
-        @return: begin_flag==True if begin was found,
-         end_flag==if end was found else return false, false
-         
-    """
-    begin_flag= False
-    end_flag= False
-    if  re.search( begin,string1)!=None:
-        begin_flag= True
-    if end !=None:
-        if  re.search(end,string1)!=None:
-            end_flag= True
-    return begin_flag, end_flag
+import lineparser
 
 class WrapperGenerator:
@@ -133,13 +84,17 @@
         # paramaters for fittable
         self.fixed= []
+        ## parameters with orientation
+        self.orientation_params =[]
+        
         
     def __repr__(self):
         """ Simple output for printing """
         
-        rep  = "Python class: %s\n" % self.pythonClass
-        rep += "  struc name: %s\n" % self.structName
-        rep += "  params:     %s\n" % self.params
-        rep += "  description:     %s\n" % self.description
-        rep += "  fittable paramaters list %s\n"% self.fixed
+        rep  = "\n Python class: %s\n\n" % self.pythonClass
+        rep += "  struc name: %s\n\n" % self.structName
+        rep += "  params:     %s\n\n" % self.params
+        rep += "  description:    %s\n\n" % self.description
+        rep += "  Fittable parameters:     %s\n\n"% self.fixed
+        rep += "  Orientation parameters:  %s\n\n"% self.orientation_params
         return rep
         
@@ -160,6 +115,5 @@
         self.details  = "## Parameter details [units, min, max]\n"
         self.details += "        self.details = {}\n"
-         # Catch Description
-        key = "[FIXED]"
+        
         #open item in this case Fixed
         text='text'
@@ -168,117 +122,22 @@
         text='TexT'
         key3="</%s>"%text.lower()
-        temp=""
-        # flag to found key
-        find_fixed= False
-        find_key2=False
-        find_key3=False
-        
-        for line in lines:
-            if line.count(key)>0 :#[FIXED]= .....
-                try:
-                    find_fixed= True
-                    index = line.index(key)
-                    toks  = line[index:].split("=",1 )
-                    temp  = toks[1].lstrip().rstrip()
-                    find_key2, find_key3=look_for_tag( string1=temp,begin=key2, end=key3 )
-                    if find_key2 and find_key3:
-                        #print"Found both:find_key2, find_key3", find_key2, find_key3
-                        temp1=[]
-                        temp2=[]
-                        temp3=[]
-                        temp4=[]
-                        temp1=split_text(separator=key2, string1=temp)
-                        temp2=split_list(separator=key3, mylist=temp1)
-                        temp3=split_list(separator=';', mylist=temp2)
-                        temp4=split_list(separator=',', mylist=temp3)
-                        self.fixed= temp3 + temp4
-                        break
-                        
-                    elif find_key2 and not find_key3:
-                        #print"Find  find_key2 not find_key3", find_key2, find_key3
-                        temp1=[]
-                        temp2=[]
-                        temp3=[]
-                        temp4=[]
-                        temp1=split_text(separator=key2, string1=temp)
-                        temp3=split_list(separator=';', mylist=temp1)
-                        temp4=split_list(separator=',', mylist=temp3)
-                        #print "found only key2 , temp4", temp3,temp4
-                        if len(temp3+ temp4)==0:# [FIXED]=  only one param
-                            self.fixed+= temp1
-                        self.fixed+=temp3+temp4 #
-                    elif not (find_key2 and find_key3) :
-                        #print"Find nothing find_key2 not find_key3", find_key2, find_key3
-                        temp3=[]
-                        temp4=[]
-                        if look_for_tag( string1=temp,begin=";")[0]:# split ";" first
-                            temp3=split_text(separator=';',string1=temp)
-                            temp4=split_list(separator=',', mylist=temp3)
-                        else:
-                            temp3=split_text(separator=',',string1=temp)# slip "," first
-                            temp4=split_list(separator=';', mylist=temp3)
-                        if len(temp3+ temp4)==0:# [FIXED]=  only one param
-                            self.fixed= [temp]
-                        self.fixed+=temp3+temp4 #
-                        break
-                except:
-                    raise ValueError, "Could not parse file %s" % self.file
-            
-            elif find_fixed:
-                #looking only for key3
-                if not find_key2:
-                    raise ValueError, "Could not parse file %s" % self.file
-                find_key3=look_for_tag( string1=line,begin=key3)[0]# split "</text>" first
-                #print "find_key3",find_key3,line,key3
-                if find_key3:
-                    temp1=[]
-                    temp2=[]
-                    temp3=[]
-                    temp4=[]
-                    temp5=[]
-                   
-                    temp1=split_text(separator=key3, string1=line)
-                    temp2=split_list(separator='//',mylist=temp1)
-                    temp5=split_list(separator="\*",mylist=temp1)
-                    
-                    if len(temp5)>0:
-                        temp3=split_list(separator=';',mylist=temp5)
-                        temp4=split_list(separator=',', mylist=temp5)
-                    elif len(temp2)>0:
-                        temp3=split_list(separator=';',mylist=temp2)
-                        temp4=split_list(separator=',', mylist=temp2)
-                    else:
-                        temp3=split_list(separator=';',mylist=temp1)
-                        temp4=split_list(separator=',', mylist=temp1)
-                    
-                    if len(temp3+ temp4)==0:# [FIXED]=  only one param
-                        self.fixed+= temp1
-                    self.fixed+=temp3+temp4 #   
-                    break 
-                else:
-                    temp2=split_text(separator='//',string1=line)
-                    temp5=split_text(separator="\*",string1=line)
-                    if len(temp5)>0:
-                        temp3=split_list(separator=';',mylist=temp5)
-                        temp4=split_list(separator=',', mylist=temp5)
-                    elif len(temp2)>0:
-                        temp3=split_list(separator=';',mylist=temp2)
-                        temp4=split_list(separator=',', mylist=temp2)
-                    else:
-                        if look_for_tag( string1=line,begin=";")[0]:# split ";" first
-                            temp3=split_text(separator=';',string1=line)
-                            temp4=split_list(separator=',', mylist=temp3)
-                        else:
-                            temp3=split_text(separator=',',string1=line)# slip "," first
-                            temp4=split_list(separator=';', mylist=temp3)
-                    if len(temp3+ temp4)==0:# [FIXED]=  only one param
-                        self.fixed= [line.lstrip().rstrip()]
-                    self.fixed+=temp3+temp4 #
-                    
-                
-                    
-        # Catch Description
+        
+        ## Catch fixed parameters
+        key = "[FIXED]"
+        try:
+            self.fixed= lineparser.readhelper(lines,key, key2,key3, file= self.file)
+        except:
+           raise   
+        ## Catch parameters with orientation
+        key = "[ORIENTATION_PARAMS]"    
+        try:
+            self.orientation_params = lineparser.readhelper( lines,key, 
+                                                    key2,key3, file= self.file)
+        except:
+           raise 
+        ## Catch Description
         key = "[DESCRIPTION]"
-        find_description= 0
+        
+        find_description = False
         temp=""
         for line in lines:
@@ -286,5 +145,5 @@
                 
                 try:
-                    find_description= 1
+                    find_description= True
                     index = line.index(key)
                     toks = line[index:].split("=",1 )
@@ -293,6 +152,5 @@
                     key2="<%s>"%text.lower()
                     if re.match(key2,temp)!=None:
-                        #index2 = line.index(key2)
-                        #temp = temp[index2:]
+    
                         toks2=temp.split(key2,1)
                         self.description=toks2[1]
@@ -303,15 +161,13 @@
                             self.description=temp[0]
                             break
-                        #print self.description
+                      
                     else:
                         self.description=temp
                         break
                 except:
-                     raise
                      raise ValueError, "Could not parse file %s" % self.file
-            elif find_description==1:
+            elif find_description:
                 text='text'
                 key2="</%s>"%text.lower()
-                #print "second line",line,key2,re.search(key2,line)
                 if re.search(key2,line)!=None:
                     tok=line.split(key2,1)
@@ -320,7 +176,4 @@
                     break
                 else:
-                    #if re.search("*",line)!=None:
-                    #    temp=line.split("*",1)
-                    #    self.description+='\n'+temp[1].lstrip().rstrip()
                     if re.search("//",line)!=None:
                         temp=line.split("//",1)
@@ -567,4 +420,8 @@
             newline = self.replaceToken(newline, 
                                         "[FIXED]",str(self.fixed))
+            ## parameters with orientation
+       
+            newline = self.replaceToken(newline, 
+                               "[ORIENTATION_PARAMS]",str(self.orientation_params))
            
             # Write new line to the wrapper .c file
Index: sansmodels/src/sans/models/c_models/lineparser.py
===================================================================
--- sansmodels/src/sans/models/c_models/lineparser.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
+++ sansmodels/src/sans/models/c_models/lineparser.py	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -0,0 +1,219 @@
+#!/usr/bin/env python
+""" WrapperGenerator class to generate model code automatically.
+"""
+
+import os, sys,re
+def split_list(separator, mylist, n=0):
+    """
+        @return a list of string without white space of separator
+        @param separator: the string to remove
+    """
+    list=[]
+    for item in mylist:
+        if re.search( separator,item)!=None:
+            if n >0:
+                word =re.split(separator,item,int(n))
+            else:
+                word =re.split( separator,item)
+            for new_item in word: 
+                if new_item.lstrip().rstrip() !='':
+                    list.append(new_item.lstrip().rstrip())
+    return list
+def split_text(separator, string1, n=0):
+    """
+        @return a list of string without white space of separator
+        @param separator: the string to remove
+    """
+    list=[]
+    if re.search( separator,string1)!=None:
+        if n >0:
+            word =re.split(separator,string1,int(n))
+        else:
+            word =re.split(separator,string1)
+        for item in word: 
+            if item.lstrip().rstrip() !='':
+                list.append(item.lstrip().rstrip())
+    return list
+def look_for_tag( string1,begin, end=None ):
+    """
+        @note: this method  remove the begin and end tags given by the user
+        from the string .
+        @param begin: the initial tag
+        @param end: the final tag
+        @param string: the string to check
+        @return: begin_flag==True if begin was found,
+         end_flag==if end was found else return false, false
+         
+    """
+    begin_flag= False
+    end_flag= False
+    if  re.search( begin,string1)!=None:
+        begin_flag= True
+    if end !=None:
+        if  re.search(end,string1)!=None:
+            end_flag= True
+    return begin_flag, end_flag
+
+
+  
+def readhelper(lines,key, key2,key3 , file):
+  
+    temp=""
+    # flag to found key
+    find_fixed= False
+    find_key2=False
+    find_key3=False
+    listtofill=[]
+    for line in lines:
+        if line.count(key.lstrip().rstrip())>0 :#[FIXED]= .....
+            try:
+                #print "found key", key
+                find_fixed= True
+                index = line.index(key)
+                toks  = line[index:].split("=",1 )
+                temp  = toks[1].lstrip().rstrip()
+                find_key2, find_key3=look_for_tag( string1=temp,begin=key2, end=key3 )
+                #print "looking for endpoints",find_key2, find_key3
+                ##[key]=<text>param </text>
+                if find_key2 and find_key3:
+                    
+                    temp1=[]
+                    temp2=[]
+                    temp3=[]
+                    temp4=[]
+                    temp1=split_text(separator=key2, string1=temp)
+                    temp2=split_list(separator=key3, mylist=temp1)
+                    temp3=split_list(separator=';', mylist=temp2)
+                    temp4=split_list(separator=',', mylist=temp3)
+                    listtofill= temp3 + temp4
+                    #print "endpoints found",listtofill
+                    return listtofill
+                    
+                    
+                elif find_key2 and not find_key3:
+                    ## [key]= key2(<text>)
+                    ##        ....
+                    ##        key3(<text>)
+                    temp1=[]
+                    temp2=[]
+                    temp3=[]
+                    temp4=[]
+                    ## remove key2= <text>
+                    temp1=split_text(separator=key2, string1=temp)
+                    
+                    ## split ";" first
+                    temp3=split_list(separator=';', mylist=temp1)
+                    temp4=split_list(separator=',', mylist=temp3)
+            
+                    if len(temp3+ temp4)==0:
+                        # [FIXED]=  only one param
+                        listtofill+= temp1
+                    listtofill += temp3+temp4 
+               
+                elif not find_key2 and not find_key3 :
+                    ## [key]= param done looking
+                    temp3=[]
+                    temp4=[]
+                    if look_for_tag( string1=temp,begin=";")[0]:
+                        ## split ";" first
+                        temp3=split_text(separator=';',string1=temp)
+                        temp4=split_list(separator=',', mylist=temp3)
+                    else:
+                        ## slip "," first
+                        temp3=split_text(separator=',',string1=temp)
+                        temp4=split_list(separator=';', mylist=temp3)
+                    if len(temp3+ temp4)==0:
+                        ## [FIXED]=  only one param
+                        listtofill= [temp.lstrip().rstrip()]
+                        
+                    listtofill += temp3+temp4
+                    return listtofill
+            except:
+                raise ValueError, "Could not parse file %s" % file
+        
+        elif find_fixed :
+            if not find_key2:
+                raise ValueError, "Could not parse file %s" % file
+            #print "find_key3",find_key3,line,key3
+            if find_key3:
+                #print "At the ned of the file----->"
+                temp1=[]
+                temp2=[]
+                temp3=[]
+                temp4=[]
+                temp5=[]
+               
+                temp1=split_text(separator=key3, string1=line)
+                temp2=split_list(separator='//',mylist=temp1)
+                temp5=split_list(separator="\*",mylist=temp1)
+                
+                if len(temp5)>0:
+                    temp3=split_list(separator=';',mylist=temp5)
+                    temp4=split_list(separator=',', mylist=temp5)
+                elif len(temp2)>0:
+                    temp3=split_list(separator=';',mylist=temp2)
+                    temp4=split_list(separator=',', mylist=temp2)
+                else:
+                    temp3=split_list(separator=';',mylist=temp1)
+                    temp4=split_list(separator=',', mylist=temp1)
+                
+                if len(temp3+ temp4)==0:# [FIXED]=  only one param
+                    listtofill+= temp1
+                listtofill+=temp3+temp4 #   
+                break
+            
+            else:
+                temp2=split_text(separator='//',string1=line)
+                temp5=split_text(separator="\*",string1=line)
+                if len(temp5)>0:
+                    temp3=split_list(separator=';',mylist=temp5)
+                    temp4=split_list(separator=',', mylist=temp5)
+                elif len(temp2)>0:
+                    temp3=split_list(separator=';',mylist=temp2)
+                    temp4=split_list(separator=',', mylist=temp2)
+                else:
+                    if look_for_tag( string1=line,begin=";")[0]:# split ";" first
+                        temp3=split_text(separator=';',string1=line)
+                        temp4=split_list(separator=',', mylist=temp3)
+                    else:
+                        temp3=split_text(separator=',',string1=line)# slip "," first
+                        temp4=split_list(separator=';', mylist=temp3)
+                if len(temp3+ temp4)==0:# [FIXED]=  only one param
+                    listtofill= [line.lstrip().rstrip()]
+                listtofill+=temp3+temp4 #
+                break
+    return listtofill
+   
+# main
+if __name__ == '__main__':
+    
+    # Read file
+    name= "sphere.h"
+    f = open("..\c_extensions\core_shell.h",'r')
+    buf = f.read()
+  
+    lines = buf.split('\n')
+  
+    ## Catch Fixed parameters
+    key = "[FIXED]"
+    #open item in this case Fixed
+    text='text'
+    key2="<%s>"%text.lower()
+    # close an item in this case fixed
+    text='TexT'
+    key3="</%s>"%text.lower()
+    listto=[]
+   
+    listto= readhelper(lines, key, key2,key3, file=name)
+    print "fixed parameters\n ",listto
+    print 
+    
+   
+    key0="[ORIENTATION_PARAMS]"
+   
+    listto=[]
+    listto= readhelper(lines,key0, key2,key3, file=name)
+    print "orientation parameters\n ",listto
+    print 
+    f.close()
+# End of file        
Index: sansmodels/src/sans/models/c_models/modelTemplate.txt
===================================================================
--- sansmodels/src/sans/models/c_models/modelTemplate.txt	(revision 836fe6e73d15cf2f32c74bbf3b953b37d776f2ff)
+++ sansmodels/src/sans/models/c_models/modelTemplate.txt	(revision 25a608f5e19bd180280be5c566de99df08fb9e8f)
@@ -49,4 +49,7 @@
 		## fittable parameters
         self.fixed=[FIXED]
+        
+        ## parameters with orientation
+        self.orientation_params =[ORIENTATION_PARAMS]
    
     def clone(self):
