diff --git a/.gitattributes b/.gitattributes
index 26329ad6a8a61e5d60053cc88397f697364fe6a6..90208c8beb3837944becdaadafabedc8c85c072d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -40,6 +40,7 @@ CAL/CalibrationProcessing/lib/__init__.py -text
 CAL/CalibrationProcessing/lib/process_holography_dataset.py -text
 CAL/CalibrationProcessing/lib/processing/__init__.py -text
 CAL/CalibrationProcessing/lib/processing/averaging.py -text
+CAL/CalibrationProcessing/lib/processing/matrices.py -text
 CAL/CalibrationProcessing/test/CMakeLists.txt -text
 CAL/CalibrationProcessing/test/profiling_processing.py -text
 CAL/CalibrationProcessing/test/t_processing.py -text
diff --git a/CAL/CalibrationCommon/test/t_holography_dataset_class.py b/CAL/CalibrationCommon/test/t_holography_dataset_class.py
index 3faa1b155cb60fbec0b6a683b0fb05670821a8b1..c7840898ccd35d59579d19d9081b8e0a96410d8a 100755
--- a/CAL/CalibrationCommon/test/t_holography_dataset_class.py
+++ b/CAL/CalibrationCommon/test/t_holography_dataset_class.py
@@ -48,6 +48,7 @@ class TestHolographyDatasetClass(unittest.TestCase):
             read_dict = HolographyDataset._read_grouped_data(h5file, '/test')
             self.assertDictEqual(test_dict, read_dict)
 
+
 if __name__ == '__main__':
     logging.basicConfig(format='%(name)s : %(message)s')
     unittest.main()
diff --git a/CAL/CalibrationProcessing/lib/CMakeLists.txt b/CAL/CalibrationProcessing/lib/CMakeLists.txt
index 3f0c1839a8f3cee8f849e7f2e0c276228db3a9be..38c673e25925f17c0af28a11d64af92dba1972c3 100644
--- a/CAL/CalibrationProcessing/lib/CMakeLists.txt
+++ b/CAL/CalibrationProcessing/lib/CMakeLists.txt
@@ -20,6 +20,7 @@
 python_install(
     __init__.py
     processing/averaging.py
+    processing/matrices.py
     processing/__init__.py
     DESTINATION lofar/calibration)
 
diff --git a/CAL/CalibrationProcessing/lib/processing/__init__.py b/CAL/CalibrationProcessing/lib/processing/__init__.py
index 98a1f6b0511db49631206a1484d3cc29c9cc0d95..a26b7d7eb0ddb5d3ebae74aacc521aea1e25953b 100644
--- a/CAL/CalibrationProcessing/lib/processing/__init__.py
+++ b/CAL/CalibrationProcessing/lib/processing/__init__.py
@@ -1 +1,2 @@
-from .averaging import *
\ No newline at end of file
+from .averaging import *
+from .matrices import *
\ No newline at end of file
diff --git a/CAL/CalibrationProcessing/lib/processing/matrices.py b/CAL/CalibrationProcessing/lib/processing/matrices.py
new file mode 100644
index 0000000000000000000000000000000000000000..232678327b5c67240c464230cb97d96c8c26104d
--- /dev/null
+++ b/CAL/CalibrationProcessing/lib/processing/matrices.py
@@ -0,0 +1,29 @@
+import logging
+
+import numpy
+
+logger = logging.getLogger(__name__)
+
+
+def extract_crosscorrelation_matrices_from_HDS_datatable(datatable):
+    new_shape = (2, 2, datatable.shape[0])
+    new_array = numpy.zeros(shape=new_shape, dtype=numpy.complex)
+    new_array[0, 0, :] = datatable['XX']
+    new_array[0, 1, :] = datatable['XY']
+    new_array[1, 0, :] = datatable['YX']
+    new_array[1, 1, :] = datatable['YY']
+
+    return new_array
+
+
+def invert_crosscorrelation_matrices(cross_correlation_matrices):
+    """
+    Invert the matrices along the last axis
+    :param cross_correlation_matrices: matrices to invert
+    :type cross_correlation_matrices: numpy.ndarray
+    :return:
+    """
+    assert cross_correlation_matrices.ndim >= 3
+
+    return numpy.linalg.inv(cross_correlation_matrices)
+
diff --git a/CAL/CalibrationProcessing/test/t_processing.py b/CAL/CalibrationProcessing/test/t_processing.py
index f027cbb5606debc6fb439e21fce04c2bb72e42c6..d9f445b080b693da10684c46356916070f528f76 100755
--- a/CAL/CalibrationProcessing/test/t_processing.py
+++ b/CAL/CalibrationProcessing/test/t_processing.py
@@ -1,10 +1,10 @@
 import logging
 import unittest
 
-
 from lofar.calibration.common.datacontainers import HolographyDataset
 from lofar.calibration.processing import average_dataset_by_sample, average_values_by_sample
-from glob import glob
+from lofar.calibration.common.datacontainers.holography_dataset_definitions import HDS_data_sample_type
+from lofar.calibration.processing.matrices import extract_crosscorrelation_matrices_from_HDS_datatable
 logger = logging.getLogger('t_processing')
 import numpy
 
@@ -13,7 +13,6 @@ import numpy
 SAMPLE_DATASET = '/data/test/HolographyObservation/CS001HBA0.hdf5'
 
 
-
 class TestProcessing(unittest.TestCase):
     def setUp(self):
         pass
@@ -54,7 +53,8 @@ class TestProcessing(unittest.TestCase):
 
     def test_average_datatable_by_sample(self):
         holography_dataset = HolographyDataset.load_from_file(SAMPLE_DATASET)
-        averaged_data = average_dataset_by_sample(SAMPLE_DATASET, 2)
+        averaged_data = average_dataset_by_sample(SAMPLE_DATASET, 2).derived_data[
+            'PRE_NORMALIZATION_AVERAGE_TIME']
         self.assert_recursive_dict_have_the_same_keys(holography_dataset.data, averaged_data)
 
     def assert_recursive_dict_have_the_same_keys(self, expected, actual):
@@ -77,7 +77,21 @@ class TestProcessing(unittest.TestCase):
             else:
                 self.assertTrue(False, 'Expected key {} is missing in the actual dict'.format(key))
 
+    def test_matrix_inversion(self):
+        test_data = numpy.zeros(3, dtype=HDS_data_sample_type)
+        numpy.random.seed(3)
+        test_data['XX'] = numpy.random.randn(3) + 1.j*numpy.random.randn(3)
+        test_data['XY'] = numpy.random.randn(3) + 1.j * numpy.random.randn(3)
+        test_data['YX'] = numpy.random.randn(3) + 1.j * numpy.random.randn(3)
+        test_data['YY'] = numpy.random.randn(3) + 1.j * numpy.random.randn(3)
+
+        matrices_from_data = extract_crosscorrelation_matrices_from_HDS_datatable(test_data)
+
+        numpy.testing.assert_almost_equal(test_data['XX'], matrices_from_data[0, 0, :])
+        numpy.testing.assert_almost_equal(test_data['XY'], matrices_from_data[0, 1, :])
+        numpy.testing.assert_almost_equal(test_data['YX'], matrices_from_data[1, 0, :])
+        numpy.testing.assert_almost_equal(test_data['YY'], matrices_from_data[1, 1, :])
 
 if __name__ == '__main__':
     logging.basicConfig(format='%(name)s : %(message)s')
-    unittest.main()
\ No newline at end of file
+    unittest.main()