diff --git a/pom.xml b/pom.xml
index ecf386dbb4a2e72d1e8af5c4000afdf549ffee28..a68a964af88e38ac681f9348259f5a5cc21fc130 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>de.landsh.opendata</groupId>
     <artifactId>dcat-uploader</artifactId>
-    <version>1.0.3</version>
+    <version>1.0.4</version>
 
     <build>
         <plugins>
diff --git a/src/main/java/de/landsh/opendata/ckan/DcatUploader.java b/src/main/java/de/landsh/opendata/ckan/DcatUploader.java
index 4a0c73115aab0d24a9aa34ba7f9d1a1915c01f70..3c9cc5107d3f6b2a1f028b0c84083fe45e8efc02 100644
--- a/src/main/java/de/landsh/opendata/ckan/DcatUploader.java
+++ b/src/main/java/de/landsh/opendata/ckan/DcatUploader.java
@@ -2,6 +2,7 @@ package de.landsh.opendata.ckan;
 
 import de.landsh.opendata.DCATAPde;
 import de.landsh.opendata.Locn;
+import de.landsh.opendata.SPDX;
 import de.landsh.opendata.SchemaOrg;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
@@ -216,6 +217,11 @@ public class DcatUploader {
             if (distribution.hasProperty(DCATAPde.licenseAttributionByText)) {
                 jsonResource.put("licenseAttributionByText", getString(distribution, DCATAPde.licenseAttributionByText));
             }
+            if( distribution.hasProperty(SPDX.checksum)) {
+                final Resource checksum = distribution.getPropertyResourceValue(SPDX.checksum);
+                jsonResource.put("hash", getString(checksum, SPDX.checksumValue));
+                jsonResource.put("hash_algorithm", getString(checksum, SPDX.algorithm));
+            }
 
             ckanAPI.createResource(jsonResource);
         }
