protected void stepFWDCalc(boolean showSteps) {

      if (m_currentStep == 0) {
         m_btnSetOne.setEnabled(false);
         m_btnSetTwo.setEnabled(false);
         m_btnSetGapOne.setEnabled(false);
         m_btnSetGapTwo.setEnabled(false);

         m_btnPrev.setEnabled(true);
         m_btnBeginning.setEnabled(true);
      }

      Point realD = getCoordsByStep(m_currentStep);

      Point D = new Point(realD.x - 1, realD.y - 1);
      int p = 1;

      m_l1Choiche.setBackground(m_mainPane.getBackground());
      m_l2Choiche.setBackground(m_mainPane.getBackground());
      m_l3Choiche.setBackground(m_mainPane.getBackground());

      CellElement leftCell = m_dpTable.getCell(realD.x - 1, realD.y);
      CellElement topCell = m_dpTable.getCell(realD.x, realD.y - 1);
      CellElement topLeftCell = m_dpTable.getCell(realD.x - 1, realD.y - 1);

      CellElement currentCell = m_dpTable.getCell(realD.x, realD.y);

      if (m_s2.charAt(realD.x - 2) == m_s1.charAt(realD.y - 2)) {
         p = 0;
      }

      if (showSteps) {
         String DEqual = "D(" + (D.y) + ", " + (D.x) + ") = Min";

         String DLeft = "D(" + (D.y) + ", " + (D.x-1) + ") + 1 = " +
         	leftCell.getVal() + " + 1 = " + (leftCell.getIntVal() + 1);
         String DTop = "D(" + (D.y-1) + ", " + (D.x) + ") + 1 = " +
         	topCell.getVal() + " + 1 = " + (topCell.getIntVal() + 1);
         
////DUMB BUG

//         String DLeft = "D(" + (D.y - 1) + ", " + (D.x) + ") + 1 = " +
//             leftCell.getVal() + " + 1 = " + (leftCell.getIntVal() + 1);
//         String DTop = "D(" + (D.y) + ", " + (D.x - 1) + ") + 1 = " +
//             topCell.getVal() + " + 1 = " + (topCell.getIntVal() + 1);

         String DTopLeft = "D(" + (D.y - 1) + ", " + (D.x - 1) + ") + " + p +
             " = " +
             topLeftCell.getVal() + " + " + p + " = " +
             (topLeftCell.getIntVal() + p);

         m_lDEqual.setText(DEqual);
         m_l1Choiche.setText(DLeft);
         m_l2Choiche.setText(DTop);
         m_l3Choiche.setText(DTopLeft);
      }

      int fromLeftVal = leftCell.getIntVal() + 1;
      int fromTopVal = topCell.getIntVal() + 1;
      int fromTopLeftVal = topLeftCell.getIntVal() + p;

      int min = Math.min(fromLeftVal, Math.min(fromTopVal, fromTopLeftVal));

      // Init choosen array
      LinkedList highlightList = new LinkedList();

      if (fromLeftVal == min) {
         m_l1Choiche.setBackground(Color.yellow);
         currentCell.addLeftPointer(leftCell);
         highlightList.add(leftCell);
      }
      if (fromTopVal == min) {
         m_l2Choiche.setBackground(Color.yellow);
         currentCell.addTopPointer(topCell);
         highlightList.add(topCell);
      }
      if (fromTopLeftVal == min) {
         m_l3Choiche.setBackground(Color.yellow);
         currentCell.addDiagPointer(topLeftCell);
         highlightList.add(topLeftCell);
      }

      currentCell.setIntVal(min);

      if (showSteps) {
         if (p == 0) {
            // the two characters are equal: RED
            m_dpTable.setSideHighlight(currentCell, Color.red);
         }
         else {
            // the two characters are not equal:
            m_dpTable.setSideHighlight(currentCell, new Color(0, 255, 255));
         }

         m_dpTable.setTriArrows(currentCell, true);
         m_dpTable.setMultipleCellHighlight(highlightList);
         m_dpTable.paint(m_dpTable.getGraphics());
      }

      m_currentStep++;
   }