diff --git a/src/gui/protein_list_view/proteinlistwindow.cpp b/src/gui/protein_list_view/proteinlistwindow.cpp
index 3b3b55d737e95bf1f55075c7326315f5cc671df2..4069a46609484ae3a16bcfed7dde282c7c0e9a40 100644
--- a/src/gui/protein_list_view/proteinlistwindow.cpp
+++ b/src/gui/protein_list_view/proteinlistwindow.cpp
@@ -57,6 +57,7 @@ ProteinListWindow::ProteinListWindow(QWidget *parent):
     _p_proxy_model->setSourceModel(_protein_table_model_p);
     _p_proxy_model->setDynamicSortFilter(true);
     ui->tableView->setModel( _p_proxy_model );
+    ui->tableView->setSortingEnabled(true);
 }
 
 ProteinListWindow::~ProteinListWindow()
diff --git a/src/gui/protein_list_view/proteintablemodel.cpp b/src/gui/protein_list_view/proteintablemodel.cpp
index b798a8e30e7b75f3e79cd3e1162a2520276e241f..dac8ca49fae6559c27065a89333d3a4f294f6ab6 100644
--- a/src/gui/protein_list_view/proteintablemodel.cpp
+++ b/src/gui/protein_list_view/proteintablemodel.cpp
@@ -35,6 +35,30 @@ bool ProteinTableProxyModel::filterAcceptsRow(int source_row,
         const QModelIndex &source_parent) const {
     return true;
 }
+
+bool ProteinTableProxyModel::lessThan(const QModelIndex & left, const QModelIndex & right) const {
+    QVariant leftData = sourceModel()->data(left);
+    QVariant rightData = sourceModel()->data(right);
+    
+    return leftData.toString() < rightData.toString();
+    //if (leftData.type() == QVariant::DateTime) {
+     //   return leftData.toDateTime() < rightData.toDateTime();
+    //} else {
+       // static QRegExp emailPattern("[\\w\\.]*@[\\w\\.]*)");
+/*
+        QString leftString = leftData.toString();
+        if(left.column() == 1 && emailPattern.indexIn(leftString) != -1)
+            leftString = emailPattern.cap(1);
+
+        QString rightString = rightData.toString();
+        if(right.column() == 1 && emailPattern.indexIn(rightString) != -1)
+            rightString = emailPattern.cap(1);
+
+        return QString::localeAwareCompare(leftString, rightString) < 0;
+        */
+   // }
+}
+
 QVariant ProteinTableProxyModel::headerData(int section, Qt::Orientation orientation,
         int role) const {
     return sourceModel()->headerData(section, orientation,
diff --git a/src/gui/protein_list_view/proteintablemodel.h b/src/gui/protein_list_view/proteintablemodel.h
index eef8b80b245b5c0471e8f90fbabee5d51e49efc3..7b11abe6d600549d7ddf4aacb79430c95d3c2f98 100644
--- a/src/gui/protein_list_view/proteintablemodel.h
+++ b/src/gui/protein_list_view/proteintablemodel.h
@@ -35,9 +35,10 @@ class ProteinTableProxyModel : public QSortFilterProxyModel
 public:
     ProteinTableProxyModel(QObject* parent = 0);
     bool filterAcceptsRow(int source_row,
-                          const QModelIndex &source_parent) const;
+                          const QModelIndex &source_parent) const override;
     QVariant headerData(int section, Qt::Orientation orientation,
-                        int role) const;
+                        int role) const override;
+    bool lessThan(const QModelIndex & left, const QModelIndex & right) const override;
 
 public slots:
     //void setMinGravity(double minGravity);