diff --git a/modules/gfx/src/impl/cartoon_renderer.cc b/modules/gfx/src/impl/cartoon_renderer.cc
index b1ec4dad4f0f0cbe5092a16a9f3e654c348b14fb..b9607fc84c98231e8546373afbec385f128a0a60 100644
--- a/modules/gfx/src/impl/cartoon_renderer.cc
+++ b/modules/gfx/src/impl/cartoon_renderer.cc
@@ -79,13 +79,13 @@ void CartoonRenderer::PrepareRendering(const BackboneTrace& subset,
       int type=0;
       const NodeEntry& entry=nl[i];
       if(!force_tube_) {
-	mol::ResidueHandle resh = entry.atom.GetResidue();
-	mol::SecStructure sst=resh.GetSecStructure();
-	if(sst.IsHelical()) {
-	  type=1;
-	} else if(sst.IsExtended()) {
-	  type=2;
-	}
+        mol::ResidueHandle resh = entry.atom.GetResidue();
+        mol::SecStructure sst=resh.GetSecStructure();
+        if(sst.IsHelical()) {
+          type=1;
+        } else if(sst.IsExtended()) {
+          type=2;
+        }
       }
       SplineEntry ee(entry.atom.GetPos(),entry.direction,
 		     entry.normal, entry.rad, 
@@ -137,7 +137,7 @@ void CartoonRenderer::PrepareRendering()
     for(int nlc=0;nlc<sel_subset_.GetListCount();++nlc) {
       const NodeEntryList& nelist=sel_subset_.GetList(nlc);
       for(NodeEntryList::const_iterator nit=nelist.begin();nit!=nelist.end();++nit) {
-	id_set.insert(nit->id);
+        id_set.insert(nit->id);
       }
     }
     // now find all matching spline segments
@@ -147,28 +147,28 @@ void CartoonRenderer::PrepareRendering()
       SplineEntryList nlist;
       unsigned int sc=0;
       while(sc<slist.size()) {
-	int curr_id=slist.at(sc).id;
-	if(id_set.count(curr_id)>0) {
-	  // if a match is found, add all until a new id is found
-	  while(sc<slist.size() &&  slist.at(sc).id==curr_id) {
-	    nlist.push_back(slist[sc++]);
-	    // override with the selection color
-	    nlist.back().color1=sel_color;
-	    nlist.back().color2=sel_color;
-	  }
-	} else {
-	  // introduce break
-	  if(!nlist.empty()) {
-	    sel_spline_list_list_.push_back(nlist);
-	    nlist.clear();
-	  }
-	  // and advance to the next id
-	  while(sc<slist.size() &&  slist.at(sc).id==curr_id) ++sc;
-	}
+        int curr_id=slist.at(sc).id;
+        if(id_set.count(curr_id)>0) {
+          // if a match is found, add all until a new id is found
+          while(sc<slist.size() &&  slist.at(sc).id==curr_id) {
+            nlist.push_back(slist[sc++]);
+            // override with the selection color
+            nlist.back().color1=sel_color;
+            nlist.back().color2=sel_color;
+          }
+        } else {
+          // introduce break
+          if(!nlist.empty()) {
+            sel_spline_list_list_.push_back(nlist);
+            nlist.clear();
+          }
+          // and advance to the next id
+          while(sc<slist.size() &&  slist.at(sc).id==curr_id) ++sc;
+        }
       }
       if(!nlist.empty()) {
-	sel_spline_list_list_.push_back(nlist);
-	nlist.clear();
+        sel_spline_list_list_.push_back(nlist);
+        nlist.clear();
       }
     }
     RebuildSplineObj(sel_va_, sel_spline_list_list_, true);
@@ -287,17 +287,17 @@ void CartoonRenderer::FudgeSplineObj(SplineEntryListList& olistlist)
               nlistlist.push_back(nlist);
               nlist.clear();
             }
