diff --git a/src/uloimport/pom.xml b/src/uloimport/pom.xml
index e8c00a983117fa60b71f5a09377fa0fdb45c155e..13ea6732496af72a39ad8df87d0256d207e13170 100644
--- a/src/uloimport/pom.xml
+++ b/src/uloimport/pom.xml
@@ -11,4 +11,27 @@
         <maven.compiler.source>1.11</maven.compiler.source>
         <maven.compiler.target>1.11</maven.compiler.target>
     </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-core</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>29.0-jre</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ontotext.graphdb</groupId>
+            <artifactId>graphdb-free-runtime</artifactId>
+            <version>9.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.30</version>
+        </dependency>
+    </dependencies>
 </project>
\ No newline at end of file
diff --git a/src/uloimport/src/main/java/info/kwarc/uloimport/importer/GraphDbImporter.java b/src/uloimport/src/main/java/info/kwarc/uloimport/importer/GraphDbImporter.java
new file mode 100644
index 0000000000000000000000000000000000000000..f97bd19b63828e29e476dcafba896da7b72d8f45
--- /dev/null
+++ b/src/uloimport/src/main/java/info/kwarc/uloimport/importer/GraphDbImporter.java
@@ -0,0 +1,54 @@
+package info.kwarc.uloimport.importer;
+
+import org.eclipse.rdf4j.repository.Repository;
+import org.eclipse.rdf4j.repository.RepositoryConnection;
+import org.eclipse.rdf4j.repository.manager.RemoteRepositoryManager;
+import org.eclipse.rdf4j.repository.manager.RepositoryManager;
+
+import java.io.InputStream;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * {@link Importer} that uploads imported data to a GraphDB instance.
+ */
+public class GraphDbImporter implements Importer {
+    private final String serverUrl;
+    private final String repository;
+
+    /**
+     * Construct a new GraphDbImporter that imports its data to a remote
+     * GraphDB instance.
+     *
+     * @param serverUrl The URL under which GraphDB is running.
+     * @param repository The name of the repository to dump to.
+     */
+    public GraphDbImporter(String serverUrl, String repository) {
+        this.serverUrl = checkNotNull(serverUrl);
+        this.repository = checkNotNull(repository);
+    }
+
+    @Override
+    public void importRdfFile(InputStream is) throws ImportException {
+        final RepositoryManager manager;
+        final Repository repository;
+        final RepositoryConnection connection;
+
+        try {
+            manager = new RemoteRepositoryManager(this.serverUrl);
+            manager.init();
+
+            repository = manager.getRepository(this.repository);
+            if (repository ==  null) {
+                throw new ImportException("could not connect to repository=%s", this.repository);
+            }
+
+            connection = repository.getConnection();
+        } catch (Exception e) {
+            throw new ImportException("could not initialize database connection", e);
+        }
+
+        // TODO: Handle errors during initialization. This is quite annoying
+        // to do with this API.
+    }
+}
diff --git a/src/uloimport/src/main/java/info/kwarc/uloimport/ImportException.java b/src/uloimport/src/main/java/info/kwarc/uloimport/importer/ImportException.java
similarity index 67%
rename from src/uloimport/src/main/java/info/kwarc/uloimport/ImportException.java
rename to src/uloimport/src/main/java/info/kwarc/uloimport/importer/ImportException.java
index 94ae3588e6adfccb7afe7fc43c5a3c60442c3eba..dfd16b773bbeaf6a4a65e2065250c48ff59b69cf 100644
--- a/src/uloimport/src/main/java/info/kwarc/uloimport/ImportException.java
+++ b/src/uloimport/src/main/java/info/kwarc/uloimport/importer/ImportException.java
@@ -1,4 +1,4 @@
-package info.kwarc.uloimport;
+package info.kwarc.uloimport.importer;
 
 /**
  * An Exception caused by an import of ULO/RDF data.
@@ -13,6 +13,16 @@ public class ImportException extends RuntimeException {
         super(message);
     }
 
+    /**
+     * Construct a new {@link ImportException} with a formatted message.
+     *
+     * @param format Format string of the message.
+     * @param args Arguments for the format string.
+     */
+    public ImportException(String format, Object... args) {
+        super(String.format(format, args));
+    }
+
     /**
      * Construct a new {@link ImportException} with a message and a cause
      * that caused this exception.
diff --git a/src/uloimport/src/main/java/info/kwarc/uloimport/Importer.java b/src/uloimport/src/main/java/info/kwarc/uloimport/importer/Importer.java
similarity index 76%
rename from src/uloimport/src/main/java/info/kwarc/uloimport/Importer.java
rename to src/uloimport/src/main/java/info/kwarc/uloimport/importer/Importer.java
index 542a11ceb84aab118b35b199319b65a2a6d8eb0d..2727ac8056c5424af6eb8fe0df3dafbafc3e29e8 100644
--- a/src/uloimport/src/main/java/info/kwarc/uloimport/Importer.java
+++ b/src/uloimport/src/main/java/info/kwarc/uloimport/importer/Importer.java
@@ -1,4 +1,4 @@
-package info.kwarc.uloimport;
+package info.kwarc.uloimport.importer;
 
 import java.io.InputStream;
 
@@ -10,5 +10,5 @@ public interface Importer {
      * @param is The stream from which to read a single ULO/RDF file.
      * @throws ImportException When the import failed.
      */
-    void importUlo(InputStream is) throws ImportException;
+    void importRdfFile(InputStream is) throws ImportException;
 }