diff --git a/src/main/java/cli/History.java b/src/main/java/cli/History.java
index 6aa501a4d30632a31e2dfe632133f26d03be987b..575a4c381c3604426ac3997748014f8bd736a7fd 100644
--- a/src/main/java/cli/History.java
+++ b/src/main/java/cli/History.java
@@ -76,16 +76,31 @@ public class History extends Command  {
         return "hi";
     }
 
-    public String getUsage() { return "history"; }
+    public String getUsage() { return "history [command id (optional)]"; }
 
     public String getDescription() {
-        return "Prints all the non empty commands previously executed";
+        return "Prints all the non empty commands previously executed\n" +
+                " If an int arg is povided, the corresponding command is executed";
     }
 
 
     public  String executeCommand(String command, Interpreter interpreter) {
-        TraceManager.addDev("History command");
-        return interpreter.printAllFormerCommands();
+        //TraceManager.addDev("History command:" + command);
+
+        if (command.length() == 0) {
+            return interpreter.printAllFormerCommands();
+        }
+
+        try {
+            Integer indexInfo = new Integer(command);
+            return interpreter.executeFormerCommand(indexInfo);
+        } catch (Exception e) {
+            return "Invalid argument. Must provide an int";
+        }
+
+
+
+
     }
 
     public void fillSubCommands() {
diff --git a/src/main/java/cli/Interpreter.java b/src/main/java/cli/Interpreter.java
index 27921baaa67733c83477205edf5a6f3300fbed8e..e7ccfd1e54686eb31bae5d469096af4323c40af2 100644
--- a/src/main/java/cli/Interpreter.java
+++ b/src/main/java/cli/Interpreter.java
@@ -87,6 +87,7 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
     public MainGUI mgui;
     private Vector<String> formerCommands;
     private Terminal term;
+    private int currentLine;
 
 
     public Interpreter(String script, InterpreterOutputInterface printInterface, boolean show) {
@@ -108,10 +109,10 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
         term.setTerminalProvider(this);
 
         String line;
-        int cptLine = 0;
+        currentLine = 0;
         while ((line = term.getNextCommand()) != null) {
-            executeLine(line, cptLine, false);
-            cptLine ++;
+            executeLine(line, currentLine, false);
+            currentLine++;
         }
     }
 
@@ -140,11 +141,11 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
 
     public void interpret() {
         Scanner scanner = new Scanner(script);
-        int cptLine = 0;
+        currentLine = 0;
         while (scanner.hasNextLine()) {
             String line = scanner.nextLine();
-            cptLine ++;
-            executeLine(line, cptLine, true);
+            currentLine ++;
+            executeLine(line, currentLine, true);
 
         }
         scanner.close();
@@ -302,6 +303,7 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
         printInterface.print(s);
     }
 
+    // History
     public String printAllFormerCommands() {
         StringBuffer sb = new StringBuffer("");
         for(int i=0; i<formerCommands.size(); i++) {
@@ -311,6 +313,18 @@ public class Interpreter implements Runnable, TerminalProviderInterface  {
         return null;
     }
 
+    public String executeFormerCommand(int indexOfCommand) {
+        if (indexOfCommand >= formerCommands.size() || (indexOfCommand < 0)) {
+            return "Invalid command index";
+        }
+
+        String formerCommand = formerCommands.get(indexOfCommand);
+        System.out.println("Executing: " + formerCommand);
+        executeLine(formerCommand, currentLine, false);
+
+        return null;
+    }
+
     // Terminal provider interface
     public String getMidPrompt() {
         return "> ";
diff --git a/src/main/java/myutil/Terminal.java b/src/main/java/myutil/Terminal.java
index 9e80f095f2eaf7a765714bf29670a4a0c5355b80..fa88ef2d50f7109bfd3992645c94715d2ade73b8 100644
--- a/src/main/java/myutil/Terminal.java
+++ b/src/main/java/myutil/Terminal.java
@@ -189,6 +189,8 @@ public class Terminal {
 
                // Usual CHAR
                if ((sequence == null) && (val != -1)) {
+
+                   // CR
                    if (val == CR) {
                        cursorPosition = 0;
                        if (currentBuf.length() == 0) {
@@ -196,9 +198,10 @@ public class Terminal {
                            printPrompt(cpt);
                        } else {
                            cpt++;
-                           if (!(os.startsWith("mac"))) {
+
+                           //if (!(os.startsWith("mac"))) {
                                myPrint("\n");
-                           }
+                           //}
                            addToBuffer(currentBuf);
                            return currentBuf;
                        }
@@ -225,7 +228,7 @@ public class Terminal {
                            myPrint("" + x);
                            currentBuf += x;
                        } else {
-                           currentBuf = currentBuf.substring(0,cursorPosition) + x + currentBuf.substring(cursorPosition, currentBuf.length());
+                           currentBuf = currentBuf.substring(0,cursorPosition-1) + x + currentBuf.substring(cursorPosition, currentBuf.length());
                            myPrint("" + x + currentBuf.substring(cursorPosition, currentBuf.length()));
                        }
                        cursorPosition ++;
@@ -272,23 +275,9 @@ public class Terminal {
        //if (os.compareTo("mac") != 0) {
            System.out.print(s);
         //}
-       //System.out.flush();
-   }
-
-   public void printHistory() {
-       int cpt = 1;
-       for(String s: buffer) {
-           System.out.println("" + cpt+ ":" + s);
-           cpt ++;
-       }
+       System.out.flush();
    }
 
-   private void printSequence(String seq) {
-       for(int i=0; i<seq.length(); i++) {
-           System.out.print("" + (int)(seq.charAt(i)) + " ");
-       }
-       System.out.println("");
-   }
 
 
     private String delCurrent(String currentBuf) {