diff --git a/plotter/Args.py b/plotter/Args.py
index e1c1947e7d1e46124913cb5ca6fec9c9a9c86202..4b8170359331e1347515d4ef2ed6c598c4901610 100644
--- a/plotter/Args.py
+++ b/plotter/Args.py
@@ -1,7 +1,7 @@
 import sys
 import numpy as np
 class Args:
-    def __init__(self, filename, func, var=None, mval=None, oname=None, out=None, ndim = None, min_y = None, max_y = None, title=None, levels=None):
+    def __init__(self, filename, func, var=None, mval=None, oname=None, out=None, ndim = None, min_y = None, max_y = None, title=None, levels=None, plane_type = None, slice_position = None):
         if out == "plotter_lib_pngs/":
             print("Output directory name can't be equal to " + out)
             sys.exit(-1)
@@ -17,6 +17,8 @@ class Args:
         self.min_y = min_y
         self.max_y = max_y
         self.levels = levels
+        self.plane_type = plane_type
+        self.slice_position = slice_position
 
         self.CorrVals()
 
diff --git a/plotter/Plotter.py b/plotter/Plotter.py
index d8effa125be27bb6cc32ee7d7bed427fc3259255..3e6979ccb45955516dcfeb66933477bedc1e87ce 100755
--- a/plotter/Plotter.py
+++ b/plotter/Plotter.py
@@ -28,6 +28,8 @@ class Plotter:
         self.min_y = None
         self.max_y = None
         self.min_max_var_vals = None
+        self.plane_type = None
+        self.slice_position = None
 
     def __check_arg_dim_equiv(self, args):
         if args.var != None and args.mval != None:
@@ -42,7 +44,6 @@ class Plotter:
             names = d.variable_names
             var_names.append(np.array(names, dtype=object))
             
-            
         if(len(var_names) > 1):
             for i in range(1, len(var_names)):
                 if np.equal(var_names[0], var_names[i]).any() != True:
@@ -67,6 +68,8 @@ class Plotter:
         self.title = args.title
         self.min_y = args.min_y
         self.max_y = args.max_y
+        self.plane_type = args.plane_type
+        self.slice_position = args.slice_position
 
         if args.levels != None:
             self.levels = args.levels
@@ -77,7 +80,6 @@ class Plotter:
         self.if_save_result = kwargs.get('if_save_result', True)
 
         pData = []
-        
         for fname in self.filename:
             p = ProcData(fname)
             p.get_variable_names()
@@ -92,7 +94,7 @@ class Plotter:
                 self.ndim = 1
             elif args.func == self.plot_contour or args.func == self.ani_plot_contour:
                 self.ndim = 2
-            elif args.func == self.avg_plot:
+            elif args.func == self.avg_plot or args.func == self.slice:
                 self.ndim = 3
 
             if self.var == None and len(self.file_column_names) != 0:
@@ -440,6 +442,75 @@ class Plotter:
         elif self.ndim == 2:
             self.__plot_contour()
 
+    def __find_closest(self, arr, val):
+       idx = np.abs(arr - val).argmin()
+       return idx
+    
+    def __slice(self):
+        os.system("mkdir -p " + self.out)
+
+        if self.plane_type == 'xy':
+            x_name = self.file_column_names[0]
+            y_name = self.file_column_names[1]
+
+            z_name = self.file_column_names[2]
+            arr = self.file_data[0].data[z_name]
+            pos = self.__find_closest(arr, self.slice_position)
+
+        elif self.plane_type == 'yz':
+            x_name = self.file_column_names[1]
+            y_name = self.file_column_names[2]
+
+            z_name = self.file_column_names[0]
+            arr = self.file_data[0].data[z_name]
+            pos = self.__find_closest(arr, self.slice_position)
+
+        elif self.plane_type == 'xz':
+            x_name = self.file_column_names[0]
+            y_name = self.file_column_names[2]
+
+            z_name = self.file_column_names[1]
+            arr = self.file_data[0].data[z_name]
+            pos = self.__find_closest(arr, self.slice_position)
+
+        if self.oname == None:
+            fig_names = self.var
+            fig_end = ".png"
+        else:
+            fig_names = self.oname
+            fig_end = ""
+        
+        for i in range(self.fig_count):
+            fig,ax=plt.subplots(1,1)
+            
+            if self.title == None:
+                title = self.var[i]
+            else:
+                title = self.title
+
+            if self.plane_type == 'xy':
+                Z = self.file_data[0].data[self.var[i]][pos, :, :]
+
+            elif self.plane_type == 'xz':
+                Z = self.file_data[0].data[self.var[i]][:, pos, :]
+
+            elif self.plane_type == 'yz':
+                Z = self.file_data[0].data[self.var[i]][:, :, pos]
+        
+            X = self.file_data[0].data[x_name]
+            Y = self.file_data[0].data[y_name]
+
+            cp = ax.contourf(X, Y, Z)
+            
+            fig.colorbar(cp) # Add a colorbar to a plot
+            ax.set_title(title)
+            ax.set_xlabel(x_name)
+            ax.set_ylabel(y_name)
+            
+            if self.if_manual_plot: plt.show()
+            else: plt.close(fig)
+            if self.if_save_result: fig.savefig(self.out + fig_names[i] + fig_end)
+
     def dump(self):
         self.__dump()
 
