diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt
index d4f84091f1df6f8075374ddf7d9f686b262d42fb..b19bc5756d7283c1e0015f7bb9f1f78483055034 100644
--- a/bin/CMakeLists.txt
+++ b/bin/CMakeLists.txt
@@ -1,3 +1,3 @@
 # $Id$
 
-lofar_add_bin_scripts(generatesip feedback2sip)
+lofar_add_bin_scripts(generatesip feedback2sip validatesip)
diff --git a/bin/validatesip b/bin/validatesip
new file mode 100644
index 0000000000000000000000000000000000000000..b2548323b6f33ad37bb9227a2210584ab598e6f2
--- /dev/null
+++ b/bin/validatesip
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+
+from lofar.lta.sip.validator import main
+import sys
+
+
+XSD_PATH = "/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd" #  # todo fix path for distribution
+
+if __name__ == '__main__':
+    main(sys.argv[1], XSD_PATH)
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 00dedb6b092d2fff6320ff6e3cb3e205a3cf78ad..a40a5282bdc2c7d2bc16a85fe6b74639e61096cf 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -6,8 +6,11 @@ include(PythonInstall)
 set(_py_files
   __init__.py
   siplib.py
+  ltasip.py
   feedback.py
   validator.py
+  constants.py
+  station_coordinates.conf
 )
 
 python_install(${_py_files}
diff --git a/lib/ltasip.py b/lib/ltasip.py
index 1666f3aa34db18a3d5676eb5a9e4f7af9f8af657..cbd5ac8415d540e1fff40208f6791f0ec6c0e59a 100644
--- a/lib/ltasip.py
+++ b/lib/ltasip.py
@@ -1,7 +1,7 @@
 # ./ltasip.py
 # -*- coding: utf-8 -*-
 # PyXB bindings for NM:4d7a8ef1458fc65d34d2aea044869f9c907a2072
-# Generated 2016-06-09 09:18:35.117957 by PyXB version 1.2.4 using Python 2.7.6.final.0
+# Generated 2016-06-28 17:11:54.444316 by PyXB version 1.2.5-DEV using Python 2.7.6.final.0
 # Namespace http://www.astron.nl/SIP-Lofar
 
 from __future__ import unicode_literals
@@ -13,16 +13,19 @@ import pyxb.utils.utility
 import pyxb.utils.domutils
 import sys
 import pyxb.utils.six as _six
-
 # Unique identifier for bindings created at the same time
-_GenerationUID = pyxb.utils.utility.UniqueIdentifier('urn:uuid:60ae2b16-2e12-11e6-a2c3-28d2444d27e5')
+_GenerationUID = pyxb.utils.utility.UniqueIdentifier('urn:uuid:a5eb6646-3d42-11e6-961f-28d2444d27e5')
 
 # Version of PyXB used to generate the bindings
-_PyXBVersion = '1.2.4'
+_PyXBVersion = '1.2.5-DEV'
 # Generated bindings are not compatible across PyXB versions
 if pyxb.__version__ != _PyXBVersion:
     raise pyxb.PyXBVersionError(_PyXBVersion)
 
+# A holder for module-level binding classes so we can access them from
+# inside class definitions where property names may conflict.
+_module_typeBindings = pyxb.utils.utility.Object()
+
 # Import bindings for namespaces imported into schema
 import pyxb.binding.datatypes
 
@@ -88,6 +91,7 @@ FrequencyUnit.MHz = FrequencyUnit._CF_enumeration.addEnumeration(unicode_value='
 FrequencyUnit.GHz = FrequencyUnit._CF_enumeration.addEnumeration(unicode_value='GHz', tag='GHz')
 FrequencyUnit._InitializeFacetMap(FrequencyUnit._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'FrequencyUnit', FrequencyUnit)
+_module_typeBindings.FrequencyUnit = FrequencyUnit
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}LengthUnit
 class LengthUnit (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -102,6 +106,7 @@ LengthUnit.m = LengthUnit._CF_enumeration.addEnumeration(unicode_value='m', tag=
 LengthUnit.km = LengthUnit._CF_enumeration.addEnumeration(unicode_value='km', tag='km')
 LengthUnit._InitializeFacetMap(LengthUnit._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'LengthUnit', LengthUnit)
+_module_typeBindings.LengthUnit = LengthUnit
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}TimeUnit
 class TimeUnit (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -118,6 +123,7 @@ TimeUnit.us = TimeUnit._CF_enumeration.addEnumeration(unicode_value='us', tag='u
 TimeUnit.ns = TimeUnit._CF_enumeration.addEnumeration(unicode_value='ns', tag='ns')
 TimeUnit._InitializeFacetMap(TimeUnit._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'TimeUnit', TimeUnit)
+_module_typeBindings.TimeUnit = TimeUnit
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}AngleUnit
 class AngleUnit (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -133,6 +139,7 @@ AngleUnit.degrees = AngleUnit._CF_enumeration.addEnumeration(unicode_value='degr
 AngleUnit.arcsec = AngleUnit._CF_enumeration.addEnumeration(unicode_value='arcsec', tag='arcsec')
 AngleUnit._InitializeFacetMap(AngleUnit._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'AngleUnit', AngleUnit)
+_module_typeBindings.AngleUnit = AngleUnit
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}PixelUnit
 class PixelUnit (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -146,6 +153,7 @@ PixelUnit._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=Pi
 PixelUnit.Jybeam = PixelUnit._CF_enumeration.addEnumeration(unicode_value='Jy/beam', tag='Jybeam')
 PixelUnit._InitializeFacetMap(PixelUnit._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'PixelUnit', PixelUnit)
+_module_typeBindings.PixelUnit = PixelUnit
 
 # List simple type: {http://www.astron.nl/SIP-Lofar}ListOfDouble
 # superclasses pyxb.binding.datatypes.anySimpleType
@@ -160,6 +168,7 @@ class ListOfDouble (pyxb.binding.basis.STD_list):
     _ItemType = pyxb.binding.datatypes.double
 ListOfDouble._InitializeFacetMap()
 Namespace.addCategoryObject('typeBinding', 'ListOfDouble', ListOfDouble)
+_module_typeBindings.ListOfDouble = ListOfDouble
 
 # List simple type: {http://www.astron.nl/SIP-Lofar}ListOfString
 # superclasses pyxb.binding.datatypes.anySimpleType
@@ -174,6 +183,7 @@ class ListOfString (pyxb.binding.basis.STD_list):
     _ItemType = pyxb.binding.datatypes.string
 ListOfString._InitializeFacetMap()
 Namespace.addCategoryObject('typeBinding', 'ListOfString', ListOfString)
+_module_typeBindings.ListOfString = ListOfString
 
 # List simple type: {http://www.astron.nl/SIP-Lofar}ListOfSubbands
 # superclasses pyxb.binding.datatypes.anySimpleType
@@ -188,6 +198,7 @@ class ListOfSubbands (pyxb.binding.basis.STD_list):
     _ItemType = pyxb.binding.datatypes.unsignedShort
 ListOfSubbands._InitializeFacetMap()
 Namespace.addCategoryObject('typeBinding', 'ListOfSubbands', ListOfSubbands)
+_module_typeBindings.ListOfSubbands = ListOfSubbands
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}EquinoxType
 class EquinoxType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -204,6 +215,7 @@ EquinoxType.SUN = EquinoxType._CF_enumeration.addEnumeration(unicode_value='SUN'
 EquinoxType.JUPITER = EquinoxType._CF_enumeration.addEnumeration(unicode_value='JUPITER', tag='JUPITER')
 EquinoxType._InitializeFacetMap(EquinoxType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'EquinoxType', EquinoxType)
+_module_typeBindings.EquinoxType = EquinoxType
 
 # Atomic simple type: [anonymous]
 class STD_ANON (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -218,6 +230,7 @@ STD_ANON.WGS84 = STD_ANON._CF_enumeration.addEnumeration(unicode_value='WGS84',
 STD_ANON.ITRF2000 = STD_ANON._CF_enumeration.addEnumeration(unicode_value='ITRF2000', tag='ITRF2000')
 STD_ANON.ITRF2005 = STD_ANON._CF_enumeration.addEnumeration(unicode_value='ITRF2005', tag='ITRF2005')
 STD_ANON._InitializeFacetMap(STD_ANON._CF_enumeration)
+_module_typeBindings.STD_ANON = STD_ANON
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}AntennaFieldType
 class AntennaFieldType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -234,6 +247,7 @@ AntennaFieldType.HBA = AntennaFieldType._CF_enumeration.addEnumeration(unicode_v
 AntennaFieldType.LBA = AntennaFieldType._CF_enumeration.addEnumeration(unicode_value='LBA', tag='LBA')
 AntennaFieldType._InitializeFacetMap(AntennaFieldType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'AntennaFieldType', AntennaFieldType)
+_module_typeBindings.AntennaFieldType = AntennaFieldType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}StationTypeType
 class StationTypeType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -249,6 +263,7 @@ StationTypeType.Remote = StationTypeType._CF_enumeration.addEnumeration(unicode_
 StationTypeType.International = StationTypeType._CF_enumeration.addEnumeration(unicode_value='International', tag='International')
 StationTypeType._InitializeFacetMap(StationTypeType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'StationTypeType', StationTypeType)
+_module_typeBindings.StationTypeType = StationTypeType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}ProcessRelationType
 class ProcessRelationType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -262,6 +277,7 @@ ProcessRelationType._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_d
 ProcessRelationType.GroupID = ProcessRelationType._CF_enumeration.addEnumeration(unicode_value='GroupID', tag='GroupID')
 ProcessRelationType._InitializeFacetMap(ProcessRelationType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'ProcessRelationType', ProcessRelationType)
+_module_typeBindings.ProcessRelationType = ProcessRelationType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}FilterSelectionType
 class FilterSelectionType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -281,6 +297,7 @@ FilterSelectionType.n170_230_MHz = FilterSelectionType._CF_enumeration.addEnumer
 FilterSelectionType.n210_250_MHz = FilterSelectionType._CF_enumeration.addEnumeration(unicode_value='210-250 MHz', tag='n210_250_MHz')
 FilterSelectionType._InitializeFacetMap(FilterSelectionType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'FilterSelectionType', FilterSelectionType)
+_module_typeBindings.FilterSelectionType = FilterSelectionType
 
 # Atomic simple type: [anonymous]
 class STD_ANON_ (pyxb.binding.datatypes.double, pyxb.binding.basis.enumeration_mixin):
@@ -294,6 +311,7 @@ STD_ANON_._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=ST
 STD_ANON_._CF_enumeration.addEnumeration(unicode_value='160', tag=None)
 STD_ANON_._CF_enumeration.addEnumeration(unicode_value='200', tag=None)
 STD_ANON_._InitializeFacetMap(STD_ANON_._CF_enumeration)
+_module_typeBindings.STD_ANON_ = STD_ANON_
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}AntennaSetType
 class AntennaSetType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -320,6 +338,7 @@ AntennaSetType.HBA_Dual_Inner = AntennaSetType._CF_enumeration.addEnumeration(un
 AntennaSetType.HBA_Joined_Inner = AntennaSetType._CF_enumeration.addEnumeration(unicode_value='HBA Joined Inner', tag='HBA_Joined_Inner')
 AntennaSetType._InitializeFacetMap(AntennaSetType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'AntennaSetType', AntennaSetType)
+_module_typeBindings.AntennaSetType = AntennaSetType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}StationSelectionType
 class StationSelectionType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -337,6 +356,7 @@ StationSelectionType.International = StationSelectionType._CF_enumeration.addEnu
 StationSelectionType.Custom = StationSelectionType._CF_enumeration.addEnumeration(unicode_value='Custom', tag='Custom')
 StationSelectionType._InitializeFacetMap(StationSelectionType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'StationSelectionType', StationSelectionType)
+_module_typeBindings.StationSelectionType = StationSelectionType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}ObservingModeType
 class ObservingModeType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -356,6 +376,7 @@ ObservingModeType.Non_Standard = ObservingModeType._CF_enumeration.addEnumeratio
 ObservingModeType.Unknown = ObservingModeType._CF_enumeration.addEnumeration(unicode_value='Unknown', tag='Unknown')
 ObservingModeType._InitializeFacetMap(ObservingModeType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'ObservingModeType', ObservingModeType)
+_module_typeBindings.ObservingModeType = ObservingModeType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}TimeSystemType
 class TimeSystemType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -370,6 +391,7 @@ TimeSystemType.UTC = TimeSystemType._CF_enumeration.addEnumeration(unicode_value
 TimeSystemType.LST = TimeSystemType._CF_enumeration.addEnumeration(unicode_value='LST', tag='LST')
 TimeSystemType._InitializeFacetMap(TimeSystemType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'TimeSystemType', TimeSystemType)
+_module_typeBindings.TimeSystemType = TimeSystemType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}ProcessingType
 class ProcessingType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -387,6 +409,7 @@ ProcessingType.Flys_Eye = ProcessingType._CF_enumeration.addEnumeration(unicode_
 ProcessingType.Non_Standard = ProcessingType._CF_enumeration.addEnumeration(unicode_value='Non Standard', tag='Non_Standard')
 ProcessingType._InitializeFacetMap(ProcessingType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'ProcessingType', ProcessingType)
+_module_typeBindings.ProcessingType = ProcessingType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}MeasurementType
 class MeasurementType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -405,6 +428,7 @@ MeasurementType.All_Sky = MeasurementType._CF_enumeration.addEnumeration(unicode
 MeasurementType.Miscellaneous = MeasurementType._CF_enumeration.addEnumeration(unicode_value='Miscellaneous', tag='Miscellaneous')
 MeasurementType._InitializeFacetMap(MeasurementType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'MeasurementType', MeasurementType)
+_module_typeBindings.MeasurementType = MeasurementType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}PulsarSelectionType
 class PulsarSelectionType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -425,6 +449,7 @@ PulsarSelectionType.Pulsars_in_observation_specs_file_and_brightest_in_SAP_and_T
 PulsarSelectionType.Specified_pulsar_list = PulsarSelectionType._CF_enumeration.addEnumeration(unicode_value='Specified pulsar list', tag='Specified_pulsar_list')
 PulsarSelectionType._InitializeFacetMap(PulsarSelectionType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'PulsarSelectionType', PulsarSelectionType)
+_module_typeBindings.PulsarSelectionType = PulsarSelectionType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}DataProductType
 class DataProductType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -450,6 +475,7 @@ DataProductType.Non_Standard = DataProductType._CF_enumeration.addEnumeration(un
 DataProductType.Unknown = DataProductType._CF_enumeration.addEnumeration(unicode_value='Unknown', tag='Unknown')
 DataProductType._InitializeFacetMap(DataProductType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'DataProductType', DataProductType)
+_module_typeBindings.DataProductType = DataProductType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}ChecksumAlgorithm
 class ChecksumAlgorithm (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -464,6 +490,7 @@ ChecksumAlgorithm.MD5 = ChecksumAlgorithm._CF_enumeration.addEnumeration(unicode
 ChecksumAlgorithm.Adler32 = ChecksumAlgorithm._CF_enumeration.addEnumeration(unicode_value='Adler32', tag='Adler32')
 ChecksumAlgorithm._InitializeFacetMap(ChecksumAlgorithm._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'ChecksumAlgorithm', ChecksumAlgorithm)
+_module_typeBindings.ChecksumAlgorithm = ChecksumAlgorithm
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}FileFormatType
 class FileFormatType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -480,6 +507,7 @@ FileFormatType.HDF5 = FileFormatType._CF_enumeration.addEnumeration(unicode_valu
 FileFormatType.PULP = FileFormatType._CF_enumeration.addEnumeration(unicode_value='PULP', tag='PULP')
 FileFormatType._InitializeFacetMap(FileFormatType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'FileFormatType', FileFormatType)
+_module_typeBindings.FileFormatType = FileFormatType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}PolarizationType
 class PolarizationType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -509,6 +537,7 @@ PolarizationType.Yre = PolarizationType._CF_enumeration.addEnumeration(unicode_v
 PolarizationType.Yim = PolarizationType._CF_enumeration.addEnumeration(unicode_value='Yim', tag='Yim')
 PolarizationType._InitializeFacetMap(PolarizationType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'PolarizationType', PolarizationType)
+_module_typeBindings.PolarizationType = PolarizationType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}PulsarPipelineDataType
 class PulsarPipelineDataType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -527,6 +556,7 @@ PulsarPipelineDataType.SummaryIncoherentStokes = PulsarPipelineDataType._CF_enum
 PulsarPipelineDataType.SummaryComplexVoltages = PulsarPipelineDataType._CF_enumeration.addEnumeration(unicode_value='SummaryComplexVoltages', tag='SummaryComplexVoltages')
 PulsarPipelineDataType._InitializeFacetMap(PulsarPipelineDataType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'PulsarPipelineDataType', PulsarPipelineDataType)
+_module_typeBindings.PulsarPipelineDataType = PulsarPipelineDataType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}RaDecSystem
 class RaDecSystem (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -544,6 +574,7 @@ RaDecSystem.FK4_NO_E = RaDecSystem._CF_enumeration.addEnumeration(unicode_value=
 RaDecSystem.GAPPT = RaDecSystem._CF_enumeration.addEnumeration(unicode_value='GAPPT', tag='GAPPT')
 RaDecSystem._InitializeFacetMap(RaDecSystem._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'RaDecSystem', RaDecSystem)
+_module_typeBindings.RaDecSystem = RaDecSystem
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}LocationFrame
 class LocationFrame (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -565,6 +596,7 @@ LocationFrame.LOCAL_GROUP = LocationFrame._CF_enumeration.addEnumeration(unicode
 LocationFrame.RELOCATABLE = LocationFrame._CF_enumeration.addEnumeration(unicode_value='RELOCATABLE', tag='RELOCATABLE')
 LocationFrame._InitializeFacetMap(LocationFrame._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'LocationFrame', LocationFrame)
+_module_typeBindings.LocationFrame = LocationFrame
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}SpectralQuantityType
 class SpectralQuantityType (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -587,6 +619,7 @@ SpectralQuantityType.WaveLengthAir = SpectralQuantityType._CF_enumeration.addEnu
 SpectralQuantityType.BetaFactor = SpectralQuantityType._CF_enumeration.addEnumeration(unicode_value='BetaFactor', tag='BetaFactor')
 SpectralQuantityType._InitializeFacetMap(SpectralQuantityType._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'SpectralQuantityType', SpectralQuantityType)
+_module_typeBindings.SpectralQuantityType = SpectralQuantityType
 
 # Atomic simple type: {http://www.astron.nl/SIP-Lofar}Telescope
 class Telescope (pyxb.binding.datatypes.string, pyxb.binding.basis.enumeration_mixin):
@@ -600,6 +633,7 @@ Telescope._CF_enumeration = pyxb.binding.facets.CF_enumeration(value_datatype=Te
 Telescope.LOFAR = Telescope._CF_enumeration.addEnumeration(unicode_value='LOFAR', tag='LOFAR')
 Telescope._InitializeFacetMap(Telescope._CF_enumeration)
 Namespace.addCategoryObject('typeBinding', 'Telescope', Telescope)
+_module_typeBindings.Telescope = Telescope
 
 # Complex type {http://www.astron.nl/SIP-Lofar}ListOfFrequencies with content type ELEMENT_ONLY
 class ListOfFrequencies (pyxb.binding.basis.complexTypeDefinition):
@@ -633,6 +667,7 @@ class ListOfFrequencies (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.ListOfFrequencies = ListOfFrequencies
 Namespace.addCategoryObject('typeBinding', 'ListOfFrequencies', ListOfFrequencies)
 
 
@@ -676,6 +711,7 @@ class IdentifierType (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.IdentifierType = IdentifierType
 Namespace.addCategoryObject('typeBinding', 'IdentifierType', IdentifierType)
 
 
@@ -735,6 +771,7 @@ class Pointing (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Pointing = Pointing
 Namespace.addCategoryObject('typeBinding', 'Pointing', Pointing)
 
 
@@ -810,6 +847,7 @@ class Coordinates (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Coordinates = Coordinates
 Namespace.addCategoryObject('typeBinding', 'Coordinates', Coordinates)
 
 
@@ -845,6 +883,7 @@ class AntennaField (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.AntennaField = AntennaField
 Namespace.addCategoryObject('typeBinding', 'AntennaField', AntennaField)
 
 
@@ -872,6 +911,7 @@ class Stations (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Stations = Stations
 Namespace.addCategoryObject('typeBinding', 'Stations', Stations)
 
 
@@ -915,6 +955,7 @@ class Station (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Station = Station
 Namespace.addCategoryObject('typeBinding', 'Station', Station)
 
 
@@ -958,6 +999,7 @@ class ProcessRelation (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.ProcessRelation = ProcessRelation
 Namespace.addCategoryObject('typeBinding', 'ProcessRelation', ProcessRelation)
 
 
@@ -985,6 +1027,7 @@ class ProcessRelations (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.ProcessRelations = ProcessRelations
 Namespace.addCategoryObject('typeBinding', 'ProcessRelations', ProcessRelations)
 
 
@@ -1068,6 +1111,7 @@ class Process (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Process = Process
 Namespace.addCategoryObject('typeBinding', 'Process', Process)
 
 
@@ -1127,6 +1171,7 @@ class Processing (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Processing = Processing
 Namespace.addCategoryObject('typeBinding', 'Processing', Processing)
 
 
@@ -1154,6 +1199,7 @@ class RealTimeProcess (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.RealTimeProcess = RealTimeProcess
 Namespace.addCategoryObject('typeBinding', 'RealTimeProcess', RealTimeProcess)
 
 
@@ -1181,6 +1227,7 @@ class TransientBufferBoardEvents (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.TransientBufferBoardEvents = TransientBufferBoardEvents
 Namespace.addCategoryObject('typeBinding', 'TransientBufferBoardEvents', TransientBufferBoardEvents)
 
 
@@ -1208,6 +1255,7 @@ class TransientBufferBoardEvent (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.TransientBufferBoardEvent = TransientBufferBoardEvent
 Namespace.addCategoryObject('typeBinding', 'TransientBufferBoardEvent', TransientBufferBoardEvent)
 
 
@@ -1235,6 +1283,7 @@ class SubArrayPointings (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.SubArrayPointings = SubArrayPointings
 Namespace.addCategoryObject('typeBinding', 'SubArrayPointings', SubArrayPointings)
 
 
@@ -1358,6 +1407,7 @@ class SubArrayPointing (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.SubArrayPointing = SubArrayPointing
 Namespace.addCategoryObject('typeBinding', 'SubArrayPointing', SubArrayPointing)
 
 
@@ -1388,6 +1438,7 @@ class DataSources (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.DataSources = DataSources
 Namespace.addCategoryObject('typeBinding', 'DataSources', DataSources)
 
 
@@ -1423,6 +1474,7 @@ class ChecksumType (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.ChecksumType = ChecksumType
 Namespace.addCategoryObject('typeBinding', 'ChecksumType', ChecksumType)
 
 
@@ -1458,6 +1510,7 @@ class TBBTrigger (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.TBBTrigger = TBBTrigger
 Namespace.addCategoryObject('typeBinding', 'TBBTrigger', TBBTrigger)
 
 
@@ -1541,6 +1594,7 @@ class DataProduct (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.DataProduct = DataProduct
 Namespace.addCategoryObject('typeBinding', 'DataProduct', DataProduct)
 
 
@@ -1568,6 +1622,7 @@ class ArrayBeams (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.ArrayBeams = ArrayBeams
 Namespace.addCategoryObject('typeBinding', 'ArrayBeams', ArrayBeams)
 
 
@@ -1667,6 +1722,7 @@ class ArrayBeam (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.ArrayBeam = ArrayBeam
 Namespace.addCategoryObject('typeBinding', 'ArrayBeam', ArrayBeam)
 
 
@@ -1718,6 +1774,7 @@ class Axis (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Axis = Axis
 Namespace.addCategoryObject('typeBinding', 'Axis', Axis)
 
 
@@ -1738,6 +1795,7 @@ class Coordinate (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Coordinate = Coordinate
 Namespace.addCategoryObject('typeBinding', 'Coordinate', Coordinate)
 
 
@@ -1773,6 +1831,7 @@ class SpectralQuantity (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.SpectralQuantity = SpectralQuantity
 Namespace.addCategoryObject('typeBinding', 'SpectralQuantity', SpectralQuantity)
 
 
@@ -1808,6 +1867,7 @@ class Parset (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Parset = Parset
 Namespace.addCategoryObject('typeBinding', 'Parset', Parset)
 
 
@@ -1875,6 +1935,7 @@ class Project (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Project = Project
 Namespace.addCategoryObject('typeBinding', 'Project', Project)
 
 
@@ -1958,6 +2019,7 @@ class LTASip (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         
     })
+_module_typeBindings.LTASip = LTASip
 Namespace.addCategoryObject('typeBinding', 'LTASip', LTASip)
 
 
@@ -1974,7 +2036,7 @@ class Frequency (pyxb.binding.basis.complexTypeDefinition):
     # Base type is pyxb.binding.datatypes.double
     
     # Attribute units uses Python identifier units
-    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Frequency_units', FrequencyUnit, required=True)
+    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Frequency_units', _module_typeBindings.FrequencyUnit, required=True)
     __units._DeclarationLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 35, 4)
     __units._UseLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 35, 4)
     
@@ -1986,6 +2048,7 @@ class Frequency (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         __units.name() : __units
     })
+_module_typeBindings.Frequency = Frequency
 Namespace.addCategoryObject('typeBinding', 'Frequency', Frequency)
 
 
@@ -2002,7 +2065,7 @@ class Length (pyxb.binding.basis.complexTypeDefinition):
     # Base type is pyxb.binding.datatypes.double
     
     # Attribute units uses Python identifier units
-    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Length_units', LengthUnit, required=True)
+    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Length_units', _module_typeBindings.LengthUnit, required=True)
     __units._DeclarationLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 48, 4)
     __units._UseLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 48, 4)
     
@@ -2014,6 +2077,7 @@ class Length (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         __units.name() : __units
     })
+_module_typeBindings.Length = Length
 Namespace.addCategoryObject('typeBinding', 'Length', Length)
 
 
@@ -2030,7 +2094,7 @@ class Time (pyxb.binding.basis.complexTypeDefinition):
     # Base type is pyxb.binding.datatypes.double
     
     # Attribute units uses Python identifier units
-    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Time_units', TimeUnit, required=True)
+    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Time_units', _module_typeBindings.TimeUnit, required=True)
     __units._DeclarationLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 63, 4)
     __units._UseLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 63, 4)
     
@@ -2042,6 +2106,7 @@ class Time (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         __units.name() : __units
     })
+_module_typeBindings.Time = Time
 Namespace.addCategoryObject('typeBinding', 'Time', Time)
 
 
@@ -2058,7 +2123,7 @@ class Angle (pyxb.binding.basis.complexTypeDefinition):
     # Base type is pyxb.binding.datatypes.double
     
     # Attribute units uses Python identifier units
-    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Angle_units', AngleUnit, required=True)
+    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Angle_units', _module_typeBindings.AngleUnit, required=True)
     __units._DeclarationLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 77, 4)
     __units._UseLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 77, 4)
     
@@ -2070,6 +2135,7 @@ class Angle (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         __units.name() : __units
     })
+_module_typeBindings.Angle = Angle
 Namespace.addCategoryObject('typeBinding', 'Angle', Angle)
 
 
@@ -2086,7 +2152,7 @@ class Pixel (pyxb.binding.basis.complexTypeDefinition):
     # Base type is pyxb.binding.datatypes.double
     
     # Attribute units uses Python identifier units
-    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Pixel_units', PixelUnit, required=True)
+    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Pixel_units', _module_typeBindings.PixelUnit, required=True)
     __units._DeclarationLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 89, 4)
     __units._UseLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 89, 4)
     
@@ -2098,6 +2164,7 @@ class Pixel (pyxb.binding.basis.complexTypeDefinition):
     _AttributeMap.update({
         __units.name() : __units
     })
+_module_typeBindings.Pixel = Pixel
 Namespace.addCategoryObject('typeBinding', 'Pixel', Pixel)
 
 
@@ -2277,6 +2344,7 @@ class Observation (Process):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Observation = Observation
 Namespace.addCategoryObject('typeBinding', 'Observation', Observation)
 
 
@@ -2328,6 +2396,7 @@ class DirectDataMeasurement (Process):
     _AttributeMap.update({
         
     })
+_module_typeBindings.DirectDataMeasurement = DirectDataMeasurement
 Namespace.addCategoryObject('typeBinding', 'DirectDataMeasurement', DirectDataMeasurement)
 
 
@@ -2379,6 +2448,7 @@ class GenericMeasurement (Process):
     _AttributeMap.update({
         
     })
+_module_typeBindings.GenericMeasurement = GenericMeasurement
 Namespace.addCategoryObject('typeBinding', 'GenericMeasurement', GenericMeasurement)
 
 
@@ -2430,6 +2500,7 @@ class UnspecifiedProcess (Process):
     _AttributeMap.update({
         
     })
+_module_typeBindings.UnspecifiedProcess = UnspecifiedProcess
 Namespace.addCategoryObject('typeBinding', 'UnspecifiedProcess', UnspecifiedProcess)
 
 
@@ -2475,6 +2546,7 @@ class Correlator (RealTimeProcess):
     _AttributeMap.update({
         
     })
+_module_typeBindings.Correlator = Correlator
 Namespace.addCategoryObject('typeBinding', 'Correlator', Correlator)
 
 
@@ -2576,6 +2648,7 @@ class CoherentStokes (RealTimeProcess):
     _AttributeMap.update({
         
     })
+_module_typeBindings.CoherentStokes = CoherentStokes
 Namespace.addCategoryObject('typeBinding', 'CoherentStokes', CoherentStokes)
 
 
@@ -2677,6 +2750,7 @@ class IncoherentStokes (RealTimeProcess):
     _AttributeMap.update({
         
     })
+_module_typeBindings.IncoherentStokes = IncoherentStokes
 Namespace.addCategoryObject('typeBinding', 'IncoherentStokes', IncoherentStokes)
 
 
@@ -2746,6 +2820,7 @@ class FlysEye (RealTimeProcess):
     _AttributeMap.update({
         
     })
+_module_typeBindings.FlysEye = FlysEye
 Namespace.addCategoryObject('typeBinding', 'FlysEye', FlysEye)
 
 
@@ -2783,6 +2858,7 @@ class NonStandard (RealTimeProcess):
     _AttributeMap.update({
         
     })
+_module_typeBindings.NonStandard = NonStandard
 Namespace.addCategoryObject('typeBinding', 'NonStandard', NonStandard)
 
 
@@ -2842,6 +2918,7 @@ class PipelineRun (Process):
     _AttributeMap.update({
         
     })
+_module_typeBindings.PipelineRun = PipelineRun
 Namespace.addCategoryObject('typeBinding', 'PipelineRun', PipelineRun)
 
 
@@ -2949,6 +3026,7 @@ class CorrelatedDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.CorrelatedDataProduct = CorrelatedDataProduct
 Namespace.addCategoryObject('typeBinding', 'CorrelatedDataProduct', CorrelatedDataProduct)
 
 
@@ -2985,6 +3063,7 @@ class InstrumentModelDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.InstrumentModelDataProduct = InstrumentModelDataProduct
 Namespace.addCategoryObject('typeBinding', 'InstrumentModelDataProduct', InstrumentModelDataProduct)
 
 
@@ -3021,6 +3100,7 @@ class SkyModelDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.SkyModelDataProduct = SkyModelDataProduct
 Namespace.addCategoryObject('typeBinding', 'SkyModelDataProduct', SkyModelDataProduct)
 
 
@@ -3080,6 +3160,7 @@ class TransientBufferBoardDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.TransientBufferBoardDataProduct = TransientBufferBoardDataProduct
 Namespace.addCategoryObject('typeBinding', 'TransientBufferBoardDataProduct', TransientBufferBoardDataProduct)
 
 
@@ -3135,6 +3216,7 @@ class CoherentStokesBeam (ArrayBeam):
     _AttributeMap.update({
         
     })
+_module_typeBindings.CoherentStokesBeam = CoherentStokesBeam
 Namespace.addCategoryObject('typeBinding', 'CoherentStokesBeam', CoherentStokesBeam)
 
 
@@ -3175,6 +3257,7 @@ class IncoherentStokesBeam (ArrayBeam):
     _AttributeMap.update({
         
     })
+_module_typeBindings.IncoherentStokesBeam = IncoherentStokesBeam
 Namespace.addCategoryObject('typeBinding', 'IncoherentStokesBeam', IncoherentStokesBeam)
 
 
@@ -3222,6 +3305,7 @@ class FlysEyeBeam (ArrayBeam):
     _AttributeMap.update({
         
     })
+_module_typeBindings.FlysEyeBeam = FlysEyeBeam
 Namespace.addCategoryObject('typeBinding', 'FlysEyeBeam', FlysEyeBeam)
 
 
@@ -3273,6 +3357,7 @@ class BeamFormedDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.BeamFormedDataProduct = BeamFormedDataProduct
 Namespace.addCategoryObject('typeBinding', 'BeamFormedDataProduct', BeamFormedDataProduct)
 
 
@@ -3324,6 +3409,7 @@ class PulpSummaryDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.PulpSummaryDataProduct = PulpSummaryDataProduct
 Namespace.addCategoryObject('typeBinding', 'PulpSummaryDataProduct', PulpSummaryDataProduct)
 
 
@@ -3383,6 +3469,7 @@ class PulpDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.PulpDataProduct = PulpDataProduct
 Namespace.addCategoryObject('typeBinding', 'PulpDataProduct', PulpDataProduct)
 
 
@@ -3419,6 +3506,7 @@ class GenericDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.GenericDataProduct = GenericDataProduct
 Namespace.addCategoryObject('typeBinding', 'GenericDataProduct', GenericDataProduct)
 
 
@@ -3455,6 +3543,7 @@ class UnspecifiedDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.UnspecifiedDataProduct = UnspecifiedDataProduct
 Namespace.addCategoryObject('typeBinding', 'UnspecifiedDataProduct', UnspecifiedDataProduct)
 
 
@@ -3506,6 +3595,7 @@ class LinearAxis (Axis):
     _AttributeMap.update({
         
     })
+_module_typeBindings.LinearAxis = LinearAxis
 Namespace.addCategoryObject('typeBinding', 'LinearAxis', LinearAxis)
 
 
@@ -3534,6 +3624,7 @@ class TabularAxis (Axis):
     _AttributeMap.update({
         
     })
+_module_typeBindings.TabularAxis = TabularAxis
 Namespace.addCategoryObject('typeBinding', 'TabularAxis', TabularAxis)
 
 
@@ -3641,6 +3732,7 @@ class DirectionCoordinate (Coordinate):
     _AttributeMap.update({
         
     })
+_module_typeBindings.DirectionCoordinate = DirectionCoordinate
 Namespace.addCategoryObject('typeBinding', 'DirectionCoordinate', DirectionCoordinate)
 
 
@@ -3684,6 +3776,7 @@ class SpectralCoordinate (Coordinate):
     _AttributeMap.update({
         
     })
+_module_typeBindings.SpectralCoordinate = SpectralCoordinate
 Namespace.addCategoryObject('typeBinding', 'SpectralCoordinate', SpectralCoordinate)
 
 
@@ -3727,6 +3820,7 @@ class TimeCoordinate (Coordinate):
     _AttributeMap.update({
         
     })
+_module_typeBindings.TimeCoordinate = TimeCoordinate
 Namespace.addCategoryObject('typeBinding', 'TimeCoordinate', TimeCoordinate)
 
 
@@ -3762,6 +3856,7 @@ class PolarizationCoordinate (Coordinate):
     _AttributeMap.update({
         
     })
+_module_typeBindings.PolarizationCoordinate = PolarizationCoordinate
 Namespace.addCategoryObject('typeBinding', 'PolarizationCoordinate', PolarizationCoordinate)
 
 
@@ -3821,6 +3916,7 @@ class PixelMapDataProduct (DataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.PixelMapDataProduct = PixelMapDataProduct
 Namespace.addCategoryObject('typeBinding', 'PixelMapDataProduct', PixelMapDataProduct)
 
 
@@ -3839,7 +3935,7 @@ class ClockType (Frequency):
     # Attribute units is restricted from parent
     
     # Attribute units uses Python identifier units
-    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Frequency_units', FrequencyUnit, fixed=True, unicode_default='MHz', required=True)
+    __units = pyxb.binding.content.AttributeUse(pyxb.namespace.ExpandedName(None, 'units'), 'units', '__httpwww_astron_nlSIP_Lofar_Frequency_units', _module_typeBindings.FrequencyUnit, fixed=True, unicode_default='MHz', required=True)
     __units._DeclarationLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 289, 4)
     __units._UseLocation = pyxb.utils.utility.Location('/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd', 289, 4)
     
@@ -3851,6 +3947,7 @@ class ClockType (Frequency):
     _AttributeMap.update({
         __units.name() : __units
     })
+_module_typeBindings.ClockType = ClockType
 Namespace.addCategoryObject('typeBinding', 'ClockType', ClockType)
 
 
@@ -3964,6 +4061,7 @@ class ImagingPipeline (PipelineRun):
     _AttributeMap.update({
         
     })
+_module_typeBindings.ImagingPipeline = ImagingPipeline
 Namespace.addCategoryObject('typeBinding', 'ImagingPipeline', ImagingPipeline)
 
 
@@ -4061,6 +4159,7 @@ class CalibrationPipeline (PipelineRun):
     _AttributeMap.update({
         
     })
+_module_typeBindings.CalibrationPipeline = CalibrationPipeline
 Namespace.addCategoryObject('typeBinding', 'CalibrationPipeline', CalibrationPipeline)
 
 
@@ -4142,6 +4241,7 @@ class AveragingPipeline (PipelineRun):
     _AttributeMap.update({
         
     })
+_module_typeBindings.AveragingPipeline = AveragingPipeline
 Namespace.addCategoryObject('typeBinding', 'AveragingPipeline', AveragingPipeline)
 
 
@@ -4279,6 +4379,7 @@ class PulsarPipeline (PipelineRun):
     _AttributeMap.update({
         
     })
+_module_typeBindings.PulsarPipeline = PulsarPipeline
 Namespace.addCategoryObject('typeBinding', 'PulsarPipeline', PulsarPipeline)
 
 
@@ -4321,6 +4422,7 @@ class CosmicRayPipeline (PipelineRun):
     _AttributeMap.update({
         
     })
+_module_typeBindings.CosmicRayPipeline = CosmicRayPipeline
 Namespace.addCategoryObject('typeBinding', 'CosmicRayPipeline', CosmicRayPipeline)
 
 
@@ -4378,6 +4480,7 @@ class LongBaselinePipeline (PipelineRun):
     _AttributeMap.update({
         
     })
+_module_typeBindings.LongBaselinePipeline = LongBaselinePipeline
 Namespace.addCategoryObject('typeBinding', 'LongBaselinePipeline', LongBaselinePipeline)
 
 
@@ -4420,6 +4523,7 @@ class GenericPipeline (PipelineRun):
     _AttributeMap.update({
         
     })
+_module_typeBindings.GenericPipeline = GenericPipeline
 Namespace.addCategoryObject('typeBinding', 'GenericPipeline', GenericPipeline)
 
 
@@ -4509,6 +4613,7 @@ class SkyImageDataProduct (PixelMapDataProduct):
     _AttributeMap.update({
         
     })
+_module_typeBindings.SkyImageDataProduct = SkyImageDataProduct
 Namespace.addCategoryObject('typeBinding', 'SkyImageDataProduct', SkyImageDataProduct)
 
 
diff --git a/lib/siplib.py b/lib/siplib.py
index 2d17ade5728e90e3aa59eabae5d0368c021b75f7..7c2d6afdf8416e31465dbd0280d2744bea677ea3 100644
--- a/lib/siplib.py
+++ b/lib/siplib.py
@@ -28,12 +28,11 @@
 import ltasip
 import pyxb
 import constants
+import os
 
 VERSION = "SIPlib 0.1"
-STATION_CONFIG_PATH = "station_coordinates.conf"
-
-# todo: find a nice way to define the different stations
-# -> how to define a full set of existing stations and their different antennafield options without redundancy?
+STATION_CONFIG_PATH = "/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/sip/lib/station_coordinates.conf" # todo fix path for cmake tests
+# STATION_CONFIG_PATH = os.path.expanduser("station_coordinates.conf")
 
 # todo: create docstrings for everything.
 # specify types and explain purpose of the field (-> ask someone with more astronomical background)
@@ -268,6 +267,7 @@ class AveragingPipeline():
             numberOfCorrelatedDataProducts=numberofcorrelateddataproducts,
             **pipeline_map.get_dict()
         )
+        #self.__pyxb_pipeline._setAttribute("xsi:type","ns1:AveragingPipeline")
 
     def get_pyxb_pipeline(self):
         return self.__pyxb_pipeline
@@ -1102,8 +1102,6 @@ class Sip():
     print  VERSION
     print "################\n"
 
-    sip = ltasip.ltaSip()
-
     #-----------
     # Base document
     #---
@@ -1118,6 +1116,8 @@ class Sip():
                  project_coinvestigators=None,
                  ):
 
+        self.sip = ltasip.ltaSip()
+
         self.sip.sipGeneratorVersion = VERSION
 
         self.sip.project = ltasip.Project(
@@ -1263,819 +1263,8 @@ class Sip():
         print self.get_prettyxml()
 
 
-
-# ########################################################## end SIP class
-
-
-
-
-
-
-
-
-
-
-
-
-# ############################################################################
-
-
-def main():
-
-    # todo: This should be moved to testing, but makes it easier for me now.
-    print "===\nCreating base document...\n"
-    # create example doc with mandatory attributes
-    mysip = Sip(project_code="code",
-                project_primaryinvestigator="pi",
-                project_contactauthor="coauthor",
-                #project_telescope="LOFAR",
-                project_description="awesome project",
-                project_coinvestigators=["sidekick1", "sidekick2"],
-                dataproduct=SimpleDataProduct(
-                    DataProductMap(
-                        type="Unknown",
-                        source="space",
-                        identifier="42",
-                        size=1024,
-                        filename="/home/paulus/test.h5",
-                        fileformat="HDF5",
-                        processsource="someone gave it to me",
-                        processid="SIPlib 0.1",
-                        checksum_md5="hash1",
-                        checksum_adler32= "hash2",
-                        storageticket="ticket"
-                    )
-                )
-    )
-    mysip.prettyprint()
-
-    print "===\nAdding related generic dataproduct:\n"
-    # add optional dataproduct item
-    print mysip.add_related_dataproduct(
-        GenericDataProduct(
-            DataProductMap(
-                type="Unknown",
-                source="space",
-                identifier="fourtytwo",
-                size=2048,
-                filename="/home/paulus/test.h5",
-                fileformat="HDF5",
-                processsource="someone gave it to me",
-                processid="SIPlib 0.1"
-            )
-        )
-    )
-
-
-    # add optional dataproduct item
-    print "===\nAdding related pulp summary dataproduct:\n"
-    print mysip.add_related_dataproduct(
-        PulpSummaryDataProduct(
-            DataProductMap(
-                type="Unknown",
-                source="space",
-                identifier="fourtytwo",
-                size=2048,
-                filename="/home/paulus/test.h5",
-                fileformat="HDF5",
-                processsource="someone gave it to me",
-                processid="SIPlib 0.1"
-            ),
-            filecontent=["content_a","content_b"],
-            datatype="CoherentStokes"
-        )
-    )
-
-
-
-    # add optional dataproduct item
-    print "===\nAdding related pulp dataproduct:\n"
-    print mysip.add_related_dataproduct(
-        PulpDataProduct(
-            DataProductMap(
-                type="Unknown",
-                source="space",
-                identifier="fourtytwo",
-                size=2048,
-                filename="/home/paulus/test.h5",
-                fileformat="HDF5",
-                processsource="someone gave it to me",
-                processid="SIPlib 0.1"
-            ),
-            filecontent=["content_a","content_b"],
-            datatype="CoherentStokes",
-            arraybeam=SimpleArrayBeam(ArrayBeamMap(
-                subarraypointingidentifier_source="source",
-                subarraypointingidentifier="id",
-                beamnumber=4,
-                dispersionmeasure=16,
-                numberofsubbands=3,
-                stationsubbands=[1,2,3],
-                samplingtime=3,
-                samplingtimeunit="ms",
-                centralfrequencies="",
-                centralfrequencies_unit="MHz",
-                channelwidth_frequency=160,
-                channelwidth_frequencyunit="MHz",
-                channelspersubband=5,
-                stokes=["I","Q"]
-            ))
-        )
-    )
-
-        # add optional dataproduct item
-    print "===\nAdding related beamformed dataproduct:\n"
-    print mysip.add_related_dataproduct(
-        BeamFormedDataProduct(
-            dataproduct_map=DataProductMap(
-                type="Unknown",
-                source="space",
-                identifier="fourtytwo",
-                size=2048,
-                filename="/home/paulus/test.h5",
-                fileformat="HDF5",
-                processsource="someone gave it to me",
-                processid="SIPlib 0.1"
-                ),
-            beams=[FlysEyeBeam(
-                    arraybeam_map=ArrayBeamMap(
-                        subarraypointingidentifier_source="source",
-                        subarraypointingidentifier="id",
-                        beamnumber=4,
-                        dispersionmeasure=16,
-                        numberofsubbands=3,
-                        stationsubbands=[1,2,3],
-                        samplingtime=3,
-                        samplingtimeunit="ms",
-                        centralfrequencies="",
-                        centralfrequencies_unit="MHz",
-                        channelwidth_frequency=160,
-                        channelwidth_frequencyunit="MHz",
-                        channelspersubband=5,
-                        stokes=["I","Q"]),
-                    station=Station.preconfigured("CS001",["HBA0","HBA1"])
-                )]
-            )
-        )
-
-
-    # add optional dataproduct item
-    print "===\nAdding related sky image dataproduct:\n"
-    print mysip.add_related_dataproduct(
-        SkyImageDataProduct(
-            DataProductMap(
-                type="Unknown",
-                source="space",
-                identifier="fourtytwo",
-                size=2048,
-                filename="/home/paulus/test.h5",
-                fileformat="HDF5",
-                processsource="someone gave it to me",
-                processid="SIPlib 0.1"
-            ),
-            numberofaxes=2,
-            coordinates=[
-                SpectralCoordinate(
-                    quantity_type="Frequency",
-                    quantity_value=20.0,
-                    axis=LinearAxis(
-                        number=5,
-                        name="bla",
-                        units="parsec",
-                        length=5,
-                        increment=5,
-                        referencepixel=7.5,
-                        referencevalue=7.4)),
-                SpectralCoordinate(
-                    quantity_type="Frequency",
-                    quantity_value=20.0,
-                    axis=TabularAxis(
-                        number=5,
-                        name="bla",
-                        units="parsec",
-                        length=5,
-                        )),
-                DirectionCoordinate(
-                    linearaxis_a=LinearAxis(
-                        number=5,
-                        name="bla",
-                        units="parsec",
-                        length=5,
-                        increment=5,
-                        referencepixel=7.5,
-                        referencevalue=7.4),
-                    linearaxis_b=LinearAxis(
-                        number=5,
-                        name="bla",
-                        units="parsec",
-                        length=5,
-                        increment=5,
-                        referencepixel=7.5,
-                        referencevalue=7.4),
-                    pc0_0=0.0,
-                    pc0_1=0.1,
-                    pc1_0=1.0,
-                    pc1_1=1.1,
-                    equinox="SUN",
-                    radecsystem="ICRS",
-                    projection="rear",
-                    projectionparameters=[1.0,1.0,1.0],
-                    longitudepole_angle=1.0,
-                    longitudepole_angleunit="degrees",
-                    latitudepole_angle=2.0,
-                    latitudepole_angleunit="degrees",
-                    ),
-                PolarizationCoordinate(
-                    tabularaxis=TabularAxis(
-                        number=5,
-                        name="bla",
-                        units="parsec",
-                        length=5,
-                        ),
-                    polarizations=["I","YY","XX","Q"]
-                ),
-                TimeCoordinate(
-                    equinox="SUN",
-                    axis=TabularAxis(
-                        number=5,
-                        name="timetabular",
-                        units="parsec",
-                        length=5,
-                        ),
-                    )
-            ],
-            locationframe="GEOCENTER",
-            timeframe="timeframe",
-            observationpointing=PointingRaDec(
-                ra_angle=1.0,
-                ra_angleunit="degrees",
-                dec_angle=42.0,
-                dec_angleunit="degrees",
-                equinox="SUN"
-            ),
-            restoringbeammajor_angle=1.0,
-            restoringbeammajor_angleunit="degrees",
-            restoringbeamminor_angle=2.0,
-            restoringbeamminor_angleunit="degrees",
-            rmsnoise=1.0
-        )
-    )
-
-
-    # add optional dataproduct item
-    print "===\nAdded related correlated dataproduct:\n"
-    print mysip.add_related_dataproduct(
-        CorrelatedDataProduct(
-            DataProductMap(
-                type="Unknown",
-                source="space",
-                identifier="fourtytwo",
-                size=2048,
-                filename="/home/paulus/test.h5",
-                fileformat="HDF5",
-                processsource="someone gave it to me",
-                processid="SIPlib 0.1"
-            ),
-            subarraypointing_source="source",
-            subarraypointing_identifier="id",
-            subband="1",
-            starttime="1980-03-23T10:20:15",
-            duration= "P6Y3M10DT15H",
-            integrationinterval=10,
-            integrationintervalunit="ms",
-            central_frequency=160,
-            central_frequencyunit="MHz",
-            channelwidth_frequency=200,
-            channelwidth_frequencyunit="MHz",
-            channelspersubband=122,
-            stationsubband=2,
-            )
-    )
-
-    # add optional dataproduct item
-    print "===\nAdding related pixelmap dataproduct:\n"
-    print mysip.add_related_dataproduct(
-        PixelMapDataProduct(
-            DataProductMap(
-                type="Unknown",
-                source="space",
-                identifier="fourtytwo",
-                size=2048,
-                filename="/home/paulus/test.h5",
-                fileformat="HDF5",
-                processsource="someone gave it to me",
-                processid="SIPlib 0.1"
-            ),
-            numberofaxes=5,
-            coordinates=[SpectralCoordinate(
-                quantity_type="Frequency",
-                quantity_value=20.0,
-                axis=LinearAxis(
-                    number=5,
-                    name="bla",
-                    units="parsec",
-                    length=5,
-                    increment=5,
-                    referencepixel=7.5,
-                    referencevalue=7.4))]
-        )
-    )
-
-
-
-    # add optional observation item
-    print "===\nAdding observation:\n"
-    print mysip.add_observation(observingmode="Interferometer",
-                                instrumentfilter="10-70 MHz",
-                                clock_frequency='160',
-                                clock_frequencyunit="MHz",
-                                stationselection="Core",
-                                antennaset="HBA Zero",
-                                timesystem="UTC",
-                                stations=[Station.preconfigured("RS106",["LBA"]),
-                                          Station.preconfigured("DE609",["HBA"])],
-                                numberofstations=5,
-                                numberofsubarraypointings=5,
-                                numberoftbbevents=5,
-                                numberofcorrelateddataproducts=5,
-                                numberofbeamformeddataproducts=5,
-                                numberofbitspersample=5,
-                                process_map=
-                                ProcessMap(
-                                    strategyname="strategy1",
-                                    strategydescription="awesome strategy",
-                                    starttime="1980-03-23T10:20:15",
-                                    duration= "P6Y3M10DT15H",
-                                    observation_source="SAS",
-                                    observation_id="SAS VIC Tree Id",
-                                    process_source="MoM",
-                                    process_id="MoM Id",
-                                    parset_source="parsource",
-                                    parset_id="parid",
-                                    relations=[ProcessRelation(
-                                        identifier_source="source",
-                                        identifier="90")]
-                                ),
-                                observationdescription="description",
-                                channelwidth_frequency=160,
-                                channelwidth_frequencyunit="MHz",
-                                channelspersubband=5,
-                                subarraypointings=[SubArrayPointing(
-                                    pointing=PointingAltAz(
-                                        az_angle=20,
-                                        az_angleunit="degrees",
-                                        alt_angle=30,
-                                        alt_angleunit="degrees",
-                                        equinox="SUN"
-                                    ),
-                                    beamnumber=5,
-                                    subarraypointingidentifier="id",
-                                    subarraypointingidentifier_source="idsource",
-                                    measurementtype="All Sky",
-                                    targetname="Sun",
-                                    starttime="1980-03-23T10:20:15",
-                                    duration= "P6Y3M10DT15H",
-                                    numberofprocessing=1,
-                                    numberofcorrelateddataproducts=2,
-                                    numberofbeamformeddataproducts=1,
-                                    relations=[ProcessRelation(
-                                        identifier_source="source",
-                                        identifier="90")],
-                                    #correlatorprocessing=CorrelatorProcessing(
-                                    #    integrationinterval=0.5,
-                                    #    integrationinterval_unit="ns",
-                                    #    channelwidth_frequency=160,
-                                    #    channelwidth_frequencyunit="MHz"
-                                    # ),
-                                    coherentstokesprocessing=CoherentStokesProcessing(
-                                        rawsamplingtime=20,
-                                        rawsamplingtime_unit="ns",
-                                        timesamplingdownfactor=2,
-                                        samplingtime=10,
-                                        samplingtime_unit="ns",
-                                        stokes=["XX"],
-                                        numberofstations=1,
-                                        stations=[Station.preconfigured("CS002",["HBA0","HBA1"])],
-                                        frequencydownsamplingfactor=2,
-                                        numberofcollapsedchannels=2,
-                                        channelwidth_frequency=160,
-                                        channelwidth_frequencyunit="MHz",
-                                        channelspersubband=122
-                                    ),
-                                    incoherentstokesprocessing=IncoherentStokesProcessing(
-                                        rawsamplingtime=20,
-                                        rawsamplingtime_unit="ns",
-                                        timesamplingdownfactor=2,
-                                        samplingtime=10,
-                                        samplingtime_unit="ns",
-                                        stokes=["XX"],
-                                        numberofstations=1,
-                                        stations=[Station.preconfigured("CS003",["HBA0","HBA1"])],
-                                        frequencydownsamplingfactor=2,
-                                        numberofcollapsedchannels=2,
-                                        channelwidth_frequency=160,
-                                        channelwidth_frequencyunit="MHz",
-                                        channelspersubband=122
-                                    ),
-                                    flyseyeprocessing=FlysEyeProcessing(
-                                        rawsamplingtime=10,
-                                        rawsamplingtime_unit="ms",
-                                        timesamplingdownfactor=2,
-                                        samplingtime=2,
-                                        samplingtime_unit="ms",
-                                        stokes=["I"],
-                                    ),
-                                    nonstandardprocessing=NonStandardProcessing(
-                                        channelwidth_frequency=160,
-                                        channelwidth_frequencyunit="MHz",
-                                        channelspersubband=122
-                                    )
-                                )],
-                                transientbufferboardevents=["event1","event2"]
-    )
-
-    print "===\nAdding parset:\n"
-    print mysip.add_parset(
-        source="Unknkown",
-        identifier="Parset1",
-        contents="blabla")
-
-    print "===\nAdding unspecified process:\n"
-    print mysip.add_unspecifiedprocess(
-        observingmode="Interferometer",
-        description="unspecified",
-        process_map=
-        ProcessMap(
-            strategyname="strategy1",
-            strategydescription="awesome strategy",
-            starttime="1980-03-23T10:20:15",
-            duration= "P6Y3M10DT15H",
-            observation_source="SAS",
-            observation_id="SAS VIC Tree Id",
-            process_source="MoM",
-            process_id="MoM Id",
-            parset_source="parsource",
-            parset_id="parid",
-            relations=[ProcessRelation(
-                identifier_source="source",
-                identifier="90",
-                name="name"),
-                       ProcessRelation(
-                           identifier_source="sourceB",
-                           identifier="7",
-                           name="another name")
-            ]
-        )
-    )
-
-    print "===\nAdding simple pipelinerun:\n"
-    print mysip.add_pipelinerun(
-        SimplePipeline(
-            PipelineMap(
-                name="simple",
-                version="version",
-                sourcedata_identifiers=["ID1","ID2"],
-                sourcedata_source="space",
-                process_map=ProcessMap(
-                    strategyname="strategy1",
-                    strategydescription="awesome strategy",
-                    starttime="1980-03-23T10:20:15",
-                    duration= "P6Y3M10DT15H",
-                    observation_source="SAS",
-                    observation_id="SAS VIC Tree Id",
-                    process_source="MoM",
-                    process_id="MoM Id",
-                    parset_source="parsource",
-                    parset_id="parid",
-                    relations=[
-                        ProcessRelation(
-                            identifier_source="source",
-                            identifier="90")]
-                ),
-                )
-        )
-    )
-
-
-    print "===\nAdding generic pipelinerun:\n"
-    print mysip.add_pipelinerun(
-        GenericPipeline(
-            PipelineMap(
-                name="generic",
-                version="version",
-                sourcedata_identifiers=["ID1","ID2"],
-                sourcedata_source="space",
-                process_map=ProcessMap(
-                    strategyname="strategy1",
-                    strategydescription="awesome strategy",
-                    starttime="1980-03-23T10:20:15",
-                    duration= "P6Y3M10DT15H",
-                    observation_source="SAS",
-                    observation_id="SAS VIC Tree Id",
-                    process_source="MoM",
-                    process_id="MoM Id",
-                    parset_source="parsource",
-                    parset_id="parid",
-                    relations=[
-                        ProcessRelation(
-                            identifier_source="source",
-                            identifier="90")]
-                ),
-                )
-        )
-    )
-
-    print "===\nAdding cosmic ray pipelinerun:\n"
-    print mysip.add_pipelinerun(
-        CosmicRayPipeline(
-            PipelineMap(
-                name="cosmic ray",
-                version="version",
-                sourcedata_identifiers=["ID1","ID2"],
-                sourcedata_source="space",
-                process_map=ProcessMap(
-                    strategyname="strategy1",
-                    strategydescription="awesome strategy",
-                    starttime="1980-03-23T10:20:15",
-                    duration= "P6Y3M10DT15H",
-                    observation_source="SAS",
-                    observation_id="SAS VIC Tree Id",
-                    process_source="MoM",
-                    process_id="MoM Id",
-                    parset_source="parsource",
-                    parset_id="parid",
-                    relations=[
-                        ProcessRelation(
-                            identifier_source="source",
-                            identifier="90")]
-                ),
-                )
-        )
-    )
-
-
-    print "===\nAdding long baseline pipelinerun:\n"
-    print mysip.add_pipelinerun(
-        LongBaselinePipeline(
-            PipelineMap(
-                name="long baseline",
-                version="version",
-                sourcedata_identifiers=["ID1","ID2"],
-                sourcedata_source="space",
-                process_map=ProcessMap(
-                    strategyname="strategy1",
-                    strategydescription="awesome strategy",
-                    starttime="1980-03-23T10:20:15",
-                    duration= "P6Y3M10DT15H",
-                    observation_source="SAS",
-                    observation_id="SAS VIC Tree Id",
-                    process_source="MoM",
-                    process_id="MoM Id",
-                    parset_source="parsource",
-                    parset_id="parid",
-                    relations=[
-                        ProcessRelation(
-                            identifier_source="source",
-                            identifier="90")]
-                ),
-                ),
-            subbandspersubbandgroup=5,
-            subbandgroupspermS=5
-
-        )
-    )
-
-
-    print "===\nAdding imaging pipelinerun:\n"
-    print mysip.add_pipelinerun(ImagingPipeline(
-         PipelineMap(
-                name="long baseline",
-                version="version",
-                sourcedata_identifiers=["ID1","ID2"],
-                sourcedata_source="space",
-                process_map=ProcessMap(
-                    strategyname="strategy1",
-                    strategydescription="awesome strategy",
-                    starttime="1980-03-23T10:20:15",
-                    duration= "P6Y3M10DT15H",
-                    observation_source="SAS",
-                    observation_id="SAS VIC Tree Id",
-                    process_source="MoM",
-                    process_id="MoM Id",
-                    parset_source="parsource",
-                    parset_id="parid",
-                    relations=[
-                        ProcessRelation(
-                            identifier_source="source",
-                            identifier="90")]
-                ),
-                ),
-         imagerintegrationtime=10,
-         imagerintegrationtime_unit="ms",
-         numberofmajorcycles=5,
-         numberofinstrumentmodels=5,
-         numberofcorrelateddataproducts=1,
-         numberofskyimages=1,
-    )
-    )
-
-    print "===\nAdding calibration pipelinerun:\n"
-    print mysip.add_pipelinerun(
-        CalibrationPipeline(
-        PipelineMap(
-                name="long baseline",
-                version="version",
-                sourcedata_identifiers=["ID1","ID2"],
-                sourcedata_source="space",
-                process_map=ProcessMap(
-                    strategyname="strategy1",
-                    strategydescription="awesome strategy",
-                    starttime="1980-03-23T10:20:15",
-                    duration= "P6Y3M10DT15H",
-                    observation_source="SAS",
-                    observation_id="SAS VIC Tree Id",
-                    process_source="MoM",
-                    process_id="MoM Id",
-                    parset_source="parsource",
-                    parset_id="parid",
-                    relations=[
-                        ProcessRelation(
-                            identifier_source="source",
-                            identifier="90")]
-                ),
-                ),
-        skymodeldatabase="db",
-        numberofinstrumentmodels=1,
-        numberofcorrelateddataproducts=1,
-        frequencyintegrationstep=1,
-        timeintegrationstep=1,
-        flagautocorrelations=True,
-        demixing=False
-    ))
-
-
-    print "===\nAdding averaging pipelinerun:\n"
-    print mysip.add_pipelinerun(
-        AveragingPipeline(
-        PipelineMap(
-                name="long baseline",
-                version="version",
-                sourcedata_identifiers=["ID1","ID2"],
-                sourcedata_source="space",
-                process_map=ProcessMap(
-                    strategyname="strategy1",
-                    strategydescription="awesome strategy",
-                    starttime="1980-03-23T10:20:15",
-                    duration= "P6Y3M10DT15H",
-                    observation_source="SAS",
-                    observation_id="SAS VIC Tree Id",
-                    process_source="MoM",
-                    process_id="MoM Id",
-                    parset_source="parsource",
-                    parset_id="parid",
-                    relations=[
-                        ProcessRelation(
-                            identifier_source="source",
-                            identifier="90")]
-                ),
-                ),
-        numberofcorrelateddataproducts=1,
-        frequencyintegrationstep=1,
-        timeintegrationstep=1,
-        flagautocorrelations=True,
-        demixing=False
-    ))
-
-    print "===\nAdding pulsar pipelinerun:\n"
-    print mysip.add_pipelinerun(
-        PulsarPipeline(
-            PipelineMap(
-                name="long baseline",
-                version="version",
-                sourcedata_identifiers=["ID1","ID2"],
-                sourcedata_source="space",
-                process_map=ProcessMap(
-                    strategyname="strategy1",
-                    strategydescription="awesome strategy",
-                    starttime="1980-03-23T10:20:15",
-                    duration= "P6Y3M10DT15H",
-                    observation_source="SAS",
-                    observation_id="SAS VIC Tree Id",
-                    process_source="MoM",
-                    process_id="MoM Id",
-                    parset_source="parsource",
-                    parset_id="parid",
-                    relations=[
-                        ProcessRelation(
-                            identifier_source="source",
-                            identifier="90")]
-                ),
-                ),
-            pulsarselection="Pulsars in observation specs, file and brightest in SAP and TAB",
-            pulsars=["J1234+67"],
-            dosinglepulseanalysis=False,
-            convertRawTo8bit=True,
-            subintegrationlength=10,
-            subintegrationlength_unit='ns',
-            skiprfiexcision=False,
-            skipdatafolding=False,
-            skipoptimizepulsarprofile=True,
-            skipconvertrawintofoldedpsrfits=False,
-            runrotationalradiotransientsanalysis=True,
-            skipdynamicspectrum=False,
-            skipprefold=True
-        )
-    )
-
-     # add optional dataproduct item
-    print "===\nAdding related sky image dataproduct using predefined constants:\n"
-    print mysip.add_related_dataproduct(
-        SkyImageDataProduct(
-            DataProductMap(
-                type=constants.DATAPRODUCTTYPE_BEAM_FORMED_DATA,
-                source="space",
-                identifier="fourtytwo",
-                size=2048,
-                filename="/home/paulus/test.h5",
-                fileformat=constants.FILEFORMATTYPE_AIPS___CASA,
-                processsource="someone gave it to me",
-                processid="SIPlib 0.1"
-            ),
-            numberofaxes=2,
-            coordinates=[
-                SpectralCoordinate(
-                    quantity_type=constants.SPECTRALQUANTITYTYPE_VELOCITYAPPRADIAL,
-                    quantity_value=20.0,
-                    axis=LinearAxis(
-                        number=5,
-                        name="bla",
-                        units="unit",
-                        length=5,
-                        increment=5,
-                        referencepixel=7.5,
-                        referencevalue=7.4)),
-                DirectionCoordinate(
-                    linearaxis_a=LinearAxis(
-                        number=5,
-                        name="bla",
-                        units="unit",
-                        length=5,
-                        increment=5,
-                        referencepixel=7.5,
-                        referencevalue=7.4),
-                    linearaxis_b=LinearAxis(
-                        number=5,
-                        name="blb",
-                        units="unit",
-                        length=5,
-                        increment=5,
-                        referencepixel=7.5,
-                        referencevalue=7.4),
-                    pc0_0=0.0,
-                    pc0_1=0.1,
-                    pc1_0=1.0,
-                    pc1_1=1.1,
-                    equinox=constants.EQUINOXTYPE_JUPITER,
-                    radecsystem=constants.RADECSYSTEM_FK4_NO_E,
-                    projection="rear",
-                    projectionparameters=[1.0,1.0,1.0],
-                    longitudepole_angle=1.0,
-                    longitudepole_angleunit=constants.ANGLEUNIT_RADIANS,
-                    latitudepole_angle=2.0,
-                    latitudepole_angleunit=constants.ANGLEUNIT_ARCSEC,
-                    ),
-                PolarizationCoordinate(
-                    tabularaxis=TabularAxis(
-                        number=5,
-                        name="bla",
-                        units="someunit",
-                        length=5,
-                        ),
-                    polarizations=[constants.POLARIZATIONTYPE_LR,constants.POLARIZATIONTYPE_XRE]
-                ),
-            ],
-            locationframe=constants.LOCATIONFRAME_LOCAL_GROUP,
-            timeframe="timeframe",
-            observationpointing=PointingRaDec(
-                ra_angle=1.0,
-                ra_angleunit=constants.ANGLEUNIT_DEGREES,
-                dec_angle=42.0,
-                dec_angleunit=constants.ANGLEUNIT_DEGREES,
-                equinox=constants.EQUINOXTYPE_B1950
-            ),
-            restoringbeammajor_angle=1.0,
-            restoringbeammajor_angleunit=constants.ANGLEUNIT_DEGREES,
-            restoringbeamminor_angle=2.0,
-            restoringbeamminor_angleunit=constants.ANGLEUNIT_DEGREES,
-            rmsnoise=1.0
-        )
-    )
-
-    #path = os.path.expanduser("~/sip9091.xml")
-    #with open(path, 'w+') as f:
-    #   f.write(mysip.get_prettyxml())
-
-
-if __name__ == '__main__':
-    main()
+    def save_to_file(self, path):
+        path = os.path.expanduser(path)
+        with open(path, 'w+') as f:
+            f.write(self.get_prettyxml())
 
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 01e87de6603244b2077144b3af8f8fe25b0667ce..29e9e7fce3518aa18568356aca6328fd3b981f30 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -2,4 +2,3 @@
 include(LofarCTest)
 
 lofar_add_test(test_siplib)
-
diff --git a/test/test_siplib.py b/test/test_siplib.py
index d336dba5c411e10c7aad0de7ce81d0b10b550eda..7ebd4932b8e13179da51c9876e0c131ae3999a3b 100755
--- a/test/test_siplib.py
+++ b/test/test_siplib.py
@@ -21,11 +21,840 @@
 
 import unittest
 from lofar.lta.sip import siplib
+from lofar.lta.sip import validator
+from lofar.lta.sip import constants
+
+TMPFILE_PATH = "/tmp/test_siplib.xml"
+VALIDFILE_PATH ="/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/sip/test/valid_sip.xml"  # todo fix path for cmake tests
+XSD_PATH="/home/jkuensem/dev/SIP-lib/SIPlib-Task9091/LTA/LTAIngest/doc/LTA-SIP.xsd"  # todo fix path for cmake tests
+
+
+def create_basicdoc():
+    return siplib.Sip(
+            project_code="code",
+            project_primaryinvestigator="pi",
+            project_contactauthor="coauthor",
+            #project_telescope="LOFAR",
+            project_description="awesome project",
+            project_coinvestigators=["sidekick1", "sidekick2"],
+            dataproduct=siplib.SimpleDataProduct(
+                siplib.DataProductMap(
+                    type="Unknown",
+                    source="space",
+                    identifier="42",
+                    size=1024,
+                    filename="/home/paulus/test.h5",
+                    fileformat="HDF5",
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1",
+                    checksum_md5="hash1",
+                    checksum_adler32= "hash2",
+                    storageticket="ticket"
+                )
+            )
+        )
+
+class TestSIPvalidator(unittest.TestCase):
+    def test_validate(self):
+        self.assertTrue(validator.validate(VALIDFILE_PATH, XSD_PATH))
 
 
 class TestSIPlib(unittest.TestCase):
-    def testFoo(self):
-        self.assertTrue(siplib.foo())
+
+    def test_basic_doc(self):
+        # create example doc with mandatory attributes
+        print "===\nCreating basic document:\n"
+        mysip = create_basicdoc()
+        mysip.save_to_file(TMPFILE_PATH)
+        self.assertTrue(validator.validate(TMPFILE_PATH, XSD_PATH))
+
+    def test_dataproducts(self):
+        mysip = create_basicdoc()
+        print "===\nAdding related generic dataproduct:\n"
+        # add optional dataproduct item
+        print mysip.add_related_dataproduct(
+            siplib.GenericDataProduct(
+                siplib.DataProductMap(
+                    type="Unknown",
+                    source="space",
+                    identifier="fourtytwo",
+                    size=2048,
+                    filename="/home/paulus/test.h5",
+                    fileformat="HDF5",
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1"
+                )
+            )
+        )
+
+        # add optional dataproduct item
+        print "===\nAdding related pulp summary dataproduct:\n"
+        print mysip.add_related_dataproduct(
+            siplib.PulpSummaryDataProduct(
+                siplib.DataProductMap(
+                    type="Unknown",
+                    source="space",
+                    identifier="fourtytwo",
+                    size=2048,
+                    filename="/home/paulus/test.h5",
+                    fileformat="HDF5",
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1"
+                ),
+                filecontent=["content_a","content_b"],
+                datatype="CoherentStokes"
+            )
+        )
+
+
+
+        # add optional dataproduct item
+        print "===\nAdding related pulp dataproduct:\n"
+        print mysip.add_related_dataproduct(
+            siplib.PulpDataProduct(
+                siplib.DataProductMap(
+                    type="Unknown",
+                    source="space",
+                    identifier="fourtytwo",
+                    size=2048,
+                    filename="/home/paulus/test.h5",
+                    fileformat="HDF5",
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1"
+                ),
+                filecontent=["content_a","content_b"],
+                datatype="CoherentStokes",
+                arraybeam=siplib.SimpleArrayBeam(siplib.ArrayBeamMap(
+                    subarraypointingidentifier_source="source",
+                    subarraypointingidentifier="id",
+                    beamnumber=4,
+                    dispersionmeasure=16,
+                    numberofsubbands=3,
+                    stationsubbands=[1,2,3],
+                    samplingtime=3,
+                    samplingtimeunit="ms",
+                    centralfrequencies="",
+                    centralfrequencies_unit="MHz",
+                    channelwidth_frequency=160,
+                    channelwidth_frequencyunit="MHz",
+                    channelspersubband=5,
+                    stokes=["I","Q"]
+                ))
+            )
+        )
+
+        # add optional dataproduct item
+        print "===\nAdding related beamformed dataproduct:\n"
+        print mysip.add_related_dataproduct(
+            siplib.BeamFormedDataProduct(
+                dataproduct_map=siplib.DataProductMap(
+                    type="Unknown",
+                    source="space",
+                    identifier="fourtytwo",
+                    size=2048,
+                    filename="/home/paulus/test.h5",
+                    fileformat="HDF5",
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1"
+                ),
+                beams=[siplib.FlysEyeBeam(
+                    arraybeam_map=siplib.ArrayBeamMap(
+                        subarraypointingidentifier_source="source",
+                        subarraypointingidentifier="id",
+                        beamnumber=4,
+                        dispersionmeasure=16,
+                        numberofsubbands=3,
+                        stationsubbands=[1,2,3],
+                        samplingtime=3,
+                        samplingtimeunit="ms",
+                        centralfrequencies="",
+                        centralfrequencies_unit="MHz",
+                        channelwidth_frequency=160,
+                        channelwidth_frequencyunit="MHz",
+                        channelspersubband=5,
+                        stokes=["I","Q"]),
+                    station=siplib.Station.preconfigured("CS001",["HBA0","HBA1"])
+                )]
+            )
+        )
+
+
+        # add optional dataproduct item
+        print "===\nAdding related sky image dataproduct:\n"
+        print mysip.add_related_dataproduct(
+            siplib.SkyImageDataProduct(
+                siplib.DataProductMap(
+                    type="Unknown",
+                    source="space",
+                    identifier="fourtytwo",
+                    size=2048,
+                    filename="/home/paulus/test.h5",
+                    fileformat="HDF5",
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1"
+                ),
+                numberofaxes=2,
+                coordinates=[
+                    siplib.SpectralCoordinate(
+                        quantity_type="Frequency",
+                        quantity_value=20.0,
+                        axis=siplib.LinearAxis(
+                            number=5,
+                            name="bla",
+                            units="parsec",
+                            length=5,
+                            increment=5,
+                            referencepixel=7.5,
+                            referencevalue=7.4)),
+                    siplib.SpectralCoordinate(
+                        quantity_type="Frequency",
+                        quantity_value=20.0,
+                        axis=siplib.TabularAxis(
+                            number=5,
+                            name="bla",
+                            units="parsec",
+                            length=5,
+                            )),
+                    siplib.DirectionCoordinate(
+                        linearaxis_a=siplib.LinearAxis(
+                            number=5,
+                            name="bla",
+                            units="parsec",
+                            length=5,
+                            increment=5,
+                            referencepixel=7.5,
+                            referencevalue=7.4),
+                        linearaxis_b=siplib.LinearAxis(
+                            number=5,
+                            name="bla",
+                            units="parsec",
+                            length=5,
+                            increment=5,
+                            referencepixel=7.5,
+                            referencevalue=7.4),
+                        pc0_0=0.0,
+                        pc0_1=0.1,
+                        pc1_0=1.0,
+                        pc1_1=1.1,
+                        equinox="SUN",
+                        radecsystem="ICRS",
+                        projection="rear",
+                        projectionparameters=[1.0,1.0,1.0],
+                        longitudepole_angle=1.0,
+                        longitudepole_angleunit="degrees",
+                        latitudepole_angle=2.0,
+                        latitudepole_angleunit="degrees",
+                        ),
+                    siplib.PolarizationCoordinate(
+                        tabularaxis=siplib.TabularAxis(
+                            number=5,
+                            name="bla",
+                            units="parsec",
+                            length=5,
+                            ),
+                        polarizations=["I","YY","XX","Q"]
+                    ),
+                    siplib.TimeCoordinate(
+                        equinox="SUN",
+                        axis=siplib.TabularAxis(
+                            number=5,
+                            name="timetabular",
+                            units="parsec",
+                            length=5,
+                            ),
+                        )
+                ],
+                locationframe="GEOCENTER",
+                timeframe="timeframe",
+                observationpointing=siplib.PointingRaDec(
+                    ra_angle=1.0,
+                    ra_angleunit="degrees",
+                    dec_angle=42.0,
+                    dec_angleunit="degrees",
+                    equinox="SUN"
+                ),
+                restoringbeammajor_angle=1.0,
+                restoringbeammajor_angleunit="degrees",
+                restoringbeamminor_angle=2.0,
+                restoringbeamminor_angleunit="degrees",
+                rmsnoise=1.0
+            )
+        )
+
+
+        # add optional dataproduct item
+        print "===\nAdded related correlated dataproduct:\n"
+        print mysip.add_related_dataproduct(
+            siplib.CorrelatedDataProduct(
+                siplib.DataProductMap(
+                    type="Unknown",
+                    source="space",
+                    identifier="fourtytwo",
+                    size=2048,
+                    filename="/home/paulus/test.h5",
+                    fileformat="HDF5",
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1"
+                ),
+                subarraypointing_source="source",
+                subarraypointing_identifier="id",
+                subband="1",
+                starttime="1980-03-23T10:20:15",
+                duration= "P6Y3M10DT15H",
+                integrationinterval=10,
+                integrationintervalunit="ms",
+                central_frequency=160,
+                central_frequencyunit="MHz",
+                channelwidth_frequency=200,
+                channelwidth_frequencyunit="MHz",
+                channelspersubband=122,
+                stationsubband=2,
+                )
+        )
+
+        # add optional dataproduct item
+        print "===\nAdding related pixelmap dataproduct:\n"
+        print mysip.add_related_dataproduct(
+            siplib.PixelMapDataProduct(
+                siplib.DataProductMap(
+                    type="Unknown",
+                    source="space",
+                    identifier="fourtytwo",
+                    size=2048,
+                    filename="/home/paulus/test.h5",
+                    fileformat="HDF5",
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1"
+                ),
+                numberofaxes=5,
+                coordinates=[siplib.SpectralCoordinate(
+                    quantity_type="Frequency",
+                    quantity_value=20.0,
+                    axis=siplib.LinearAxis(
+                        number=5,
+                        name="bla",
+                        units="parsec",
+                        length=5,
+                        increment=5,
+                        referencepixel=7.5,
+                        referencevalue=7.4))]
+            )
+        )
+
+
+        # add optional dataproduct item
+        print "===\nAdding related pixelmap dataproduct using predefined constants:\n"
+        print mysip.add_related_dataproduct(
+            siplib.SkyImageDataProduct(
+                siplib.DataProductMap(
+                    type=constants.DATAPRODUCTTYPE_BEAM_FORMED_DATA,
+                    source="space",
+                    identifier="fourtytwo",
+                    size=2048,
+                    filename="/home/paulus/test.h5",
+                    fileformat=constants.FILEFORMATTYPE_AIPS___CASA,
+                    processsource="someone gave it to me",
+                    processid="SIPlib 0.1"
+                ),
+                numberofaxes=2,
+                coordinates=[
+                    siplib.SpectralCoordinate(
+                        quantity_type=constants.SPECTRALQUANTITYTYPE_VELOCITYAPPRADIAL,
+                        quantity_value=20.0,
+                        axis=siplib.LinearAxis(
+                            number=5,
+                            name="bla",
+                            units="unit",
+                            length=5,
+                            increment=5,
+                            referencepixel=7.5,
+                            referencevalue=7.4)),
+                    siplib.DirectionCoordinate(
+                        linearaxis_a=siplib.LinearAxis(
+                            number=5,
+                            name="bla",
+                            units="unit",
+                            length=5,
+                            increment=5,
+                            referencepixel=7.5,
+                            referencevalue=7.4),
+                        linearaxis_b=siplib.LinearAxis(
+                            number=5,
+                            name="blb",
+                            units="unit",
+                            length=5,
+                            increment=5,
+                            referencepixel=7.5,
+                            referencevalue=7.4),
+                        pc0_0=0.0,
+                        pc0_1=0.1,
+                        pc1_0=1.0,
+                        pc1_1=1.1,
+                        equinox=constants.EQUINOXTYPE_JUPITER,
+                        radecsystem=constants.RADECSYSTEM_FK4_NO_E,
+                        projection="rear",
+                        projectionparameters=[1.0,1.0,1.0],
+                        longitudepole_angle=1.0,
+                        longitudepole_angleunit=constants.ANGLEUNIT_RADIANS,
+                        latitudepole_angle=2.0,
+                        latitudepole_angleunit=constants.ANGLEUNIT_ARCSEC,
+                        ),
+                    siplib.PolarizationCoordinate(
+                        tabularaxis=siplib.TabularAxis(
+                            number=5,
+                            name="bla",
+                            units="someunit",
+                            length=5,
+                            ),
+                        polarizations=[constants.POLARIZATIONTYPE_LR,constants.POLARIZATIONTYPE_XRE]
+                    ),
+                ],
+                locationframe=constants.LOCATIONFRAME_LOCAL_GROUP,
+                timeframe="timeframe",
+                observationpointing=siplib.PointingRaDec(
+                    ra_angle=1.0,
+                    ra_angleunit=constants.ANGLEUNIT_DEGREES,
+                    dec_angle=42.0,
+                    dec_angleunit=constants.ANGLEUNIT_DEGREES,
+                    equinox=constants.EQUINOXTYPE_B1950
+                ),
+                restoringbeammajor_angle=1.0,
+                restoringbeammajor_angleunit=constants.ANGLEUNIT_DEGREES,
+                restoringbeamminor_angle=2.0,
+                restoringbeamminor_angleunit=constants.ANGLEUNIT_DEGREES,
+                rmsnoise=1.0
+            )
+        )
+        mysip.save_to_file(TMPFILE_PATH)
+        self.assertTrue(validator.validate(TMPFILE_PATH, XSD_PATH))
+
+
+    def test_observation(self):
+        mysip = create_basicdoc()
+        # add optional observation item
+        print "===\nAdding observation:\n"
+        print mysip.add_observation(observingmode="Interferometer",
+                                    instrumentfilter="10-70 MHz",
+                                    clock_frequency='160',
+                                    clock_frequencyunit="MHz",
+                                    stationselection="Core",
+                                    antennaset="HBA Zero",
+                                    timesystem="UTC",
+                                    stations=[siplib.Station.preconfigured("RS106",["LBA"]),
+                                              siplib.Station.preconfigured("DE609",["HBA"])],
+                                    numberofstations=5,
+                                    numberofsubarraypointings=5,
+                                    numberoftbbevents=5,
+                                    numberofcorrelateddataproducts=5,
+                                    numberofbeamformeddataproducts=5,
+                                    numberofbitspersample=5,
+                                    process_map=
+                                    siplib.ProcessMap(
+                                        strategyname="strategy1",
+                                        strategydescription="awesome strategy",
+                                        starttime="1980-03-23T10:20:15",
+                                        duration= "P6Y3M10DT15H",
+                                        observation_source="SAS",
+                                        observation_id="SAS VIC Tree Id",
+                                        process_source="MoM",
+                                        process_id="MoM Id",
+                                        parset_source="parsource",
+                                        parset_id="parid",
+                                        relations=[siplib.ProcessRelation(
+                                            identifier_source="source",
+                                            identifier="90")]
+                                    ),
+                                    observationdescription="description",
+                                    channelwidth_frequency=160,
+                                    channelwidth_frequencyunit="MHz",
+                                    channelspersubband=5,
+                                    subarraypointings=[siplib.SubArrayPointing(
+                                        pointing=siplib.PointingAltAz(
+                                            az_angle=20,
+                                            az_angleunit="degrees",
+                                            alt_angle=30,
+                                            alt_angleunit="degrees",
+                                            equinox="SUN"
+                                        ),
+                                        beamnumber=5,
+                                        subarraypointingidentifier="id",
+                                        subarraypointingidentifier_source="idsource",
+                                        measurementtype="All Sky",
+                                        targetname="Sun",
+                                        starttime="1980-03-23T10:20:15",
+                                        duration= "P6Y3M10DT15H",
+                                        numberofprocessing=1,
+                                        numberofcorrelateddataproducts=2,
+                                        numberofbeamformeddataproducts=1,
+                                        relations=[siplib.ProcessRelation(
+                                            identifier_source="source",
+                                            identifier="90")],
+                                        correlatorprocessing=siplib.CorrelatorProcessing(
+                                            integrationinterval=0.5,
+                                            integrationinterval_unit="ns",
+                                            channelwidth_frequency=160,
+                                            channelwidth_frequencyunit="MHz"
+                                        ),
+                                        coherentstokesprocessing=siplib.CoherentStokesProcessing(
+                                            rawsamplingtime=20,
+                                            rawsamplingtime_unit="ns",
+                                            timesamplingdownfactor=2,
+                                            samplingtime=10,
+                                            samplingtime_unit="ns",
+                                            stokes=["XX"],
+                                            numberofstations=1,
+                                            stations=[siplib.Station.preconfigured("CS002",["HBA0","HBA1"])],
+                                            frequencydownsamplingfactor=2,
+                                            numberofcollapsedchannels=2,
+                                            channelwidth_frequency=160,
+                                            channelwidth_frequencyunit="MHz",
+                                            channelspersubband=122
+                                        ),
+                                        incoherentstokesprocessing=siplib.IncoherentStokesProcessing(
+                                            rawsamplingtime=20,
+                                            rawsamplingtime_unit="ns",
+                                            timesamplingdownfactor=2,
+                                            samplingtime=10,
+                                            samplingtime_unit="ns",
+                                            stokes=["XX"],
+                                            numberofstations=1,
+                                            stations=[siplib.Station.preconfigured("CS003",["HBA0","HBA1"])],
+                                            frequencydownsamplingfactor=2,
+                                            numberofcollapsedchannels=2,
+                                            channelwidth_frequency=160,
+                                            channelwidth_frequencyunit="MHz",
+                                            channelspersubband=122
+                                        ),
+                                        flyseyeprocessing=siplib.FlysEyeProcessing(
+                                            rawsamplingtime=10,
+                                            rawsamplingtime_unit="ms",
+                                            timesamplingdownfactor=2,
+                                            samplingtime=2,
+                                            samplingtime_unit="ms",
+                                            stokes=["I"],
+                                            ),
+                                        nonstandardprocessing=siplib.NonStandardProcessing(
+                                            channelwidth_frequency=160,
+                                            channelwidth_frequencyunit="MHz",
+                                            channelspersubband=122
+                                        )
+                                    )],
+                                    transientbufferboardevents=["event1","event2"]
+                                )
+
+        mysip.save_to_file(TMPFILE_PATH)
+        self.assertTrue(validator.validate(TMPFILE_PATH, XSD_PATH))
+
+
+
+    def test_parset(self):
+         mysip = create_basicdoc()
+         print "===\nAdding parset:\n"
+         print mysip.add_parset(
+             source="Unknkown",
+             identifier="Parset1",
+             contents="blabla")
+
+         mysip.save_to_file(TMPFILE_PATH)
+         self.assertTrue(validator.validate(TMPFILE_PATH, XSD_PATH))
+
+    def test_unspecifiedprocess(self):
+        mysip = create_basicdoc()
+        print "===\nAdding unspecified process:\n"
+        print mysip.add_unspecifiedprocess(
+            observingmode="Interferometer",
+            description="unspecified",
+            process_map=
+            siplib.ProcessMap(
+                strategyname="strategy1",
+                strategydescription="awesome strategy",
+                starttime="1980-03-23T10:20:15",
+                duration= "P6Y3M10DT15H",
+                observation_source="SAS",
+                observation_id="SAS VIC Tree Id",
+                process_source="MoM",
+                process_id="MoM Id",
+                parset_source="parsource",
+                parset_id="parid",
+                relations=[siplib.ProcessRelation(
+                    identifier_source="source",
+                    identifier="90",
+                    name="name"),
+                           siplib.ProcessRelation(
+                               identifier_source="sourceB",
+                               identifier="7",
+                               name="another name")
+                ]
+            )
+        )
+        mysip.save_to_file(TMPFILE_PATH)
+        self.assertTrue(validator.validate(TMPFILE_PATH, XSD_PATH))
+
+
+    def test_pipelines(self):
+        mysip = create_basicdoc()
+        print "===\nAdding simple pipelinerun:\n"
+        print mysip.add_pipelinerun(
+            siplib.SimplePipeline(
+                siplib.PipelineMap(
+                    name="simple",
+                    version="version",
+                    sourcedata_identifiers=["ID1","ID2"],
+                    sourcedata_source="space",
+                    process_map=siplib.ProcessMap(
+                        strategyname="strategy1",
+                        strategydescription="awesome strategy",
+                        starttime="1980-03-23T10:20:15",
+                        duration= "P6Y3M10DT15H",
+                        observation_source="SAS",
+                        observation_id="SAS VIC Tree Id",
+                        process_source="MoM",
+                        process_id="MoM Id",
+                        parset_source="parsource",
+                        parset_id="parid",
+                        relations=[
+                            siplib.ProcessRelation(
+                                identifier_source="source",
+                                identifier="90")]
+                    ),
+                    )
+            )
+        )
+
+
+        print "===\nAdding generic pipelinerun:\n"
+        print mysip.add_pipelinerun(
+            siplib.GenericPipeline(
+                siplib.PipelineMap(
+                    name="generic",
+                    version="version",
+                    sourcedata_identifiers=["ID1","ID2"],
+                    sourcedata_source="space",
+                    process_map=siplib.ProcessMap(
+                        strategyname="strategy1",
+                        strategydescription="awesome strategy",
+                        starttime="1980-03-23T10:20:15",
+                        duration= "P6Y3M10DT15H",
+                        observation_source="SAS",
+                        observation_id="SAS VIC Tree Id",
+                        process_source="MoM",
+                        process_id="MoM Id",
+                        parset_source="parsource",
+                        parset_id="parid",
+                        relations=[
+                            siplib.ProcessRelation(
+                                identifier_source="source",
+                                identifier="90")]
+                    ),
+                    )
+            )
+        )
+
+        print "===\nAdding cosmic ray pipelinerun:\n"
+        print mysip.add_pipelinerun(
+            siplib.CosmicRayPipeline(
+                siplib.PipelineMap(
+                    name="cosmic ray",
+                    version="version",
+                    sourcedata_identifiers=["ID1","ID2"],
+                    sourcedata_source="space",
+                    process_map=siplib.ProcessMap(
+                        strategyname="strategy1",
+                        strategydescription="awesome strategy",
+                        starttime="1980-03-23T10:20:15",
+                        duration= "P6Y3M10DT15H",
+                        observation_source="SAS",
+                        observation_id="SAS VIC Tree Id",
+                        process_source="MoM",
+                        process_id="MoM Id",
+                        parset_source="parsource",
+                        parset_id="parid",
+                        relations=[
+                            siplib.ProcessRelation(
+                                identifier_source="source",
+                                identifier="90")]
+                    ),
+                    )
+            )
+        )
+
+
+        print "===\nAdding long baseline pipelinerun:\n"
+        print mysip.add_pipelinerun(
+            siplib.LongBaselinePipeline(
+                siplib.PipelineMap(
+                    name="long baseline",
+                    version="version",
+                    sourcedata_identifiers=["ID1","ID2"],
+                    sourcedata_source="space",
+                    process_map=siplib.ProcessMap(
+                        strategyname="strategy1",
+                        strategydescription="awesome strategy",
+                        starttime="1980-03-23T10:20:15",
+                        duration= "P6Y3M10DT15H",
+                        observation_source="SAS",
+                        observation_id="SAS VIC Tree Id",
+                        process_source="MoM",
+                        process_id="MoM Id",
+                        parset_source="parsource",
+                        parset_id="parid",
+                        relations=[
+                            siplib.ProcessRelation(
+                                identifier_source="source",
+                                identifier="90")]
+                    ),
+                    ),
+                subbandspersubbandgroup=5,
+                subbandgroupspermS=5
+
+            )
+        )
+
+
+        print "===\nAdding imaging pipelinerun:\n"
+        print mysip.add_pipelinerun(siplib.ImagingPipeline(
+             siplib.PipelineMap(
+                    name="long baseline",
+                    version="version",
+                    sourcedata_identifiers=["ID1","ID2"],
+                    sourcedata_source="space",
+                    process_map=siplib.ProcessMap(
+                        strategyname="strategy1",
+                        strategydescription="awesome strategy",
+                        starttime="1980-03-23T10:20:15",
+                        duration= "P6Y3M10DT15H",
+                        observation_source="SAS",
+                        observation_id="SAS VIC Tree Id",
+                        process_source="MoM",
+                        process_id="MoM Id",
+                        parset_source="parsource",
+                        parset_id="parid",
+                        relations=[
+                            siplib.ProcessRelation(
+                                identifier_source="source",
+                                identifier="90")]
+                    ),
+                    ),
+             imagerintegrationtime=10,
+             imagerintegrationtime_unit="ms",
+             numberofmajorcycles=5,
+             numberofinstrumentmodels=5,
+             numberofcorrelateddataproducts=1,
+             numberofskyimages=1,
+        )
+        )
+
+        print "===\nAdding calibration pipelinerun:\n"
+        print mysip.add_pipelinerun(
+            siplib.CalibrationPipeline(
+            siplib.PipelineMap(
+                    name="long baseline",
+                    version="version",
+                    sourcedata_identifiers=["ID1","ID2"],
+                    sourcedata_source="space",
+                    process_map=siplib.ProcessMap(
+                        strategyname="strategy1",
+                        strategydescription="awesome strategy",
+                        starttime="1980-03-23T10:20:15",
+                        duration= "P6Y3M10DT15H",
+                        observation_source="SAS",
+                        observation_id="SAS VIC Tree Id",
+                        process_source="MoM",
+                        process_id="MoM Id",
+                        parset_source="parsource",
+                        parset_id="parid",
+                        relations=[
+                            siplib.ProcessRelation(
+                                identifier_source="source",
+                                identifier="90")]
+                    ),
+                    ),
+            skymodeldatabase="db",
+            numberofinstrumentmodels=1,
+            numberofcorrelateddataproducts=1,
+            frequencyintegrationstep=1,
+            timeintegrationstep=1,
+            flagautocorrelations=True,
+            demixing=False
+        ))
+
+
+        print "===\nAdding averaging pipelinerun:\n"
+        print mysip.add_pipelinerun(
+            siplib.AveragingPipeline(
+            siplib.PipelineMap(
+                    name="long baseline",
+                    version="version",
+                    sourcedata_identifiers=["ID1","ID2"],
+                    sourcedata_source="space",
+                    process_map=siplib.ProcessMap(
+                        strategyname="strategy1",
+                        strategydescription="awesome strategy",
+                        starttime="1980-03-23T10:20:15",
+                        duration= "P6Y3M10DT15H",
+                        observation_source="SAS",
+                        observation_id="SAS VIC Tree Id",
+                        process_source="MoM",
+                        process_id="MoM Id",
+                        parset_source="parsource",
+                        parset_id="parid",
+                        relations=[
+                            siplib.ProcessRelation(
+                                identifier_source="source",
+                                identifier="90")]
+                    ),
+                    ),
+            numberofcorrelateddataproducts=1,
+            frequencyintegrationstep=1,
+            timeintegrationstep=1,
+            flagautocorrelations=True,
+            demixing=False
+        ))
+
+        print "===\nAdding pulsar pipelinerun:\n"
+        print mysip.add_pipelinerun(
+            siplib.PulsarPipeline(
+                siplib.PipelineMap(
+                    name="long baseline",
+                    version="version",
+                    sourcedata_identifiers=["ID1","ID2"],
+                    sourcedata_source="space",
+                    process_map=siplib.ProcessMap(
+                        strategyname="strategy1",
+                        strategydescription="awesome strategy",
+                        starttime="1980-03-23T10:20:15",
+                        duration= "P6Y3M10DT15H",
+                        observation_source="SAS",
+                        observation_id="SAS VIC Tree Id",
+                        process_source="MoM",
+                        process_id="MoM Id",
+                        parset_source="parsource",
+                        parset_id="parid",
+                        relations=[
+                            siplib.ProcessRelation(
+                                identifier_source="source",
+                                identifier="90")]
+                    ),
+                    ),
+                pulsarselection="Pulsars in observation specs, file and brightest in SAP and TAB",
+                pulsars=["J1234+67"],
+                dosinglepulseanalysis=False,
+                convertRawTo8bit=True,
+                subintegrationlength=10,
+                subintegrationlength_unit='ns',
+                skiprfiexcision=False,
+                skipdatafolding=False,
+                skipoptimizepulsarprofile=True,
+                skipconvertrawintofoldedpsrfits=False,
+                runrotationalradiotransientsanalysis=True,
+                skipdynamicspectrum=False,
+                skipprefold=True
+            )
+        )
+
+        mysip.save_to_file(TMPFILE_PATH)
+        self.assertTrue(validator.validate(TMPFILE_PATH, XSD_PATH))
+
 
 # run tests if main
 if __name__ == '__main__':
diff --git a/test/test_siplib.run b/test/test_siplib.run
index 436e049b5f7d9bdebddde7676bf19ac59a1c319d..1b2b009a27dc8b627e6557cb1d9737ee7c7b9210 100755
--- a/test/test_siplib.run
+++ b/test/test_siplib.run
@@ -4,3 +4,4 @@
 source python-coverage.sh
 python_coverage_test "sip.*" test_siplib.py
 
+
diff --git a/test/valid_sip.xml b/test/valid_sip.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b7b2132b167266e53672c4b1f667aa854bc5b24b
--- /dev/null
+++ b/test/valid_sip.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" ?>
+<ns1:ltaSip xmlns:ns1="http://www.astron.nl/SIP-Lofar">
+	<sipGeneratorVersion>SIPlib 0.1</sipGeneratorVersion>
+	<project>
+		<projectCode>code</projectCode>
+		<primaryInvestigator>pi</primaryInvestigator>
+		<coInvestigator>sidekick1</coInvestigator>
+		<coInvestigator>sidekick2</coInvestigator>
+		<contactAuthor>coauthor</contactAuthor>
+		<telescope>LOFAR</telescope>
+		<projectDescription>awesome project</projectDescription>
+	</project>
+	<dataProduct>
+		<dataProductType>Unknown</dataProductType>
+		<dataProductIdentifier>
+			<source>space</source>
+			<identifier>42</identifier>
+		</dataProductIdentifier>
+		<storageTicket>ticket</storageTicket>
+		<size>1024</size>
+		<checksum>
+			<algorithm>MD5</algorithm>
+			<value>hash1</value>
+		</checksum>
+		<checksum>
+			<algorithm>Adler32</algorithm>
+			<value>hash2</value>
+		</checksum>
+		<fileName>/home/paulus/test.h5</fileName>
+		<fileFormat>HDF5</fileFormat>
+		<processIdentifier>
+			<source>someone gave it to me</source>
+			<identifier>SIPlib 0.1</identifier>
+		</processIdentifier>
+	</dataProduct>
+</ns1:ltaSip>