diff --git a/modules/seq/base/pymod/export_sequence.cc b/modules/seq/base/pymod/export_sequence.cc
index 9b7071c84e0223ff99a456479d05442debcf1297..bf2caca97572a66ec7899f85f35992b8192577fe 100644
--- a/modules/seq/base/pymod/export_sequence.cc
+++ b/modules/seq/base/pymod/export_sequence.cc
@@ -88,6 +88,38 @@ AlignedRegion slice_aln(const AlignmentHandle& aln, slice sl) {
   return aln.MakeRegion(start, end-start);
 }
 
+
+struct RegionRangeIter {
+  RegionRangeIter(AlignedColumnIterator b, 
+                  AlignedColumnIterator e):
+    b_(b), e_(e)
+  { }
+  
+  AlignedColumn next()
+  {
+    if (b_==e_) {
+      boost::python::objects::stop_iteration_error();
+    }
+    AlignedColumn col=*b_;
+    ++b_;
+    return col;
+  }
+private:
+  AlignedColumnIterator b_;
+  AlignedColumnIterator e_;
+};
+
+
+RegionRangeIter iter_range1(AlignmentHandle& aln)
+{
+  return RegionRangeIter(aln.begin(), aln.end());
+}
+
+RegionRangeIter iter_range2(AlignedRegion& aln_region)
+{
+  return RegionRangeIter(aln_region.begin(), aln_region.end());
+}
+
 }
 
 void export_sequence()
@@ -148,6 +180,9 @@ void export_sequence()
   /*class_<SequenceHandleList>("SequenceHandleList", init<>())
     .def(vector_indexing_suite<SequenceHandleList>())
   ;*/
+  class_<RegionRangeIter>("RegionRangeIter", no_init)
+    .def("next", &RegionRangeIter::next)
+  ;
   class_<AlignmentHandle>("AlignmentHandle", init<>())
     .def("GetCount", &AlignmentHandle::GetCount)
     .add_property("sequence_count", &AlignmentHandle::GetCount)
@@ -167,7 +202,7 @@ void export_sequence()
     .def("Replace",&AlignmentHandle::Replace)
     .def("__getitem__", &slice_aln)
     .def("__getitem__", &AlignmentHandle::operator[])
-    .def("__iter__", iterator<AlignmentHandle>())
+    .def("__iter__", iter_range1)
     .add_property("sequences", &AlignmentHandle::GetSequences)
     .def("SetSequenceName",  &AlignmentHandle::SetSequenceName)
     .def("SetSequenceOffset", &AlignmentHandle::SetSequenceOffset)
@@ -193,7 +228,7 @@ void export_sequence()
                   &AlignedRegion::SetMaster)
     .def("__getitem__", &AlignedRegion::operator[])                  
     .def("__len__", &AlignedRegion::GetLength)
-    .def("__iter__", iterator<AlignedRegion>())
+    .def("__iter__", iter_range2)
     .add_property("start", &AlignedRegion::GetStart)
     .add_property("end", &AlignedRegion::GetEnd)    
   ;