diff --git a/solventmapcreator/io/solventxmlreader.py b/solventmapcreator/io/solventxmlreader.py
index 8b3798987d65a5f0879482646fd1653fc7d3c4e4..eac539d4c0a90509c505cde0d5682c4ba7408a4b 100644
--- a/solventmapcreator/io/solventxmlreader.py
+++ b/solventmapcreator/io/solventxmlreader.py
@@ -21,14 +21,26 @@ PHASE_NAMESPACE_DICT = {"phase":"http://www-hunter.ch.cam.ac.uk/PhaseSchema",
                         "ssip":"http://www-hunter.ch.cam.ac.uk/SSIP",
                         'cml':'http://www.xml-cml.org/schema'}
 
-def calculate_freactional_occupancy_for_solvent(solvent_element):
-    """
+IDEAL_MAX_SSIP_CONCENTRATION_MOLAR = 300.0
+
+def calculate_fractional_occupancy_for_solvent(solvent_element):
+    """This calculates the contribution to the fractional occupancy from the solvent.
     """
+    xpath_expression = "phase:Molecule"
+    molecule_element_list = solvent_element.xpath(xpath_expression, namespaces=PHASE_NAMESPACE_DICT)
+    solvent_fractional_occupancy = 0.0
+    for molecule_element in molecule_element_list:
+        fractional_occupancy_contribution = calculate_fractional_occupancy_contribution(molecule_element)
+        solvent_fractional_occupancy += fractional_occupancy_contribution
+    return solvent_fractional_occupancy
 
 def calculate_fractional_occupancy_contribution(molecule_element):
+    """This calculates the contribution to the fractional occupancy for this species.
     """
-    """
-
+    concentration_value = get_concentration_value(molecule_element)
+    number_of_ssips = get_number_of_ssips_in_molecule(molecule_element)
+    return (concentration_value * number_of_ssips)/IDEAL_MAX_SSIP_CONCENTRATION_MOLAR
+    
 def get_concentration_value(molecule_element):
     """This extracts the concentration.
     """
@@ -38,14 +50,14 @@ def get_concentration_value(molecule_element):
         return float(concentration_element_list[0].text)
     else:
         LOGGER.debug("len:")
-        LOGGER.debug(len(solvent_element_list))
-        LOGGER.debug(solvent_element_list)
+        LOGGER.debug(len(concentration_element_list))
+        LOGGER.debug(concentration_element_list)
         raise ValueError("Wrong number of Concentration Elements.")
 
 def get_number_of_ssips_in_molecule(molecule_element):
     """This extracts the SSIP elements and return the number.
     """
-    xpath_expression = "ssip:SSIP"
+    xpath_expression = "ssip:SSIPList/ssip:SSIP"
     ssip_element_list = molecule_element.xpath(xpath_expression, namespaces=PHASE_NAMESPACE_DICT)
     return len(ssip_element_list)
 
@@ -66,7 +78,7 @@ def create_solvent_xpath_expression(solvent_id):
     """This creates the xpath expression to extract the solvent Element based
     on solventID.
     """