diff --git a/src/main/resources/dataset-with-geometry.xml b/src/main/resources/dataset-with-geometry.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f68f82432e88fbe557ebb861365b1613900231a8
--- /dev/null
+++ b/src/main/resources/dataset-with-geometry.xml
@@ -0,0 +1,52 @@
+<rdf:RDF
+    xmlns:dct="http://purl.org/dc/terms/"
+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+    xmlns:j.0="http://www.w3.org/ns/locn#"
+    xmlns:schema="http://schema.org/"
+    xmlns:dcat="http://www.w3.org/ns/dcat#"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
+    xmlns:dcatde="http://dcat-ap.de/def/dcatde/">
+    <dcat:Dataset rdf:about="https://opendata.schleswig-holstein.de/dataset/demo">
+        <dcat:keyword>my dataset</dcat:keyword>
+        <dct:accrualPeriodicity rdf:resource="http://publications.europa.eu/resource/authority/frequency/DAILY"/>
+        <dcat:keyword>demo</dcat:keyword>
+        <dcat:distribution>
+            <dcat:Distribution rdf:about="https://opendata.schleswig-holstein.de/dataset/demo/resource">
+                <dcat:downloadURL rdf:resource="http://example.org/data.csv"/>
+                <dcat:accessURL rdf:resource="http://example.org/data.csv"/>
+                <dct:format rdf:resource="http://publications.europa.eu/resource/authority/file-type/CSV"/>
+                <dcat:byteSize rdf:datatype="http://www.w3.org/2001/XMLSchema#decimal"
+                >500</dcat:byteSize>
+                <dct:title>data.csv</dct:title>
+                <dcatde:licenseAttributionByText>ZIT-SH</dcatde:licenseAttributionByText>
+                <dct:license rdf:resource="http://dcat-ap.de/def/licenses/cc-by/4.0"/>
+            </dcat:Distribution>
+        </dcat:distribution>
+        <dct:spatial>
+            <dct:Location>
+                <j.0:geometry rdf:datatype="http://www.opengis.net/ont/geosparql#wktLiteral"
+                >POLYGON(( 10.753384 54.033113 , 10.754036 54.033269 , 10.750559 54.039196 , 10.75143 54.039301 , 10.753384 54.033113 ))</j.0:geometry>
+                <j.0:geometry rdf:datatype="https://www.iana.org/assignments/media-types/application/vnd.geo+json"
+                >{"type":"Polygon","coordinates":[[[10.753384,54.033113],[10.754036,54.033269],[10.750559,54.039196],[10.75143,54.039301],[10.753384,54.033113]]]}</j.0:geometry>
+            </dct:Location>
+        </dct:spatial>
+        <dct:temporal>
+            <dct:PeriodOfTime>
+                <schema:endDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date"
+                >2020-10-12</schema:endDate>
+                <schema:startDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date"
+                >2020-10-11</schema:startDate>
+            </dct:PeriodOfTime>
+        </dct:temporal>
+        <dct:license rdf:resource="http://dcat-ap.de/def/licenses/cc-by/4.0"/>
+        <dct:description>This is a description of my dataset.</dct:description>
+        <dct:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date"
+        >2020-10-13</dct:modified>
+        <dct:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date"
+        >2020-10-13</dct:issued>
+        <dcat:theme rdf:resource="http://publications.europa.eu/resource/authority/data-theme/TRAN"/>
+        <dct:title>My first dataset</dct:title>
+        <dcatde:licenseAttributionByText>ZIT-SH</dcatde:licenseAttributionByText>
+        <dct:publisher rdf:resource="https://opendata.schleswig-holstein.de/organization/2a6d6241-fdfd-4d9a-9106-8c658be43a27"/>
+    </dcat:Dataset>
+</rdf:RDF>
\ No newline at end of file
diff --git a/src/main/resources/dataset.xml b/src/main/resources/dataset.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0867f6958615c174632fb56e7981d781d14ee750
--- /dev/null
+++ b/src/main/resources/dataset.xml
@@ -0,0 +1,48 @@
+<rdf:RDF
+    xmlns:dct="http://purl.org/dc/terms/"
+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+    xmlns:schema="http://schema.org/"
+    xmlns:dcat="http://www.w3.org/ns/dcat#" xmlns:spdx="http://spdx.org/rdf/terms#"
+    xmlns:dcatde="http://dcat-ap.de/def/dcatde/">
+    <dcat:Dataset rdf:about="https://opendata.schleswig-holstein.de/dataset/demo">
+        <dcat:keyword>my dataset</dcat:keyword>
+        <dct:accrualPeriodicity rdf:resource="http://publications.europa.eu/resource/authority/frequency/DAILY"/>
+        <dcat:keyword>demo</dcat:keyword>
+        <dcatde:politicalGeocodingURI>
+            <dct:Location rdf:about="http://dcat-ap.de/def/politicalGeocoding/regionalKey/010550044044"/>
+        </dcatde:politicalGeocodingURI>
+        <dcat:distribution>
+            <dcat:Distribution rdf:about="https://opendata.schleswig-holstein.de/dataset/demo/resource">
+                <dcat:downloadURL rdf:resource="http://example.org/data.csv"/>
+                <dcat:accessURL rdf:resource="http://example.org/data.csv"/>
+                <dct:format rdf:resource="http://publications.europa.eu/resource/authority/file-type/CSV"/>
+                <dcat:byteSize rdf:datatype="http://www.w3.org/2001/XMLSchema#decimal">500</dcat:byteSize>
+                <dct:title>data.csv</dct:title>
+                <dcatde:licenseAttributionByText>ZIT-SH</dcatde:licenseAttributionByText>
+                <dct:license rdf:resource="http://dcat-ap.de/def/licenses/cc-by/4.0"/>
+                <spdx:checksum>
+                    <spdx:Checksum>
+                        <spdx:checksumValue rdf:datatype="http://www.w3.org/2001/XMLSchema#hexBinary">17f9aec62e8398c358b3d3a2deaef2a5</spdx:checksumValue>
+                        <spdx:algorithm rdf:resource="http://dcat-ap.de/def/hashAlgorithms/md/5"/>
+                    </spdx:Checksum>
+                </spdx:checksum>
+            </dcat:Distribution>
+        </dcat:distribution>
+        <dct:temporal>
+            <dct:PeriodOfTime>
+                <schema:endDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2020-10-12</schema:endDate>
+                <schema:startDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2020-10-11</schema:startDate>
+            </dct:PeriodOfTime>
+        </dct:temporal>
+        <dct:license rdf:resource="http://dcat-ap.de/def/licenses/cc-by/4.0"/>
+        <dcatde:politicalGeocodingLevelURI rdf:resource="http://dcat-ap.de/def/politicalGeocoding/Level/municipality"/>
+        <dct:description>This is a description of my dataset.</dct:description>
+        <dct:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2020-10-13</dct:modified>
+        <dct:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2020-10-13</dct:issued>
+        <dct:spatial rdf:resource="http://dcat-ap.de/def/politicalGeocoding/regionalKey/010550044044"/>
+        <dcat:theme rdf:resource="http://publications.europa.eu/resource/authority/data-theme/TRAN"/>
+        <dct:title>My first dataset</dct:title>
+        <dcatde:licenseAttributionByText>ZIT-SH</dcatde:licenseAttributionByText>
+        <dct:publisher rdf:resource="https://opendata.schleswig-holstein.de/organization/2a6d6241-fdfd-4d9a-9106-8c658be43a27"/>
+    </dcat:Dataset>
+</rdf:RDF>
\ No newline at end of file
diff --git a/src/test/java/de/landsh/opendata/ckan/DcatUploaderTest.java b/src/test/java/de/landsh/opendata/ckan/DcatUploaderTest.java
index aef3620c1844c0232bc69b640b1b1678c3ceea8d..3c7efb2657a65d16d5c5cc64c539f8efa7ce3588 100644
--- a/src/test/java/de/landsh/opendata/ckan/DcatUploaderTest.java
+++ b/src/test/java/de/landsh/opendata/ckan/DcatUploaderTest.java
@@ -1,7 +1,5 @@
 package de.landsh.opendata.ckan;
 
