public int compare(Object o1, Object o2) {
          if (sorting_column == -1) return 0;
          if ((o1 instanceof ITask) == false) return 0;
          if ((o2 instanceof ITask) == false) return 0;

          ITask task1 = (ITask) o1;
          ITask task2 = (ITask) o2;

          // based on TaskTableModel.columnNames
          switch (sorting_column) {
            case 1:
              return task1.getText().compareTo(task2.getText());
            case 2:
              return task1.getStartDate().getDate().compareTo(task2.getStartDate().getDate());
            case 3:
              return task1.getEndDate().getDate().compareTo(task2.getEndDate().getDate());
            case 0: // task priority, same as 4
            case 4:
              return task1.getPriority() - task2.getPriority();
            case 5:
              return task1.getStatus(CurrentDate.get()) - task2.getStatus(CurrentDate.get());
            case 6:
              return task1.getProgress() - task2.getProgress();
          }

          return 0;
        }