diff --git a/Changes b/Changes
index 776e8bc..1306371 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
 0.2.11 2024-1-10
     - Upgrade dependency on Jackson following dependabot.
     - Upgrade dependency on Maven following dependabot.
+    - Retrieves the version of the export plugin from pom.xml (closes #99)
 
 0.2.10 2023-11-30
     - Change default api port to 443.
diff --git a/pom.xml b/pom.xml
index ad3b2e4..4ca560e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -146,6 +146,12 @@
   </dependencies>
   
   <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>true</filtering>
+      </resource>
+    </resources>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
diff --git a/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java b/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
index ec1886a..9caace7 100644
--- a/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
+++ b/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
@@ -16,16 +16,35 @@
 public class ExWSConf {
 
     // Version of Export Plugin
-    public static final int VERSION_MAJOR = 0;
-    public static final int VERSION_MINOR = 2;
-    public static final int VERSION_PATCHLEVEL = 7;
+    private static String VERSION;
 
     private static Properties prop;
 
+    /*
+     * Returns version of the Export Plugin
+     */
+    public static String version(){
+        if (VERSION != null){
+            return VERSION;
+        }
+        else
+        {
+            Properties projProp = new Properties();
+            try{
+                projProp.load(ExWSConf.class.getClassLoader().getResourceAsStream("project.properties"));
+            }
+            catch(Exception e){
+                Logger.error("Unable to load project properties");
+                return null;
+            }
+            VERSION = projProp.getProperty("version");
+            return VERSION;
+    }
+    } 
     // Load properties from file
     public static Properties properties (String propFile) {
 
-        if (prop != null)
+         if (prop != null)
             return prop;
 
         if (propFile == null)
@@ -34,7 +53,7 @@
         InputStream iFile;
         try {
 
-            iFile = new FileInputStream(propFile);            
+            iFile = new FileInputStream(propFile);     
             prop = new Properties();
             prop.load(
                 new BufferedReader(
diff --git a/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java b/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
index 6a7f279..62828a4 100644
--- a/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
+++ b/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
@@ -2,6 +2,8 @@
 
 import java.util.Properties;
 
+import org.tinylog.Logger;
+
 import java.nio.charset.*;
 import java.nio.ByteBuffer;
 import java.nio.CharBuffer;
@@ -214,8 +216,7 @@
         if (this.getMeta() != null && this.getMeta().has("version")) {
             this.addInfoRow(w, "Backend-Version", this.getMeta().get("version").asText());
         };
-
-        this.addInfoRow(w, "Export-Version", this.getVersion().toString());
+        this.addInfoRow(w, "Export-Version", ExWSConf.version());
     };
 
 
@@ -247,22 +248,6 @@
     
 
     /*
-     * Get version of the plugin
-     * (maybe read from pom?) 
-     */
-    private Version getVersion () {
-        return new Version(
-            ExWSConf.VERSION_MAJOR,
-            ExWSConf.VERSION_MINOR,
-            ExWSConf.VERSION_PATCHLEVEL,
-            null,
-            null,
-            null
-            );
-    };
-
-
-    /*
      * Convert a string to RTF compliant encoding.
      *
      * Based on jrtf by Christian Ullenboom
diff --git a/src/main/resources/project.properties b/src/main/resources/project.properties
new file mode 100644
index 0000000..e5683df
--- /dev/null
+++ b/src/main/resources/project.properties
@@ -0,0 +1 @@
+version=${project.version}
\ No newline at end of file
