diff --git a/phasecalculator/runners/vleanalysisrunner.py b/phasecalculator/runners/vleanalysisrunner.py
index de7b32c3fc9557fffe297175c04874fd897600bd..801460a6a7ad9817d55e87a8f9ff05e5680e88ad 100755
--- a/phasecalculator/runners/vleanalysisrunner.py
+++ b/phasecalculator/runners/vleanalysisrunner.py
@@ -21,12 +21,60 @@ Script for running VLE analysis.
 """
 
 import logging
+import phasecalculator.analysis.vleanalysis as vleanalysis
 import phasecalculator.runners.phasetransferrunner as phaserun
 
 logging.basicConfig()
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.WARN)
 
+def calculate_and_process_vle_data(jar_path, phase_filename, phase_output_filename, csv_filename, **kwargs):
+    """Calculate and process VLE data.
+
+    Parameters
+    ----------
+    jar_path : str
+        Path to jar executable.
+    phase_filename : str
+        Filename for phase XML.
+    phase_output_filename : str
+        Output filename for result output.
+    csv_filename : str
+        CSV filename for output information.
+    memory_req : str, optional
+        Memory settings for jar executable. The default is None.
+
+    Raises
+    ------
+    FileNotFoundError
+        If jar file is not found.
+    
+
+    Returns
+    -------
+    None.
+
+    """
+    run_vle_calculation(jar_path, phase_filename, phase_output_filename, **kwargs)
+    process_vle_data(phase_output_filename, csv_filename)
+
+
+def process_vle_data(calculated_phase_filename, csv_filename):
+    """Process phase XML and write to csv file.
+
+    Parameters
+    ----------
+    phase_filename : str
+        Phase XML filename.
+    csv_filename : str
+        CSV filename for output information.
+
+    Returns
+    -------
+    None.
+
+    """
+    return vleanalysis.process_vle_data(calculated_phase_filename, csv_filename)
 
 def run_vle_calculation(jar_path, phase_filename, output_filename, **kwargs):
     """Run VLE phase calculation.
diff --git a/phasecalculator/test/resources/expected_phasesummary.csv b/phasecalculator/test/resources/expected_phasesummary.csv
new file mode 100644
index 0000000000000000000000000000000000000000..0565fe35dbfbf58ed8b7b1fe7c5bff5d0c33e927
--- /dev/null
+++ b/phasecalculator/test/resources/expected_phasesummary.csv
@@ -0,0 +1,3 @@
+solvent_id	temperature	phase type	concentrations[name, value]
+1-butanol0.165water0.835298.000KELVIN	298.0	GAS	LRHPLDYGYMQRHN-UHFFFAOYSA-N	0.0000021914	XLYOFNOQVPJJNP-UHFFFAOYSA-N	0.0008190888
+1-butanol0.165water0.835298.000KELVIN	298.0	CONDENSED	LRHPLDYGYMQRHN-UHFFFAOYSA-N	4.4440094829	XLYOFNOQVPJJNP-UHFFFAOYSA-N	30.7036536932
diff --git a/phasecalculator/test/runnerstest/vleanalysisrunnertest.py b/phasecalculator/test/runnerstest/vleanalysisrunnertest.py
index 06d4f935758cda00a34e20f84a610319b078ae38..e4e0a80a8bef40f6f3934903ec43b2d3412ca60c 100755
--- a/phasecalculator/test/runnerstest/vleanalysisrunnertest.py
+++ b/phasecalculator/test/runnerstest/vleanalysisrunnertest.py
@@ -61,11 +61,16 @@ class VLEAnalysisRunnerTestCase(unittest.TestCase):
             .as_posix()
         )
         self.phase_output_filename = (
-            (self.parent_directory / "resources" / "expected_phaseout.xml")
+            (self.parent_directory / "resources" / "expected_phasecalculated.xml")
             .absolute()
             .as_posix()
         )
-
+        self.expected_phas_csv = (
+            (self.parent_directory / "resources" / "expected_phasesummary.csv")
+            .absolute()
+            .as_posix()
+        )
+        self.output_file = "phase_summary.csv"
     def tearDown(self):
         """Clean up after tests.
 
@@ -74,7 +79,39 @@ class VLEAnalysisRunnerTestCase(unittest.TestCase):
         None.
 
         """
+        if os.path.isfile(self.output_file):
+            os.remove(self.output_file)
+    def test_calculate_and_process_vle_data(self):
+        """Test expected output produced.
+
+        Returns
+        -------
+        None.
 
+        """
+        vlerun.calculate_and_process_vle_data(self.example_jar,
+                                              self.phase_filename,
+                                              self.phase_output_filename,
+                                              self.output_file)
+        with open(self.output_file, "r") as act_file:
+            actual_contents = act_file.read()
+            with open(self.expected_phas_csv, "r") as exp_file:
+                expected_contents = exp_file.read()
+                self.assertMultiLineEqual(expected_contents, actual_contents)
+    def test_process_vle_data(self):
+        """Test expected output produced.
+
+        Returns
+        -------
+        None.
+
+        """
+        vlerun.process_vle_data(self.phase_output_filename, self.output_file)
+        with open(self.output_file, "r") as act_file:
+            actual_contents = act_file.read()
+            with open(self.expected_phas_csv, "r") as exp_file:
+                expected_contents = exp_file.read()
+                self.assertMultiLineEqual(expected_contents, actual_contents)
     def test_run_vle_calculation(self):
         """Test expected system call is made.