diff --git a/expressions.txt b/expressions.txt
index 775252b7366d4532a1869ec5c5e2a908f93f41ac..956089d3b8d3ba88c9d22f8958713a1d48b6d3a6 100644
--- a/expressions.txt
+++ b/expressions.txt
@@ -1,10 +1,2 @@
-5
-x
-4+2
-3+(2^3)
-2*2*2+3
-(23+2*(2*3))-5
-1 + x*y^2 - (31 * x)-y
-1 + x^2 - (3 * x)
-2-x + 0.5*x^2 - 1
-(5*2-(5^2)+3*(201.01-15))
\ No newline at end of file
+1+(x^2)-(3*x)
+2*x+0.5*(x^2)-1
\ No newline at end of file
diff --git a/lib/JChart.jar b/lib/JChart.jar
new file mode 100644
index 0000000000000000000000000000000000000000..720f3fe02bcb1a5a9abc66553589b150c10770ec
Binary files /dev/null and b/lib/JChart.jar differ
diff --git a/src/ASTPrinter.java b/src/ASTPrinter.java
index a057d9a4f785a696f8f54321a09256f3e8d2ca83..8983653899e5b1c2c6fe66545fb25a77a9a60614 100644
--- a/src/ASTPrinter.java
+++ b/src/ASTPrinter.java
@@ -5,9 +5,19 @@ public class ASTPrinter implements  Visitor<String>{
         if(binaryOP.capsuled) {
             sb.append("(");
         }
-        sb.append(binaryOP.leftExpression.accept(this));
-        sb.append(binaryOP.operator);
-        sb.append(binaryOP.rightExpression.accept(this));
+        if(binaryOP.operator.contains("^")) {
+            sb.append("Pow(");
+            sb.append(binaryOP.leftExpression.accept(this));
+            sb.append(",");
+            sb.append(binaryOP.rightExpression.accept(this));
+            sb.append(")");
+        }
+        else {
+            sb.append(binaryOP.leftExpression.accept(this));
+            sb.append(binaryOP.operator);
+            sb.append(binaryOP.rightExpression.accept(this));
+        }
+
         if(binaryOP.capsuled) {
             sb.append(")");
         }
diff --git a/src/Application.java b/src/Application.java
index 096051b99b3a5c4a4cfc0d1b82f2acabaf3d8ab4..b25cd9ffc6a1585f394ddb33f6508b39db69ceef 100644
--- a/src/Application.java
+++ b/src/Application.java
@@ -1,14 +1,11 @@
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 
 public class Application {
     public static void main(String[] args) {
-        //LinkedList<String> expressions = new LinkedList<>()
-        //LinkedList<String> expressions = new List<>();
         List<String> expressions = new LinkedList<>();
         //Reads the file "expressions.txt" and adds its values to a list
         BufferedReader reader;
@@ -43,7 +40,9 @@ public class Application {
                 ASTPrinter printer = new ASTPrinter();
                 Evaluator evaluator = new Evaluator();
                 System.out.println("Printing: '" + printer.visit(exp) + "'");
+                String s = printer.visit(exp);
                 System.out.println("Evaluating: '" + evaluator.visit(exp) + "'");
+                SwingFunctionPlotter.plotFunction(s);
             }
             catch (ParserException e) {
                 System.out.println(e.getMessage());
diff --git a/src/Evaluator.java b/src/Evaluator.java
index 2c65e1b3215c13fd68f65a2f7277af197c1efc4f..b9979c778266a973dd424cf79e7eea1769dfcd1b 100644
--- a/src/Evaluator.java
+++ b/src/Evaluator.java
@@ -3,7 +3,11 @@ public class Evaluator implements Visitor<Double>{
     @Override
     public Double visit(final Parser.BinaryOperation binaryOP) {
         double result = binaryOP.leftExpression.accept(this);
-        double rOperand = binaryOP.rightExpression.accept(this);
+        Double rOperand = binaryOP.rightExpression.accept(this);
+        if(rOperand==null) {
+
+
+        }
         switch (binaryOP.operator.charAt(0)) {
             case '+':
                 result += rOperand;
diff --git a/src/SwingFunctionPlotter.java b/src/SwingFunctionPlotter.java
new file mode 100644
index 0000000000000000000000000000000000000000..110dc614322009d5b95b85ec38246c21fa8c4aba
--- /dev/null
+++ b/src/SwingFunctionPlotter.java
@@ -0,0 +1,44 @@
+import com.mindfusion.charting.FunctionSeries;
+import com.mindfusion.charting.swing.LineChart;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class SwingFunctionPlotter extends JFrame {
+    private static final long serialVersionUID = 1L;
+
+    public static void plotFunction(String function) {
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                try {
+                    new SwingFunctionPlotter(function).setVisible(true);
+                }
+                catch(Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+    }
+
+    protected SwingFunctionPlotter(String function) {
+        setDefaultCloseOperation(EXIT_ON_CLOSE);
+        setSize(650, 400);
+        setTitle("Java Swing Library for Charts and Gauges: FunctionSeries");
+
+        getContentPane().add(initializeChart(function), BorderLayout.CENTER);
+    }
+
+    private LineChart initializeChart(String function) {
+        LineChart lineChart = new LineChart();
+        FunctionSeries series1;
+        try {
+            series1 = new FunctionSeries(function,1000, -20, 20);
+            series1.setTitle("Current function");
+            lineChart.getSeries().add(series1);
+        }
+        catch(Exception e) {
+            e.printStackTrace();
+        }
+        return lineChart;
+    }
+}
\ No newline at end of file