-    return "phase:Solvent[@phase:solventID={:s}]".format(solvent_id)
+    return 'phase:Solvent[@phase:solventID="{:s}"]'.format(solvent_id)
 
 def read_element_tree(filename):
     """This reads in an xml file to an element tree.
diff --git a/solventmapcreator/test/iotest/solventxmlreadertest.py b/solventmapcreator/test/iotest/solventxmlreadertest.py
new file mode 100644
index 0000000000000000000000000000000000000000..e88530e571a723228911516be5a039f44c286ba1
--- /dev/null
+++ b/solventmapcreator/test/iotest/solventxmlreadertest.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Script containing tests for the solventxmlreader.
+
+@author: mark
+"""
+
+import logging
+import unittest
+from lxml import etree
+import solventmapcreator.io.solventxmlreader as solventxmlreader
+
+logging.basicConfig()
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.WARN)
+
+class SolventXMLReaderTestCase(unittest.TestCase):
+    """Test case for solventxmlreader script tests.
+    """
+    def setUp(self):
+        """Set up for tests.
+        """
+        self.solvent_list_xml = solventxmlreader.read_element_tree("resources/watersolvent.xml")
+        self.water_solvent_element = self.solvent_list_xml.xpath("phase:Solvent", namespaces=solventxmlreader.PHASE_NAMESPACE_DICT)[0]
+        self.water_molecule_element = self.water_solvent_element.xpath("phase:Molecule", namespaces=solventxmlreader.PHASE_NAMESPACE_DICT)[0]
+        self.maxDiff=None
+    def tearDown(self):
+        """Tear down after tests.
+        """
+        del self.solvent_list_xml
+        del self.water_solvent_element
+        del self.water_molecule_element
+    def test_calculate_fractional_occupancy_for_solvent(self):
+        """Test to see if expected value is returned for the fractional
+        occupancy.
+        """
+        expected_value = 55.35 * 4.0 /300.0
+        actual_value = solventxmlreader.calculate_fractional_occupancy_for_solvent(self.water_solvent_element)
+        self.assertAlmostEqual(expected_value, actual_value)
+    def test_calculate_fractional_occupancy_contribution(self):
+        """Test to see if expected contribution to fractional occupancy is returned.
+        """
+        expected_value = 55.35* 4.0 / 300.0
+        actual_value = solventxmlreader.calculate_fractional_occupancy_contribution(self.water_molecule_element)
+        self.assertAlmostEqual(expected_value, actual_value)
+    def test_get_concentration_value(self):
+        """Test to see if expected concentration is returned
+        """
+        expected_value = 55.3500
+        actual_value = solventxmlreader.get_concentration_value(self.water_molecule_element)
+        self.assertAlmostEqual(expected_value, actual_value)
+    def test_get_number_of_ssips_in_molecule(self):
+        """Test to see if expected number of SSIPs is returned.
+        """
+        expected_value = 4
+        actual_value = solventxmlreader.get_number_of_ssips_in_molecule(self.water_molecule_element)
+        self.assertEqual(expected_value, actual_value)
+    def test_get_solvent_element_by_id(self):
+        """Test to see if expected solvent element is returned.
+        """
+        expected_xml = ('<phase:Solvent xmlns:phase="http://www-hunter.ch.cam.ac.uk/PhaseSchema" xmlns:cml="http://www.xml-cml.org/schema" xmlns:ssip="http://www-hunter.ch.cam.ac.uk/SSIP" phase:solventID="water" phase:solven' +
+                        'tName="water" phase:numberOfMolecules="1">\n' + 
+                        '    <phase:Molecule phase:stdInChIKey="XLYOFNOQVPJJNP-UHFFFAOYSA-N">\n' +
+                        '      <ssip:SSIPList>\n' +
+                        '\t\t\t<ssip:SurfaceInformation numberOfPoints="1000">\n' +
+                        '\t\t\t\t<ssip:IsosurfaceDensity>0.002</ssip:IsosurfaceDensity>\n' +
+                        '\t\t\t\t<ssip:TotalSurfaceArea>10.0</ssip:TotalSurfaceArea>\n' +
+                        '\t\t\t\t<ssip:NegativeSurfaceArea>5.0</ssip:NegativeSurfaceArea>\n' +
+                        '\t\t\t\t<ssip:PositiveSurfaceArea>5.0</ssip:PositiveSurfaceArea>\n' +
+                        '\t\t\t</ssip:SurfaceInformation>\n' +
+                        '\t\t\t<ssip:SSIP x3="1.0" y3="0.0" z3="0.0" nearestAtomID="a1">2.8</ssip:SSIP>\n' +
+                        '\t\t\t<ssip:SSIP x3="1.0" y3="1.0" z3="1.0" nearestAtomID="a1">2.8</ssip:SSIP>\n' +
+                        '\t\t\t<ssip:SSIP x3="0.0" y3="1.0" z3="1.0" nearestAtomID="a1">-4.5</ssip:SSIP>\n' +
+                        '\t\t\t<ssip:SSIP x3="0.0" y3="1.0" z3="0.0" nearestAtomID="a1">-4.5</ssip:SSIP>\n' +
+                        '\t\t</ssip:SSIPList>\n' +
+                        '      <phase:Concentration phase:units="MOLAR">55.350000</phase:Concentration>\n' +
+                        '    </phase:Molecule>\n' +
+                        '  </phase:Solvent>\n')
+        actual_xml = solventxmlreader.get_solvent_element_by_id(self.solvent_list_xml, "water")
+        self.assertEqual(expected_xml, etree.tounicode(actual_xml))
+    def test_create_solvent_xpath_expression(self):
+        """Test to seeif expected xpath expression is created.
+        """
+        expected_expression = 'phase:Solvent[@phase:solventID="water"]'
+        actual_expression = solventxmlreader.create_solvent_xpath_expression("water")
+        self.assertEqual(expected_expression, actual_expression)
+    def test_read_element_tree(self):
+        """Test to see if expected file is read in.
+        """
+        expected_xml = ('<phase:SolventList xmlns:cml="http://www.xml-cml.org/sch' +
+                        'ema" xmlns:phase="http://www-hunter.ch.cam.ac.uk/PhaseSc' +
+                        'hema" xmlns:ssip="http://www-hunter.ch.cam.ac.uk/SSIP">' +
+                        '\n  <phase:Solvent phase:solventID="water" phase:solven' +
+                        'tName="water" phase:numberOfMolecules="1">\n' + 
+                        '    <phase:Molecule phase:stdInChIKey="XLYOFNOQVPJJNP-UHFFFAOYSA-N">\n' +
+                        '      <ssip:SSIPList>\n' +
+                        '\t\t\t<ssip:SurfaceInformation numberOfPoints="1000">\n' +
+                        '\t\t\t\t<ssip:IsosurfaceDensity>0.002</ssip:IsosurfaceDensity>\n' +
+                        '\t\t\t\t<ssip:TotalSurfaceArea>10.0</ssip:TotalSurfaceArea>\n' +
+                        '\t\t\t\t<ssip:NegativeSurfaceArea>5.0</ssip:NegativeSurfaceArea>\n' +
+                        '\t\t\t\t<ssip:PositiveSurfaceArea>5.0</ssip:PositiveSurfaceArea>\n' +
+                        '\t\t\t</ssip:SurfaceInformation>\n' +
+                        '\t\t\t<ssip:SSIP x3="1.0" y3="0.0" z3="0.0" nearestAtomID="a1">2.8</ssip:SSIP>\n' +
+                        '\t\t\t<ssip:SSIP x3="1.0" y3="1.0" z3="1.0" nearestAtomID="a1">2.8</ssip:SSIP>\n' +
+                        '\t\t\t<ssip:SSIP x3="0.0" y3="1.0" z3="1.0" nearestAtomID="a1">-4.5</ssip:SSIP>\n' +
+                        '\t\t\t<ssip:SSIP x3="0.0" y3="1.0" z3="0.0" nearestAtomID="a1">-4.5</ssip:SSIP>\n' +
+                        '\t\t</ssip:SSIPList>\n' +
+                        '      <phase:Concentration phase:units="MOLAR">55.350000</phase:Concentration>\n' +
+                        '    </phase:Molecule>\n' +
+                        '  </phase:Solvent>\n' +
+                        '</phase:SolventList>')
+        actual_xml = solventxmlreader.read_element_tree("resources/watersolvent.xml")
+        self.assertEqual(expected_xml, etree.tounicode(actual_xml))
diff --git a/solventmapcreator/test/solvationmapcreatortests.py b/solventmapcreator/test/solvationmapcreatortests.py
index 3b64ce011c1059b050c68584f0be3318d144e9bf..9f274dc6b15477900713bedb29c7789dc99dcc40 100644
--- a/solventmapcreator/test/solvationmapcreatortests.py
+++ b/solventmapcreator/test/solvationmapcreatortests.py
@@ -9,6 +9,7 @@ Script for running the tests.
 import logging
 import unittest
 from solventmapcreator.test.iotest.solvationenergyreadertest import SolvationEnergyReaderTestCase
+from solventmapcreator.test.iotest.solventxmlreadertest import SolventXMLReaderTestCase
 from solventmapcreator.test.iotest.polynomialdatawritertest import PolynomialDataWriterTestCase
 from solventmapcreator.test.iotest.polynomialdatareadertest import PolynomialDataReaderTestCase
 from solventmapcreator.test.solvationcalculationtest.solvationcalculatortest import SolvationCalculatorTestCase
@@ -19,8 +20,8 @@ logging.basicConfig()
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.WARN)
 
-IO_TEST_CASES = [SolvationEnergyReaderTestCase, PolynomialDataWriterTestCase,
-                 PolynomialDataReaderTestCase]
+IO_TEST_CASES = [SolvationEnergyReaderTestCase, SolventXMLReaderTestCase,
+                 PolynomialDataWriterTestCase, PolynomialDataReaderTestCase]
 
 SOLVATION_CALCULATION_TEST_CASES = [SolvationCalculatorTestCase]