diff --git a/modules/seq/base/pymod/export_sequence.cc b/modules/seq/base/pymod/export_sequence.cc
index ee33b6125cd8fe63b8b5f390b72e0f6c4318ca45..e0104a51cd53ac3cbae14452bc2fd737f502a69d 100644
--- a/modules/seq/base/pymod/export_sequence.cc
+++ b/modules/seq/base/pymod/export_sequence.cc
@@ -250,6 +250,8 @@ void export_sequence()
   const_seq_handle_def<SequenceHandle>(seq_handle);
   generic_prop_def<SequenceHandle>(seq_handle);  
   seq_handle
+    .def("__setitem__", &SequenceHandle::SetOneLetterCode)
+    .def("SetOneLetterCode", &SequenceHandle::SetOneLetterCode)  
     .def("SetSequenceOffset", &SequenceHandle::SetSequenceOffset)
     .def("AttachView", attach_one)
     .def("AttachView", attach_two)
diff --git a/modules/seq/base/src/impl/sequence_impl.cc b/modules/seq/base/src/impl/sequence_impl.cc
index 9539dd20c5e3968edb285ef26ae6adcaa03c314f..877aef0133a9599d80d6de9967a6117fccfe5db0 100644
--- a/modules/seq/base/src/impl/sequence_impl.cc
+++ b/modules/seq/base/src/impl/sequence_impl.cc
@@ -105,6 +105,27 @@ void SequenceImpl::ShiftsFromSequence()
   }
 }
 
+void SequenceImpl::SetOneLetterCode(int position, char new_char)
+{
+  if (position<0 || position>=static_cast<int>(seq_string_.length()))
+    throw std::out_of_range("Position is not covered in sequence");
+  if (new_char=='-') {
+    if (seq_string_[position]!='-') {
+      seq_string_[position]=new_char;
+      this->ShiftsFromSequence();
+      return;
+    }
+  } else  {
+    if (seq_string_[position]=='-') {
+      seq_string_[position]=new_char;
+      this->ShiftsFromSequence();
+      return;
+    } else {
+      seq_string_[position]=new_char;
+    }
+  }
+}
+
 int SequenceImpl::GetResidueIndex(int pos) const
 {
   if (pos<0 || pos>=static_cast<int>(seq_string_.length()))
diff --git a/modules/seq/base/src/impl/sequence_impl.hh b/modules/seq/base/src/impl/sequence_impl.hh
index d6159402b7c8505c25078bb0ee7208f6ea03f8a6..f7d1110c98a0bbb315ceaf4e3b2d7f5c925a547c 100644
--- a/modules/seq/base/src/impl/sequence_impl.hh
+++ b/modules/seq/base/src/impl/sequence_impl.hh
@@ -106,6 +106,7 @@ public:
   /// \brief get one letter code of residue at position
   char GetOneLetterCode(int position) const;
 
+  void SetOneLetterCode(int position, char new_char);
   /// \brief get residue at position
   ///
   /// will return the residue view at the given sequence position or an invalid
diff --git a/modules/seq/base/src/sequence_handle.cc b/modules/seq/base/src/sequence_handle.cc
index a7f5347e1f36521635b28d4ef6076b0c876ef8a0..8bf31de26f6cb75396e27f3a61f3c3e6eaa32eae 100644
--- a/modules/seq/base/src/sequence_handle.cc
+++ b/modules/seq/base/src/sequence_handle.cc
@@ -57,6 +57,7 @@ char ConstSequenceHandle::operator[](int index) const
   return this->GetOneLetterCode(index);
 }
 
+
 void ConstSequenceHandle::CheckValidity() const
 {
   if (!impl_) {
@@ -291,6 +292,12 @@ char SequenceHandle::GetOneLetterCode(int position) const
   return Impl()->GetOneLetterCode(position);
 }
 
+void SequenceHandle::SetOneLetterCode(int position, char new_char)
+{
+  this->CheckValidity();
+  Impl()->SetOneLetterCode(position, new_char);
+}
+
 mol::ResidueView SequenceHandle::GetResidue(int position) const
 {
   this->CheckValidity();
diff --git a/modules/seq/base/src/sequence_handle.hh b/modules/seq/base/src/sequence_handle.hh
index de03a505be77b43ad87b9c5d97edf2a9a681a01b..46004d0a85502c59930652f2d8ea80142cf1e61d 100644
--- a/modules/seq/base/src/sequence_handle.hh
+++ b/modules/seq/base/src/sequence_handle.hh
@@ -118,6 +118,7 @@ public:
   
   char operator[](int index) const;
   
+  
   /// \brief whether the sequence is valid
   bool IsValid() const;
   /// \internal
@@ -251,7 +252,9 @@ public:
   ///
   /// \throw IntegrityError when the view contains more than one chain
   void AttachView(const mol::EntityView& view);
-
+  
+  void SetOneLetterCode(int position, char new_char);
+  
   operator ConstSequenceHandle() const;
   /// \brief attach entity view to sequence
   ///