-import de.landsh.opendata.DCATAPde;
-import org.apache.jena.datatypes.xsd.XSDDatatype;
 import org.apache.jena.rdf.model.Resource;
 import org.apache.jena.rdf.model.*;
 import org.apache.jena.vocabulary.DCAT;
@@ -16,8 +14,6 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 
 import java.io.IOException;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
 import java.util.UUID;
 
 import static org.junit.Assert.assertEquals;
@@ -26,7 +22,6 @@ import static org.junit.Assert.assertNotNull;
 public class DcatUploaderTest {
 
     private static final String geometryInJSON = "{\"type\":\"Polygon\",\"coordinates\":[[[10.753384,54.033113],[10.754036,54.033269],[10.750559,54.039196],[10.75143,54.039301],[10.753384,54.033113]]]}";
-    private static final Property geometry = ResourceFactory.createProperty("http://www.w3.org/ns/locn#", "geometry");
     private final CkanAPI ckanAPI = Mockito.mock(CkanAPI.class);
     private DcatUploader dcatUploader;
 
@@ -46,115 +41,16 @@ public class DcatUploaderTest {
         dcatUploader = new DcatUploader(ckanAPI);
     }
 
-    private org.apache.jena.rdf.model.Resource generateDataset() {
-        Model model = ModelFactory.createDefaultModel();
-
-        LocalDate date = LocalDate.of(2020, 10, 13);
-
-        final Resource dataset = model.createResource("https://opendata.schleswig-holstein.de/dataset/demo");
-        dataset.addProperty(RDF.type, DCAT.Dataset);
-
-        final org.apache.jena.rdf.model.Resource temporal = model.createResource();
-        temporal.addProperty(RDF.type, DCTerms.PeriodOfTime);
-        temporal.addLiteral(model.createProperty("http://schema.org/", "startDate"),
-                model.createTypedLiteral(date.minusDays(2).format(DateTimeFormatter.ISO_DATE), XSDDatatype.XSDdate));
-        temporal.addLiteral(model.createProperty("http://schema.org/", "endDate"),
-                model.createTypedLiteral(date.minusDays(1).format(DateTimeFormatter.ISO_DATE), XSDDatatype.XSDdate));
-        dataset.addProperty(DCTerms.temporal, temporal);
-
-        dataset.addLiteral(DCTerms.title, "My first dataset");
-        dataset.addLiteral(DCTerms.issued, model.createTypedLiteral(date.format(DateTimeFormatter.ISO_DATE), XSDDatatype.XSDdate));
-        dataset.addLiteral(DCTerms.modified, model.createTypedLiteral(date.format(DateTimeFormatter.ISO_DATE), XSDDatatype.XSDdate));
-        dataset.addProperty(DCTerms.license, ResourceFactory.createResource("http://dcat-ap.de/def/licenses/cc-by/4.0"));
-        dataset.addProperty(DCATAPde.licenseAttributionByText, "ZIT-SH");
-        dataset.addProperty(DCAT.theme, ResourceFactory.createResource("http://publications.europa.eu/resource/authority/data-theme/TRAN"));
-
-        dataset.addProperty(DCTerms.accrualPeriodicity, ResourceFactory.createResource("http://publications.europa.eu/resource/authority/frequency/DAILY"));
-
-        final Resource loc = model.createResource("http://dcat-ap.de/def/politicalGeocoding/regionalKey/010550044044");
-        loc.addProperty(RDF.type, DCTerms.Location);
-        dataset.addProperty(DCTerms.spatial, loc);
-
-        dataset.addProperty(DCATAPde.politicalGeocodingURI, ResourceFactory.createResource("http://dcat-ap.de/def/politicalGeocoding/regionalKey/010550044044"));
-        dataset.addProperty(DCATAPde.politicalGeocodingLevelURI, ResourceFactory.createResource("http://dcat-ap.de/def/politicalGeocoding/Level/municipality"));
-        dataset.addLiteral(DCTerms.description, "This is a description of my dataset.");
-        dataset.addProperty(DCAT.keyword, "demo");
-        dataset.addProperty(DCAT.keyword, "my dataset");
-        dataset.addProperty(DCTerms.publisher, ResourceFactory.createResource("https://opendata.schleswig-holstein.de/organization/2a6d6241-fdfd-4d9a-9106-8c658be43a27"));
-
-        final Resource distribution = model.createResource("https://opendata.schleswig-holstein.de/dataset/demo/resource");
-        distribution.addProperty(RDF.type, DCAT.Distribution);
-        distribution.addProperty(DCTerms.license, ResourceFactory.createResource("http://dcat-ap.de/def/licenses/cc-by/4.0"));
-        distribution.addLiteral(DCATAPde.licenseAttributionByText, "ZIT-SH");
-        distribution.addLiteral(DCTerms.title, "data.csv");
-        distribution.addLiteral(DCAT.byteSize, model.createTypedLiteral(500, XSDDatatype.XSDdecimal));
-        distribution.addProperty(DCTerms.format, ResourceFactory.createResource("http://publications.europa.eu/resource/authority/file-type/CSV"));
-        final Resource url = model.createResource("http://example.org/data.csv");
-        distribution.addProperty(DCAT.accessURL, url);
-        distribution.addProperty(DCAT.downloadURL, url);
-        dataset.addProperty(DCAT.distribution, distribution);
-
-        return dataset;
-    }
-
-    private org.apache.jena.rdf.model.Resource generateDatasetWithGeometry() {
+    /**
+     * Liest eine RDF-Resource aus einer Datei im resources/ Verzeichnis ein.
+     */
+    private org.apache.jena.rdf.model.Resource loadDataset(String resourceName) {
         final Model model = ModelFactory.createDefaultModel();
-
-        final LocalDate date = LocalDate.of(2020, 10, 13);
-
-        final Resource dataset = model.createResource("https://opendata.schleswig-holstein.de/dataset/demo");
-        dataset.addProperty(RDF.type, DCAT.Dataset);
-
-        final org.apache.jena.rdf.model.Resource temporal = model.createResource();
-        temporal.addProperty(RDF.type, DCTerms.PeriodOfTime);
-        temporal.addLiteral(model.createProperty("http://schema.org/", "startDate"),
-                model.createTypedLiteral(date.minusDays(2).format(DateTimeFormatter.ISO_DATE), XSDDatatype.XSDdate));
-        temporal.addLiteral(model.createProperty("http://schema.org/", "endDate"),
-                model.createTypedLiteral(date.minusDays(1).format(DateTimeFormatter.ISO_DATE), XSDDatatype.XSDdate));
-        dataset.addProperty(DCTerms.temporal, temporal);
-
-        dataset.addLiteral(DCTerms.title, "My first dataset");
-        dataset.addLiteral(DCTerms.issued, model.createTypedLiteral(date.format(DateTimeFormatter.ISO_DATE), XSDDatatype.XSDdate));
-        dataset.addLiteral(DCTerms.modified, model.createTypedLiteral(date.format(DateTimeFormatter.ISO_DATE), XSDDatatype.XSDdate));
-        dataset.addProperty(DCTerms.license, ResourceFactory.createResource("http://dcat-ap.de/def/licenses/cc-by/4.0"));
-        dataset.addProperty(DCATAPde.licenseAttributionByText, "ZIT-SH");
-        dataset.addProperty(DCAT.theme, ResourceFactory.createResource("http://publications.europa.eu/resource/authority/data-theme/TRAN"));
-
-        dataset.addProperty(DCTerms.accrualPeriodicity, ResourceFactory.createResource("http://publications.europa.eu/resource/authority/frequency/DAILY"));
-
-        final Resource loc = model.createResource();
-        loc.addProperty(RDF.type, DCTerms.Location);
-
-        loc.addLiteral(geometry, model.createTypedLiteral(
-                geometryInJSON,
-                "https://www.iana.org/assignments/media-types/application/vnd.geo+json"
-        ));
-        loc.addLiteral(geometry, model.createTypedLiteral(
-                "POLYGON(( 10.753384 54.033113 , 10.754036 54.033269 , 10.750559 54.039196 , 10.75143 54.039301 , 10.753384 54.033113 ))",
-                "http://www.opengis.net/ont/geosparql#wktLiteral"
-        ));
-
-        dataset.addProperty(DCTerms.spatial, loc);
-        dataset.addLiteral(DCTerms.description, "This is a description of my dataset.");
-        dataset.addProperty(DCAT.keyword, "demo");
-        dataset.addProperty(DCAT.keyword, "my dataset");
-        dataset.addProperty(DCTerms.publisher, ResourceFactory.createResource("https://opendata.schleswig-holstein.de/organization/2a6d6241-fdfd-4d9a-9106-8c658be43a27"));
-
-        final Resource distribution = model.createResource("https://opendata.schleswig-holstein.de/dataset/demo/resource");
-        distribution.addProperty(RDF.type, DCAT.Distribution);
-        distribution.addProperty(DCTerms.license, ResourceFactory.createResource("http://dcat-ap.de/def/licenses/cc-by/4.0"));
-        distribution.addLiteral(DCATAPde.licenseAttributionByText, "ZIT-SH");
-        distribution.addLiteral(DCTerms.title, "data.csv");
-        distribution.addLiteral(DCAT.byteSize, model.createTypedLiteral(500, XSDDatatype.XSDdecimal));
-        distribution.addProperty(DCTerms.format, ResourceFactory.createResource("http://publications.europa.eu/resource/authority/file-type/CSV"));
-        final Resource url = model.createResource("http://example.org/data.csv");
-        distribution.addProperty(DCAT.accessURL, url);
-        distribution.addProperty(DCAT.downloadURL, url);
-        dataset.addProperty(DCAT.distribution, distribution);
-
-        return dataset;
+        model.read(getClass().getResourceAsStream(resourceName), "https://opendata.schleswig-holstein.de/");
+        return model.listSubjectsWithProperty(RDF.type, DCAT.Dataset).nextResource();
     }
 
+
     @Test
     public void testUpload() throws IOException {
         final ArgumentCaptor<JSONObject> argumentPackage = ArgumentCaptor.forClass(JSONObject.class);
@@ -164,7 +60,7 @@ public class DcatUploaderTest {
         Mockito.when(ckanAPI.createResource(argumentResource.capture())).thenReturn("resource");
 
         // invoke method
-        final String packageId = dcatUploader.upload(generateDataset());
+        final String packageId = dcatUploader.upload(loadDataset("/dataset.xml"));
 
         final JSONObject jsonPackage = argumentPackage.getValue();
         final JSONObject jsonResource = argumentResource.getValue();
@@ -199,6 +95,9 @@ public class DcatUploaderTest {
         assertEquals("CSV", jsonResource.getString("format"));
         assertEquals("http://dcat-ap.de/def/licenses/cc-by/4.0", jsonResource.getString("license"));
         assertEquals("ZIT-SH", jsonResource.getString("licenseAttributionByText"));
+        assertEquals("17f9aec62e8398c358b3d3a2deaef2a5", jsonResource.getString("hash"));
+        assertEquals("http://dcat-ap.de/def/hashAlgorithms/md/5", jsonResource.getString("hash_algorithm"));
+
     }
 
     /**
@@ -206,7 +105,7 @@ public class DcatUploaderTest {
      */
     @Test
     public void testUpload_Collection() throws IOException {
-        final Resource dataset = generateDataset();
+        final Resource dataset = loadDataset("/dataset.xml");
         dataset.addProperty(DCTerms.isVersionOf, ResourceFactory.createResource("https://opendata.schleswig-holstein.de/dataset/mycollection"));
 
         final String expectedPackageId = UUID.randomUUID().toString();
@@ -228,7 +127,7 @@ public class DcatUploaderTest {
         Mockito.when(ckanAPI.createPackage(argumentPackage.capture())).thenReturn("demo");
 
         // invoke method
-        dcatUploader.upload(generateDatasetWithGeometry());
+        dcatUploader.upload(loadDataset("/dataset-with-geometry.xml"));
 
         final JSONObject jsonPackage = argumentPackage.getValue();
         assertNotNull(jsonPackage);