-
-	    // make a two entry list with the cyl type
-	    nlist.push_back(SplineEntry(cyl.first,geom::Vec3(),geom::Vec3(),0.0,
-					olist[lstart].color1,olist[lstart].color1,
-					6,olist[lstart].id));
-	    nlist.push_back(SplineEntry(cyl.second,geom::Vec3(),geom::Vec3(),0.0,
-					olist[lend].color1,olist[lend].color1,
-					6,olist[lend].id));
-	    nlistlist.push_back(nlist);
-	    nlist.clear();
-
+            
+            // make a two entry list with the cyl type
+            nlist.push_back(SplineEntry(cyl.first,geom::Vec3(),geom::Vec3(),0.0,
+                                        olist[lstart].color1,olist[lstart].color1,
+                                        6,olist[lstart].id));
+            nlist.push_back(SplineEntry(cyl.second,geom::Vec3(),geom::Vec3(),0.0,
+                                        olist[lend].color1,olist[lend].color1,
+                                        6,olist[lend].id));
+            nlistlist.push_back(nlist);
+            nlist.clear();
+            
             if(lend+1<olist.size()) {
               // and get going with an entry at the end of the cylinder
               SplineEntry tmp_start(olist[lend]);
@@ -329,42 +329,42 @@ void CartoonRenderer::FudgeSplineObj(SplineEntryListList& olistlist)
         for(;lc<olist.size() && olist.at(lc).type==2;++lc,++kend) {
           nlist.push_back(olist.at(lc));
         }
-	if(kend-kstart<2) {
-	  // dont bother with too short strands
-	  for(unsigned int i=kstart;i<kend;++i) {
-	    nlist.at(i).type=0;
-	  }
-	} else {
-	  kend-=1;
-	  // these magic numbers are used in RebuildSplineObj for proper arrow rendering
-	  nlist.at(kend-1).type=3;
-	  nlist.at(kend).type=5;
-	  
-	  if(options_->GetStrandMode()==1) {
-	    // smooth the strands for mode 1
-	    nlist.at(kstart).direction = geom::Normalize(nlist.at(kend).position-nlist.at(kstart).position);
-	    nlist.at(kend).direction=nlist.at(kstart).direction;
-	    float invf=1.0/static_cast<float>(kend-kstart);
-	    for(unsigned int k=kstart;k<=kend;++k) {
-	      float f = static_cast<float>(k-kstart)*invf;
-	      nlist.at(k).position=nlist.at(kstart).position+f*(nlist.at(kend).position-nlist.at(kstart).position);
-	      nlist.at(k).direction=nlist.at(kstart).direction;
-	      geom::Vec3 tmpn=geom::Normalize(nlist.at(kstart).normal+f*(nlist.at(kend).normal-nlist.at(kstart).normal));
-	      geom::Vec3 tmpx=geom::Normalize(geom::Cross(nlist.at(kstart).direction,tmpn));
-	      nlist.at(k).normal=geom::Normalize(geom::Cross(tmpx,nlist.at(kstart).direction));
-	    }
-	  }
-	  
-	  // break nodelist, re-start at arrow tip for both modes
-	  if(lc+1<olist.size()) {
-	    nlistlist.push_back(nlist);
-	    nlist.clear();
-	    nlist.push_back(nlistlist.back().back());
-	    nlist.back().type=0;
-	    nlist.back().color1=olist[lc+1].color1;
-	    nlist.back().color2=olist[lc+1].color2;
-	  }
-	}
+        if(kend-kstart<2) {
+          // dont bother with too short strands
+          for(unsigned int i=kstart;i<kend;++i) {
+            nlist.at(i).type=0;
+          }
+        } else {
+          kend-=1;
+          // these magic numbers are used in RebuildSplineObj for proper arrow rendering
+          nlist.at(kend-1).type=3;
+          nlist.at(kend).type=5;
+          
+          if(options_->GetStrandMode()==1) {
+            // smooth the strands for mode 1
+            nlist.at(kstart).direction = geom::Normalize(nlist.at(kend).position-nlist.at(kstart).position);
+            nlist.at(kend).direction=nlist.at(kstart).direction;
+            float invf=1.0/static_cast<float>(kend-kstart);
+            for(unsigned int k=kstart;k<=kend;++k) {
+              float f = static_cast<float>(k-kstart)*invf;
+              nlist.at(k).position=nlist.at(kstart).position+f*(nlist.at(kend).position-nlist.at(kstart).position);
+              nlist.at(k).direction=nlist.at(kstart).direction;
+              geom::Vec3 tmpn=geom::Normalize(nlist.at(kstart).normal+f*(nlist.at(kend).normal-nlist.at(kstart).normal));
+              geom::Vec3 tmpx=geom::Normalize(geom::Cross(nlist.at(kstart).direction,tmpn));
+              nlist.at(k).normal=geom::Normalize(geom::Cross(tmpx,nlist.at(kstart).direction));
+            }
+          
+            // and break nodelist, re-starting at arrow tip, just for mode 1
+            if(lc+1<olist.size()) {
+              nlistlist.push_back(nlist);
+              nlist.clear();
+              nlist.push_back(nlistlist.back().back());
+              nlist.back().type=0;
+              nlist.back().color1=olist[lc+1].color1;
+              nlist.back().color2=olist[lc+1].color2;
+            }
+          }
+        }
       }
       if(lc<olist.size()) {
         nlist.push_back(olist.at(lc));
diff --git a/modules/gui/pymod/scene/hsc_widget.py b/modules/gui/pymod/scene/hsc_widget.py
index 8a0464841f48d262cb074fed1594ff47be9a6d5b..894c90c682cd594253e273db3af8304a741488fb 100644
--- a/modules/gui/pymod/scene/hsc_widget.py
+++ b/modules/gui/pymod/scene/hsc_widget.py
@@ -132,7 +132,6 @@ class HSCWidget(RenderModeWidget):
     self.width_helix_slider_.setTickPosition(QtGui.QSlider.NoTicks)
     self.width_helix_slider_.setTickInterval(1)
     
-    
     #Helix Ratio
     ratio_helix_label = QtGui.QLabel("Thickness")
     
@@ -146,7 +145,6 @@ class HSCWidget(RenderModeWidget):
     self.thickness_helix_slider_.setTickPosition(QtGui.QSlider.NoTicks)
     self.thickness_helix_slider_.setTickInterval(1)
     
-    
     #Helix ECC
     ecc_helix_label = QtGui.QLabel("ECC")
     
@@ -165,6 +163,11 @@ class HSCWidget(RenderModeWidget):
     self.helix_profile_spinbox_ = QtGui.QSpinBox()
     self.helix_profile_spinbox_.setRange(min_profile, max_profile)
     
+    # Helix Rendering Mode
+    helix_mode_label = QtGui.QLabel("Helix Render Mode")
+    self.helix_mode_spinbox_ = QtGui.QSpinBox()
+    self.helix_mode_spinbox_.setRange(0, 1)
+    
     #Strand
     strand_label = QtGui.QLabel("Strand")
     font = strand_label.font()
@@ -183,7 +186,6 @@ class HSCWidget(RenderModeWidget):
     self.width_strand_slider_.setTickPosition(QtGui.QSlider.NoTicks)
     self.width_strand_slider_.setTickInterval(1)
     
-    
     #Strand Ratio
     ratio_strand_label = QtGui.QLabel("Thickness")
     
@@ -197,7 +199,6 @@ class HSCWidget(RenderModeWidget):
     self.thickness_strand_slider_.setTickPosition(QtGui.QSlider.NoTicks)
     self.thickness_strand_slider_.setTickInterval(1)
     
-    
     #Strand ECC
     ecc_strand_label = QtGui.QLabel("ECC")
     
@@ -216,6 +217,12 @@ class HSCWidget(RenderModeWidget):
     self.strand_profile_spinbox_ = QtGui.QSpinBox()
     self.strand_profile_spinbox_.setRange(min_profile, max_profile)
 
+    # Strand Rendering Mode
+    strand_mode_label = QtGui.QLabel("Strand Render Mode")
+    self.strand_mode_spinbox_ = QtGui.QSpinBox()
+    self.strand_mode_spinbox_.setRange(0, 1)
+
+    #
     row=1
     grid = QtGui.QGridLayout()
     grid.addWidget(poly_mode_label,row,0,1,1)
@@ -257,6 +264,9 @@ class HSCWidget(RenderModeWidget):
     grid.addWidget(helix_profile_label, row, 0, 1, 3)
     grid.addWidget(self.helix_profile_spinbox_, row, 4, 1, 1)
     row+=1
+    grid.addWidget(helix_mode_label, row, 0, 1, 3)
+    grid.addWidget(self.helix_mode_spinbox_, row, 4, 1, 1)
+    row+=1
     grid.addWidget(strand_label, row, 0, 1, 3)
     row+=1
     grid.addWidget(radius_strand_label, row, 0, 1, 1)
@@ -273,6 +283,9 @@ class HSCWidget(RenderModeWidget):
     row+=1
     grid.addWidget(strand_profile_label, row, 0, 1, 3)
     grid.addWidget(self.strand_profile_spinbox_, row, 4, 1, 1)
+    row+=1
+    grid.addWidget(strand_mode_label, row, 0, 1, 3)
+    grid.addWidget(self.strand_mode_spinbox_, row, 4, 1, 1)
     
     grid.setRowStretch(row+1,1)
     self.setLayout(grid)
@@ -294,6 +307,7 @@ class HSCWidget(RenderModeWidget):
     QtCore.QObject.connect(self.ecc_helix_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateHelixEcc)
     QtCore.QObject.connect(self.ecc_helix_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderHelixEcc)
     QtCore.QObject.connect(self.helix_profile_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateHelixProfileType)
+    QtCore.QObject.connect(self.helix_mode_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateHelixMode)
 
     QtCore.QObject.connect(self.width_strand_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateStrandWidth)
     QtCore.QObject.connect(self.width_strand_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderStrandWidth)
@@ -302,6 +316,7 @@ class HSCWidget(RenderModeWidget):
     QtCore.QObject.connect(self.ecc_strand_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateStrandEcc)
     QtCore.QObject.connect(self.ecc_strand_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderStrandEcc)    
     QtCore.QObject.connect(self.strand_profile_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateStrandProfileType)
+    QtCore.QObject.connect(self.strand_mode_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateStrandMode)
     
     self.setMinimumSize(250,420) #14*30
     ########/UI########
@@ -318,10 +333,12 @@ class HSCWidget(RenderModeWidget):
     self.UpdateHelixThicknessGui(options.GetHelixThickness())
     self.UpdateHelixEccGui(options.GetHelixEcc())
     self.helix_profile_spinbox_.setValue(options.GetHelixProfileType())
+    self.helix_mode_spinbox_.setValue(options.GetHelixMode())
     self.UpdateStrandWidthGui(options.GetStrandWidth())
     self.UpdateStrandThicknessGui(options.GetStrandThickness())
     self.UpdateStrandEccGui(options.GetStrandEcc())
     self.strand_profile_spinbox_.setValue(options.GetStrandProfileType())
+    self.strand_mode_spinbox_.setValue(options.GetStrandMode())
     
   def UpdatePolyMode(self, value):
     self.GetOptions().SetPolyMode(value)
@@ -378,6 +395,10 @@ class HSCWidget(RenderModeWidget):
   def UpdateHelixProfileType(self, value):
     self.GetOptions().SetHelixProfileType(value)
     self.ApplyOptions()
+
+  def UpdateHelixMode(self, value):
+    self.GetOptions().SetHelixMode(value)
+    self.ApplyOptions()
     
   def UpdateSliderHelixEcc(self, value):
     self.GetOptions().SetHelixEcc(value/10.0)
@@ -411,6 +432,10 @@ class HSCWidget(RenderModeWidget):
     self.GetOptions().SetStrandProfileType(value)
     self.ApplyOptions()
     
+  def UpdateStrandMode(self, value):
+    self.GetOptions().SetStrandMode(value)
+    self.ApplyOptions()
+    
   def UpdateTubeRadiusGui(self,value):
     if(abs(value*10.0 - self.width_tube_slider_.value())>=self.width_tube_spinbox_.singleStep()):
       self.width_tube_slider_.setValue(value*10.0)