diff --git a/modules/gui/src/sequence/sequence_model.cc b/modules/gui/src/sequence/sequence_model.cc
index ee2aba06ac8535a781ce6aec58aac3888cc79d47..c9152e0e57aa9c70cc81c971d609bee88e097539 100644
--- a/modules/gui/src/sequence/sequence_model.cc
+++ b/modules/gui/src/sequence/sequence_model.cc
@@ -81,22 +81,21 @@ void SequenceModel::InsertGfxEntity(gfx::EntityP& ent){
 }
 
 void SequenceModel::RemoveGfxEntity(gfx::EntityP& entity){
-  ViewObject* obj = this->GetObject(entity);
-  if(obj){
-    int index = objects_.indexOf(obj);
+  if(ViewObject* obj = this->GetItem(entity)){
+    int index = this->GetGlobalRow(obj,0);
     this->beginRemoveRows(QModelIndex(),index,index+obj->GetRowCount()-1);
     int cols_before = this->columnCount();
-    objects_.removeAt(index);
+    objects_.removeOne(obj);
     this->endRemoveRows();
     int cols = this->columnCount();
     if(cols_before>cols){
-      this->beginRemoveColumns(QModelIndex(), cols, cols_before-1);
+      this->beginRemoveColumns(QModelIndex(), cols, cols_before);
       this->endRemoveColumns();
     }
   }
 }
 
-ViewObject* SequenceModel::GetObject(gfx::EntityP& entity){
+ViewObject* SequenceModel::GetItem(gfx::EntityP& entity){
   if(entity != NULL){
     for (int i = 0 ; i< objects_.size(); i++){
       if(entity == objects_[i]->GetGfxObject()){
@@ -160,7 +159,7 @@ int SequenceModel::GetGlobalRow(ViewObject* obj, int row) const
 QModelIndexList SequenceModel::GetModelIndexes(gfx::EntityP& entity, const mol::EntityView& view)
 {
   QModelIndexList list;
-  if(ViewObject* object = this->GetObject(entity)){
+  if(ViewObject* object = this->GetItem(entity)){
     QMap<int, QList<int> > indexes = object->GetIndexesForView(view);
     QMapIterator< int, QList<int> > i(indexes);
     while (i.hasNext()) {
diff --git a/modules/gui/src/sequence/sequence_model.hh b/modules/gui/src/sequence/sequence_model.hh
index 173c7f9622bd19000b96f64dab61dfb3ed59eb26..a1a6f8652360a9a61819460dcef21ea669065a31 100644
--- a/modules/gui/src/sequence/sequence_model.hh
+++ b/modules/gui/src/sequence/sequence_model.hh
@@ -52,10 +52,8 @@ public:
   QModelIndexList GetModelIndexes(gfx::EntityP& entity, const mol::EntityView& view);
   int GetGlobalRow(ViewObject* obj, int row) const;
 
-  ViewObject* GetObject(gfx::EntityP& entity);
-  const PainterList& GetPainters(const QModelIndex& index) const;
 
-  ViewObject* GetItem(const QModelIndex& index) const;
+  const PainterList& GetPainters(const QModelIndex& index) const;
 
   // abstract item model interface
   int rowCount(const QModelIndex& parent=QModelIndex()) const;
@@ -74,6 +72,8 @@ public slots:
   void SelectionChanged(const QItemSelection& sel, const QItemSelection& desel);
 
 private:
+  ViewObject* GetItem(gfx::EntityP& entity);
+  ViewObject* GetItem(const QModelIndex& index) const;
   QPair<int, ViewObject*> GetRowWithItem(int row) const;
   QPair<int, ViewObject*> GetRowWithItem(const QModelIndex& index) const;
 
diff --git a/modules/gui/src/sequence/sequence_table_view.cc b/modules/gui/src/sequence/sequence_table_view.cc
index 44faeaebf96b00947886752c6f73d52963c1c1e1..c19ca30da29343f0a3fb1e617d62d19d07bab8f4 100644
--- a/modules/gui/src/sequence/sequence_table_view.cc
+++ b/modules/gui/src/sequence/sequence_table_view.cc
@@ -24,6 +24,7 @@
 #include <QHeaderView>
 #include <QScrollBar>
 #include <QTableWidgetItem>
+#include <QMouseEvent>
 
 #include <iostream>
 #include "sequence_table_view.hh"
@@ -183,6 +184,24 @@ QTableView* SequenceTableView::GetFirstRow(){
   return column_not_move_;
 }
 
+void SequenceTableView::mouseDoubleClickEvent(QMouseEvent *event)
+{
+  QModelIndex index = indexAt(event->pos());
+  this->last_double_click_ = index;
+  QAbstractItemView::mouseDoubleClickEvent(event);
+}
+
+
+void SequenceTableView::mouseReleaseEvent(QMouseEvent* event)
+{
+  QModelIndex index = indexAt(event->pos());
+  bool double_click = (index.isValid() && index == this->last_double_click_);
+  if (double_click) {
+    return;
+  }
+  QAbstractItemView::mouseReleaseEvent(event);
+}
+
 SequenceTableView::~SequenceTableView(){}
 
 }}
diff --git a/modules/gui/src/sequence/sequence_table_view.hh b/modules/gui/src/sequence/sequence_table_view.hh
index 9d3af2eac0549d4e11dd0b393bdf4a8193317279..5fc244b2d25f5ff8026b42c5872ccc8eeb3db6c5 100644
--- a/modules/gui/src/sequence/sequence_table_view.hh
+++ b/modules/gui/src/sequence/sequence_table_view.hh
@@ -44,6 +44,8 @@ public slots:
   QTableView* GetFirstRow();
 
 protected:
+  virtual void mouseDoubleClickEvent(QMouseEvent* event);
+  virtual void mouseReleaseEvent(QMouseEvent* event);
   virtual void resizeEvent(QResizeEvent *event);
   virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
   void scrollTo (const QModelIndex & index, ScrollHint hint = EnsureVisible);
@@ -55,6 +57,7 @@ private slots:
 private:
   QTableView* column_not_move_;
   SequenceDelegate* delegate_;
+  QModelIndex last_double_click_;
   void updateNotMoveColumn();
 };
 
diff --git a/modules/gui/src/sequence/sequence_viewer.cc b/modules/gui/src/sequence/sequence_viewer.cc
index 146040fd486c2ebb9f4b88665ee925a0228f94fb..14b0957613a4cf30901bf54f8758cd2809190856 100644
--- a/modules/gui/src/sequence/sequence_viewer.cc
+++ b/modules/gui/src/sequence/sequence_viewer.cc
@@ -61,7 +61,7 @@ SequenceViewerV2::SequenceViewerV2(QWidget* parent): Widget(NULL,parent)
   seq_table_view_->setSelectionMode(QAbstractItemView::ExtendedSelection);
   connect(seq_table_view_->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(SelectionModelChanged(const QItemSelection&, const QItemSelection&)));
   connect(seq_table_view_,SIGNAL(doubleClicked(const QModelIndex&)),model_,SLOT(DoubleClicked(const QModelIndex&)));
-  connect(seq_table_view_->GetFirstRow(),SIGNAL(doubleClicked(const QModelIndex&)),model_,SLOT(DoubleClicked(const QModelIndex&)));
+  connect(seq_table_view_->GetFirstRow(),SIGNAL(doubleClicked(const QModelIndex&)),this,SLOT(DoubleClicked(const QModelIndex&)));
 }
 
 void SequenceViewerV2::NodeAdded(const gfx::GfxNodeP& n)
@@ -91,12 +91,10 @@ void SequenceViewerV2::SelectionChanged(const gfx::GfxObjP& o,
                                       const mol::EntityView& view)
 {
   disconnect(seq_table_view_->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(SelectionModelChanged(const QItemSelection&, const QItemSelection&)));
-  std::cout << "SELECTION CHANGED!" << std::endl;
   QItemSelectionModel* model = seq_table_view_->selectionModel();
   gfx::EntityP entity=boost::dynamic_pointer_cast<gfx::Entity>(o);
   if(entity){
     const QModelIndexList& list = model_->GetModelIndexes(entity, view);
-    std::cout << list.size() << std::endl;
     QSet<int> rows_visited;
     for(int i = 0; i<list.size(); i++){
       int row =list[i].row();
@@ -112,6 +110,12 @@ void SequenceViewerV2::SelectionChanged(const gfx::GfxObjP& o,
   connect(seq_table_view_->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(SelectionModelChanged(const QItemSelection&, const QItemSelection&)));
 }
 
+void SequenceViewerV2::DoubleClicked(const QModelIndex& index)
+{
+  disconnect(seq_table_view_->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(SelectionModelChanged(const QItemSelection&, const QItemSelection&)));
+  model_->DoubleClicked(index);
+  connect(seq_table_view_->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(SelectionModelChanged(const QItemSelection&, const QItemSelection&)));
+}
 
 SequenceViewerV2::~SequenceViewerV2(){
   gfx::Scene::Instance().DetachObserver(this);
diff --git a/modules/gui/src/sequence/sequence_viewer.hh b/modules/gui/src/sequence/sequence_viewer.hh
index 0963b5b0889b40fde6b25b8498243669b02fc907..bcedf4a970d3bab54654770302fc4095a60fcca9 100644
--- a/modules/gui/src/sequence/sequence_viewer.hh
+++ b/modules/gui/src/sequence/sequence_viewer.hh
@@ -57,6 +57,8 @@ private:
 
 private slots:
   void SelectionModelChanged(const QItemSelection&, const QItemSelection&);
+  void DoubleClicked(const QModelIndex& index);
+
 };
 
 }}
diff --git a/modules/gui/src/sequence/view_object.cc b/modules/gui/src/sequence/view_object.cc
index 90116e04ac30f56cfa8519b838403c330aa2f478..2dc4de045be4ad2f1861591c923ec6d1600e4eed 100644
--- a/modules/gui/src/sequence/view_object.cc
+++ b/modules/gui/src/sequence/view_object.cc
@@ -182,18 +182,22 @@ void ViewObject::SetSelection(int row, const QSet<int>& added, const QSet<int>&
 
     QSetIterator<int> i(removed);
     while (i.hasNext()){
-      int column = i.next();
-      if (mol::ResidueView rv=seq.GetResidue(column-1)) {
-        view.AddResidue(rv, mol::ViewAddFlag::INCLUDE_ATOMS);
+      int column = i.next()-1;
+      if(column >= 0 && column < seq.GetLength()){
+        if (mol::ResidueView rv=seq.GetResidue(seq.GetResidueIndex(column))) {
+          view.AddResidue(rv, mol::ViewAddFlag::INCLUDE_ATOMS);
+        }
       }
     }
     sel = mol::Difference(sel,view);
     view = seq.GetAttachedView().GetHandle().CreateEmptyView();
     i = QSetIterator<int>(added);
     while (i.hasNext()){
-      int column = i.next();
-      if (mol::ResidueView rv=seq.GetResidue(column-1)) {
-        view.AddResidue(rv, mol::ViewAddFlag::INCLUDE_ATOMS);
+      int column = i.next()-1;
+      if(column >= 0 && column < seq.GetLength()){
+        if (mol::ResidueView rv=seq.GetResidue(seq.GetResidueIndex(column))) {
+          view.AddResidue(rv, mol::ViewAddFlag::INCLUDE_ATOMS);
+        }
       }
     }
     sel = mol::Union(sel,view);
@@ -256,13 +260,49 @@ void ViewObject::DoubleClicked(int row, int column)
 {
   if(column==0){
     QSet<int> all;
-    for(int i = 1; i <= rows_[row].seq.GetLength(); i++){
-      all.insert(i);
+    int seq_length = rows_[row].seq.GetLength();
+    for(int i = 0; i < seq_length; i++){
+      all.insert(i+1);
     }
     this->SetSelection(row,all,QSet<int>());
   }
   else if(column>0){
-
+    column-=1;
+    QVarLengthArray<mol::SecStructure> sec = rows_[row].secstr;
+    if(sec.size()>0 && column < sec.size()){
+      mol::SecStructure& src_str = sec[column];
+      QVarLengthArray<bool> src_type(3);
+      src_type[0] = src_str.IsHelical();
+      src_type[1] = src_str.IsExtended();
+      src_type[2] = src_str.IsCoil();
+      int i = column;
+      QSet<int> cols_to_add;
+      mol::SecStructure& col_str = sec[i];
+      while(i >= 0 && (col_str = sec[i])){
+        if(src_type[0] == col_str.IsHelical()
+            && src_type[1] == col_str.IsExtended()
+            && src_type[2] == col_str.IsCoil()){
+        cols_to_add.insert(i+1);
+        --i;
+        }
+        else{break;}
+      }
+      i = column + 1;
+      if(i < sec.size()){
+        while(i < sec.size() && (col_str = sec[i])){
+          if(src_type[0] == col_str.IsHelical()
+              && src_type[1] == col_str.IsExtended()
+              && src_type[2] == col_str.IsCoil()){
+          cols_to_add.insert(i+1);
+          ++i;
+          }
+          else{
+            break;
+          }
+        }
+      }
+      this->SetSelection(row,cols_to_add, QSet<int>());
+    }
   }
 }
 
@@ -282,7 +322,7 @@ QMap<int, QList<int> > ViewObject::GetIndexesForView(const mol::EntityView& view
            e2=src_chain.GetResidueList().end(); j!=e2; ++j) {
           mol::ResidueView dst_res=dst_chain.FindResidue(j->GetHandle());
           assert(dst_res.IsValid());
-          int p=seq.GetPos(dst_res.GetIndex()+1);
+          int p=dst_res.GetIndex()+1;
           assert(p>=0 && p<=seq.GetLength());
           selected_indexes[i].append(p);
         }