@@ -472,4 +543,8 @@ class Plotter:
     
     def multiple_plot(self):
         self.__get_min_max_ax()
-        self.__multiple_plot()
\ No newline at end of file
+        self.__multiple_plot()
+
+    def slice(self):
+        self.__get_min_max_bar()
+        self.__slice()
\ No newline at end of file
diff --git a/plotter/ProcData.py b/plotter/ProcData.py
index e3183eb18ab4fe33018696555f872d5c53756724..eeae9cfe1167dd599f6c2950ed53b69ea1798fcd 100755
--- a/plotter/ProcData.py
+++ b/plotter/ProcData.py
@@ -3,6 +3,7 @@ import os
 import numpy as np
 from .binSubfunctions import *
 import re
+from decimal import Decimal
 
 class ProcData:
     def __init__(self, filename=None):
@@ -118,7 +119,25 @@ class ProcData:
             J = int(file_data[2].split(',')[1].split('=')[1])
             K = int(file_data[2].split(',')[2].split('=')[1])
 
-        file_data = np.loadtxt(self.filename, dtype = float, skiprows=3, unpack=False, ndmin=2, encoding='utf-8')
+        with open(self.filename, 'r') as f:
+            file_data = f.read().split('\n')
+        f.close()
+
+        skip_rows = 0
+        continue_flag = True
+        for row in file_data:
+            for word in row.split(' '):
+                try:
+                    Decimal(word)
+                    continue_flag = False
+                except:
+                    break
+            if continue_flag == True:
+                skip_rows += 1
+            else:
+                break
+
+        file_data = np.loadtxt(self.filename, dtype = float, skiprows=skip_rows, unpack=False, ndmin=2, encoding='utf-8')
         file_data = file_data.T
 
         if self.var == None:
@@ -135,9 +154,9 @@ class ProcData:
         self.data[self.variable_names[0]] = file_data[0][0:I]
 
         if ndim == 2:
-            self.data[self.variable_names[1]] = file_data[1][: : I]
+            self.data[self.variable_names[1]] = file_data[1][0: I * J : I]
         elif ndim == 3:
-            self.data[self.variable_names[1]] = file_data[1][: : I]
+            self.data[self.variable_names[1]] = file_data[1][0: I * J : I]
             self.data[self.variable_names[2]] = file_data[2][: : I * J]
 
         i = 0
@@ -154,7 +173,6 @@ class ProcData:
         self.data['cy'] = J
         self.data['cz'] = K
 
-    
     def __read_bin(self):
         f = open(self.filename,'rb')
         fid = read_int(f)
@@ -312,8 +330,6 @@ class ProcData:
         self.var = column_names
         self.mval = mval
 
-        # print(ndim, self.filename)
-
         if filename_extension == '.plt':
             self.__read_plt(ndim)
         elif filename_extension == '.nsx':
diff --git a/plotter/__init__.py b/plotter/__init__.py
index 4c896fe2aabf0f635ca1bd9ea0ce20792a179edc..ae8d0c61670057b4a1bde9ed0b0681b6a69ecdae 100755
--- a/plotter/__init__.py
+++ b/plotter/__init__.py
@@ -6,6 +6,7 @@ from .main import ani_plot
 from .main import plot_contour
 from .main import ani_plot_contour
 from .main import avg_plot
+from .main import slice
 from .main import plot_diff
 from .main import get_data
 from .main import multiple_plot
diff --git a/plotter/main.py b/plotter/main.py
index 7c9e06914691b85152b1f6fa950d8fe850eca662..c8de57a4386a576efa4886a2097a3ed5036344cc 100755
--- a/plotter/main.py
+++ b/plotter/main.py
@@ -66,6 +66,12 @@ def avg_plot(filename, out = './', oname = 'fig.png', var=[None], mval=[None]):
     Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
     Plot.avg_plot()
 
+def slice(filename, plane_type = 'xy', slice_position = 0, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None):
+    Plot = Plotter()
+    args = Args([filename], Plot.slice, var=var, mval=mval, oname=oname, out=out, plane_type=plane_type, slice_position=slice_position)
+    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
+    Plot.slice()
+
 def plot_diff(filename, ndim, out = './', oname = 'fig.png', var=[None], mval=[None]):
     Plot = Plotter()
     args = Args(filename, Plot.plot_diff, var=var, mval=mval, oname=oname, out=out, ndim=ndim)