diff --git a/include/plotting/plotting.hpp b/include/plotting/plotting.hpp
new file mode 100644
index 0000000..9f8fcd3
--- /dev/null
+++ b/include/plotting/plotting.hpp
@@ -0,0 +1,79 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Piotr Krysik <pkrysik@elka.pw.edu.pl>.
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#define USE_CXX (__cplusplus >= 201103)
+
+#include <vector>
+#include <armadillo>
+#include <string>
+#include <boost/make_shared.hpp>
+
+#include "gnuplot-iostream.h"
+
+boost::shared_ptr<Gnuplot> current_figure;
+
+void imagesc(arma::mat & x){
+    Gnuplot gp;
+	gp << "set palette rgb 3,2,2;";
+   gp << "plot ";
+ 	gp << gp.file1d(x) << "matrix with image";
+	gp << std::endl;
+}
+
+void plot(arma::cx_mat & x, std::string title){
+   arma::mat y = arma::abs(x);
+   if(current_figure.get()==NULL){
+      current_figure = boost::make_shared<Gnuplot>();
+   }
+   (*current_figure) << "plot ";
+   
+   (*current_figure) << current_figure->file1d(y) <<"title \'"  << titl
+   e << "\' with lines ";
+   (*current_figure) << std::endl; 
+}
+
+void replot(arma::cx_mat & x, std::string title){
+   arma::mat y = arma::abs(x);
+   if(current_figure.get()==NULL){
+      current_figure = boost::make_shared<Gnuplot>();
+   }
+   (*current_figure) << "replot ";
+   (*current_figure) << current_figure->file1d(y) <<"title \'"  << title << "\' with lines ";
+   (*current_figure) << std::endl; 
+}
+
+template<typename T>
+void plot(std::vector<T> & x){
+   arma::cx_mat y = arma::conv_to<arma::cx_mat>::from(x);
+   plot(y,"");
+}
+
+template<typename T>
+void plot(std::vector<T> & x, std::string title){
+   arma::cx_mat y = arma::conv_to<arma::cx_mat>::from(x);
+   plot(y,title);
+}
+
+template<typename T>
+void replot(std::vector<T> & x, std::string title){
+   arma::cx_mat y = arma::conv_to<arma::cx_mat>::from(x);
+   replot(y,title);
+}
+
