diff --git a/modules/gui/src/sequence/sequence_table_view.cc b/modules/gui/src/sequence/sequence_table_view.cc
index 4529101fed75e0805f086a646287e8e4a1ebecb2..628301d37e1c1065af6540202524e01ee9bd7877 100644
--- a/modules/gui/src/sequence/sequence_table_view.cc
+++ b/modules/gui/src/sequence/sequence_table_view.cc
@@ -349,6 +349,16 @@ void SequenceTableView::wheelEvent(QWheelEvent* event)
   }
 }
 
+void SequenceTableView::keyPressEvent(QKeyEvent* event)
+{
+  if(event->matches(QKeySequence::Copy)){
+    emit CopyEvent(event);
+  }
+  else{
+    QTableView::keyPressEvent(event);
+  }
+}
+
 SequenceTableView::~SequenceTableView(){}
 
 }}
diff --git a/modules/gui/src/sequence/sequence_table_view.hh b/modules/gui/src/sequence/sequence_table_view.hh
index f8c07ee813d21cdf6a45fa9e6091bf54705e8502..e138d07eadc8dc63a4c110b4fbcb2900f82bac44 100644
--- a/modules/gui/src/sequence/sequence_table_view.hh
+++ b/modules/gui/src/sequence/sequence_table_view.hh
@@ -44,6 +44,7 @@ public:
 
 signals:
   void MouseWheelEvent(QWheelEvent* event);
+  void CopyEvent(QKeyEvent* event);
 
 public slots:
   void columnCountChanged(const QModelIndex& index, int old_count, int new_count);
@@ -55,7 +56,8 @@ protected:
   virtual void mouseDoubleClickEvent(QMouseEvent* event);
   virtual void mouseReleaseEvent(QMouseEvent* event);
   virtual void resizeEvent(QResizeEvent* event);
-  virtual void wheelEvent (QWheelEvent* event);
+  virtual void wheelEvent(QWheelEvent* event);
+  virtual void keyPressEvent(QKeyEvent* event);
   virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
   void scrollTo (const QModelIndex & index, ScrollHint hint = EnsureVisible);
 
diff --git a/modules/gui/src/sequence/sequence_viewer.cc b/modules/gui/src/sequence/sequence_viewer.cc
index 722c962d7bfb8fee5d1955b51d12bf300f7d59fe..4164bbeecdd5429488bbfbf2ba3a3c3d1e1c773c 100644
--- a/modules/gui/src/sequence/sequence_viewer.cc
+++ b/modules/gui/src/sequence/sequence_viewer.cc
@@ -23,10 +23,13 @@
 #include <boost/pointer_cast.hpp>
 
 #include <QAbstractItemView>
+#include <QApplication>
+#include <QClipboard>
 #include <QHeaderView>
 #include <QPushButton>
 #include <QShortcut>
 #include <QVBoxLayout>
+#include <QVarLengthArray>
 
 #include <ost/mol/chain_view.hh>
 #include <ost/mol/entity_view.hh>
@@ -96,6 +99,7 @@ SequenceViewerV2::SequenceViewerV2(QWidget* parent): Widget(NULL,parent)
   connect(seq_table_view_,SIGNAL(doubleClicked(const QModelIndex&)),model_,SLOT(DoubleClicked(const QModelIndex&)));
   connect(seq_table_view_->GetStaticColumn(),SIGNAL(doubleClicked(const QModelIndex&)),this,SLOT(DoubleClicked(const QModelIndex&)));
   connect(seq_table_view_->GetStaticRow(),SIGNAL(doubleClicked(const QModelIndex&)),this,SLOT(DoubleClicked(const QModelIndex&)));
+  connect(seq_table_view_,SIGNAL(CopyEvent(QKeyEvent*)),this,SLOT(CopyEvent(QKeyEvent*)));
   connect(seq_table_view_,SIGNAL(MouseWheelEvent(QWheelEvent*)),this,SLOT(MouseWheelEvent(QWheelEvent*)));
 
   gfx::GfxNodeP root_node = gfx::Scene::Instance().GetRootNode();
@@ -128,8 +132,8 @@ void SequenceViewerV2::UpdateSearchBar()
 {
   QStringList sequence_names_;
   for(int i = 1; i< model_->rowCount(); i++){
-        QString name = model_->data(model_->index(i,0),Qt::DisplayRole).toString();
-        sequence_names_.append(name);
+    QString name = model_->data(model_->index(i,0),Qt::DisplayRole).toString();
+    sequence_names_.append(name);
   }
   seq_search_bar_->UpdateItems(sequence_names_);
 }
@@ -180,6 +184,27 @@ void SequenceViewerV2::MouseWheelEvent(QWheelEvent* event)
   event->accept();
 }
 
+void SequenceViewerV2::CopyEvent(QKeyEvent* event)
+{
+  const QModelIndexList& list = seq_table_view_->selectionModel()->selectedIndexes();
+  if(list.size()>0){
+    QString clipboard_string;
+
+    QVarLengthArray<QString> clipboard_array(model_->rowCount());
+    for(int i = 0; i < list.size(); i++){
+      const QModelIndex& index = list[i];
+      clipboard_array[index.row()].append(model_->data(index,Qt::DisplayRole).toString());
+    }
+    for(int i = 0; i < clipboard_array.size(); i++){
+      if(clipboard_array[i].size()>0){
+        clipboard_string.append(clipboard_array[i]+"\n");
+      }
+    }
+    QApplication::clipboard()->setText(clipboard_string);
+  }
+  event->accept();
+}
+
 void SequenceViewerV2::FindInSequence()
 {
   if(seq_search_bar_->isHidden()){
diff --git a/modules/gui/src/sequence/sequence_viewer.hh b/modules/gui/src/sequence/sequence_viewer.hh
index 112bb1c4b5ab92b591873c3b66140324d56d00ba..b04d242dc3c1d3befd3ffda6698e417b3322e2a2 100644
--- a/modules/gui/src/sequence/sequence_viewer.hh
+++ b/modules/gui/src/sequence/sequence_viewer.hh
@@ -56,10 +56,6 @@ public slots:
 /// \internal
 void OnSearchBarUpdate(const QString&, bool, const QString&);
 
-private slots:
-/// \brief show sequence search bar
-void FindInSequence();
-
 private:
   void UpdateSearchBar();
   void SelectList(const QModelIndexList& list);
@@ -68,10 +64,12 @@ private:
   SequenceTableView* seq_table_view_;
 
 private slots:
+  /// \brief show sequence search bar
+  void FindInSequence();
   void SelectionModelChanged(const QItemSelection&, const QItemSelection&);
   void DoubleClicked(const QModelIndex& index);
   void MouseWheelEvent(QWheelEvent* event);
-
+  void CopyEvent(QKeyEvent* event);
 };
 
 }}