diff --git a/gradle.properties b/gradle.properties
index 484a237..00484a0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,3 +1,3 @@
 group = org.xbib.graphics
 name = graphics
-version = 5.6.1
+version = 5.7.0
diff --git a/graphics-barcode/src/main/java/module-info.java b/graphics-barcode/src/main/java/module-info.java
index ec1dc7f..5e67984 100644
--- a/graphics-barcode/src/main/java/module-info.java
+++ b/graphics-barcode/src/main/java/module-info.java
@@ -46,8 +46,8 @@ module org.xbib.graphics.barcode {
     exports org.xbib.graphics.barcode;
     exports org.xbib.graphics.barcode.util;
     exports org.xbib.graphics.barcode.render;
-    requires transitive java.desktop;
-    requires transitive org.xbib.graphics.zxing;
+    requires java.desktop;
+    requires org.xbib.graphics.zxing;
     provides SymbolProvider with
             AustraliaPost.Provider,
             AztecCode.Provider,
diff --git a/graphics-chart/src/main/java/module-info.java b/graphics-chart/src/main/java/module-info.java
index 3e1e1dc..2cb8d2c 100644
--- a/graphics-chart/src/main/java/module-info.java
+++ b/graphics-chart/src/main/java/module-info.java
@@ -17,5 +17,5 @@ module org.xbib.graphics.chart {
     requires org.xbib.graphics.io.vector.eps;
     requires org.xbib.graphics.io.vector.pdf;
     requires org.xbib.graphics.io.vector.svg;
-    requires transitive java.desktop;
+    requires java.desktop;
 }
diff --git a/graphics-fonts-arabic/src/main/java/module-info.java b/graphics-fonts-arabic/src/main/java/module-info.java
index 4b6ad3e..01771bc 100644
--- a/graphics-fonts-arabic/src/main/java/module-info.java
+++ b/graphics-fonts-arabic/src/main/java/module-info.java
@@ -3,6 +3,7 @@ import org.xbib.graphics.fonts.arabic.ArabicFontEmbedder;
 
 module org.xbib.graphics.fonts.arabic {
     requires org.xbib.graphics.fonts;
+    requires org.apache.pdfbox;
     exports org.xbib.graphics.fonts.arabic;
     provides FontEmbedder with ArabicFontEmbedder;
 }
diff --git a/graphics-fonts-cjk/src/main/java/module-info.java b/graphics-fonts-cjk/src/main/java/module-info.java
index 967b704..e053471 100644
--- a/graphics-fonts-cjk/src/main/java/module-info.java
+++ b/graphics-fonts-cjk/src/main/java/module-info.java
@@ -3,6 +3,7 @@ import org.xbib.graphics.fonts.cjk.CJKFontEmbedder;
 
 module org.xbib.graphics.fonts.cjk {
     requires org.xbib.graphics.fonts;
+    requires org.apache.pdfbox;
     exports org.xbib.graphics.fonts.cjk;
     provides FontEmbedder with CJKFontEmbedder;
 }
diff --git a/graphics-fonts-cyrillic/src/main/java/module-info.java b/graphics-fonts-cyrillic/src/main/java/module-info.java
index 0d69a72..89466a4 100644
--- a/graphics-fonts-cyrillic/src/main/java/module-info.java
+++ b/graphics-fonts-cyrillic/src/main/java/module-info.java
@@ -3,5 +3,6 @@ import org.xbib.graphics.fonts.cyrillic.CyrillicFontEmbedder;
 
 module org.xbib.graphics.fonts.cyrillic {
     requires org.xbib.graphics.fonts;
+    requires org.apache.pdfbox;
     provides FontEmbedder with CyrillicFontEmbedder;
 }
diff --git a/graphics-fonts-hebrew/src/main/java/module-info.java b/graphics-fonts-hebrew/src/main/java/module-info.java
index 2597614..768ee39 100644
--- a/graphics-fonts-hebrew/src/main/java/module-info.java
+++ b/graphics-fonts-hebrew/src/main/java/module-info.java
@@ -3,5 +3,6 @@ import org.xbib.graphics.fonts.hebrew.HebrewFontEmbedder;
 
 module org.xbib.graphics.fonts.hebrew {
     requires org.xbib.graphics.fonts;
+    requires org.apache.pdfbox;
     provides FontEmbedder with HebrewFontEmbedder;
 }
diff --git a/graphics-fonts-latin/src/main/java/module-info.java b/graphics-fonts-latin/src/main/java/module-info.java
index 5b62c25..6c72337 100644
--- a/graphics-fonts-latin/src/main/java/module-info.java
+++ b/graphics-fonts-latin/src/main/java/module-info.java
@@ -5,6 +5,7 @@ import org.xbib.graphics.fonts.latin.SourceSansFontEmbedder;
 
 module org.xbib.graphics.fonts.latin {
     requires org.xbib.graphics.fonts;
+    requires org.apache.pdfbox;
     provides FontEmbedder with NotoSansFontEmbedder,
             OpenSansFontEmbedder,
             SourceSansFontEmbedder;
diff --git a/graphics-fonts/src/main/java/module-info.java b/graphics-fonts/src/main/java/module-info.java
index 26e1696..3570881 100644
--- a/graphics-fonts/src/main/java/module-info.java
+++ b/graphics-fonts/src/main/java/module-info.java
@@ -1,8 +1,8 @@
 module org.xbib.graphics.fonts {
     requires java.logging;
-    requires transitive java.desktop;
-    requires transitive org.apache.fontbox;
-    requires transitive org.apache.pdfbox;
+    requires java.desktop;
+    requires org.apache.fontbox;
+    requires org.apache.pdfbox;
     requires org.apache.pdfbox.io;
     exports org.xbib.graphics.fonts;
 }
diff --git a/graphics-ghostscript/src/main/java/module-info.java b/graphics-ghostscript/src/main/java/module-info.java
index ef73c3e..3c65cf7 100644
--- a/graphics-ghostscript/src/main/java/module-info.java
+++ b/graphics-ghostscript/src/main/java/module-info.java
@@ -2,7 +2,7 @@ module org.xbib.graphics.ghostscript {
     exports org.xbib.graphics.ghostscript;
     requires com.sun.jna;
     requires java.logging;
-    requires transitive java.desktop;
-    requires transitive org.apache.pdfbox;
-    requires transitive org.apache.pdfbox.io;
+    requires java.desktop;
+    requires org.apache.pdfbox;
+    requires org.apache.pdfbox.io;
 }
diff --git a/graphics-pdfbox-layout/build.gradle b/graphics-pdfbox-layout/build.gradle
index cdf148e..9767372 100644
--- a/graphics-pdfbox-layout/build.gradle
+++ b/graphics-pdfbox-layout/build.gradle
@@ -3,9 +3,8 @@ dependencies {
     api project(':graphics-barcode')
     api project(':graphics-chart')
     api project(':graphics-fonts')
-    api libs.datastructures.settings
-    runtimeOnly libs.datastructures.settings.json
-    runtimeOnly libs.datastructures.settings.yaml
+    api libs.settings.api
+    testImplementation testLibs.settings.json
     testRuntimeOnly project(':graphics-fonts-arabic')
     testRuntimeOnly project(':graphics-fonts-latin')
     testRuntimeOnly project(':graphics-fonts-hebrew')
diff --git a/graphics-pdfbox-layout/src/main/java/module-info.java b/graphics-pdfbox-layout/src/main/java/module-info.java
index 473c840..129ffdf 100644
--- a/graphics-pdfbox-layout/src/main/java/module-info.java
+++ b/graphics-pdfbox-layout/src/main/java/module-info.java
@@ -13,10 +13,12 @@ module org.xbib.graphics.layout.pdfbox {
     exports org.xbib.graphics.pdfbox.layout.text.annotations;
     exports org.xbib.graphics.pdfbox.layout.util;
     exports org.xbib.graphics.pdfbox.layout.position;
-    requires transitive org.xbib.graphics.barcode;
-    requires transitive org.xbib.graphics.pdfbox;
-    requires transitive org.xbib.settings.api;
-    requires org.xbib.settings.datastructures;
+    requires org.xbib.graphics.barcode;
+    requires org.xbib.graphics.pdfbox;
+    requires org.xbib.settings.api;
     requires org.xbib.graphics.chart;
     requires org.xbib.graphics.fonts;
+    requires org.apache.pdfbox;
+    requires java.desktop;
+    requires java.logging;
 }
diff --git a/graphics-pdfbox-layout/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader b/graphics-pdfbox-layout/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader
deleted file mode 100644
index d3ebb87..0000000
--- a/graphics-pdfbox-layout/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader
+++ /dev/null
@@ -1 +0,0 @@
-org.xbib.settings.datastructures.PropertiesSettingsLoader
diff --git a/graphics-pdfbox-layout/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader b/graphics-pdfbox-layout/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader
index 5cbf3d5..a46de0f 100644
--- a/graphics-pdfbox-layout/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader
+++ b/graphics-pdfbox-layout/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader
@@ -1,2 +1 @@
-org.xbib.settings.datastructures.PropertiesSettingsLoader
 org.xbib.settings.datastructures.json.JsonSettingsLoader
\ No newline at end of file
diff --git a/graphics-pdfbox-print/src/main/java/module-info.java b/graphics-pdfbox-print/src/main/java/module-info.java
index 4c9a1db..54d34d5 100644
--- a/graphics-pdfbox-print/src/main/java/module-info.java
+++ b/graphics-pdfbox-print/src/main/java/module-info.java
@@ -1,6 +1,6 @@
 module org.xbib.graphics.pdfbox.print {
     exports org.xbib.graphics.pdfbox.print;
     requires java.logging;
-    requires transitive java.desktop;
+    requires java.desktop;
     requires org.apache.pdfbox;
 }
diff --git a/graphics-pdfbox/src/main/java/module-info.java b/graphics-pdfbox/src/main/java/module-info.java
index 7a61e17..a7bc614 100644
--- a/graphics-pdfbox/src/main/java/module-info.java
+++ b/graphics-pdfbox/src/main/java/module-info.java
@@ -7,8 +7,8 @@ module org.xbib.graphics.pdfbox {
     exports org.xbib.graphics.pdfbox.paint;
     requires org.xbib.graphics.fonts;
     requires org.xbib.graphics.zxing;
-    requires transitive org.apache.pdfbox;
-    requires transitive org.apache.pdfbox.io;
-    requires transitive java.desktop;
+    requires org.apache.pdfbox;
+    requires org.apache.pdfbox.io;
+    requires java.desktop;
     requires java.logging;
 }
diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontTest.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontTest.java
index a4e8d44..4c12e62 100644
--- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontTest.java
+++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontTest.java
@@ -11,7 +11,7 @@ import java.io.InputStream;
 public class FontTest extends PdfBoxGraphics2DTestBase {
 
     @Test
-    public void testAntonioFont() throws IOException, FontFormatException {
+    public void testAntonioFont() throws Exception {
         InputStream inputStream = PdfBoxGraphics2dTest.class.getResourceAsStream("antonio/Antonio-Regular.ttf");
         if (inputStream != null) {
             final Font antonioRegular = Font.createFont(Font.TRUETYPE_FONT, inputStream).deriveFont(15f);
diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontWidthDiscrepancyTest.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontWidthDiscrepancyTest.java
index 26ce2bc..1b24280 100644
--- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontWidthDiscrepancyTest.java
+++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/FontWidthDiscrepancyTest.java
@@ -19,7 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 public class FontWidthDiscrepancyTest extends PdfBoxGraphics2DTestBase {
 
     @Test
-    public void testAntonioFontWidth() throws IOException, FontFormatException {
+    public void testAntonioFontWidth() throws Exception {
         final String testString = "MMMMMMMMMMMMMMMMMMMMMM";
         final float fontSize = 20f;
         InputStream inputStream = PdfBoxGraphics2dTest.class.getResourceAsStream("antonio/Antonio-Regular.ttf");
diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2DTestBase.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2DTestBase.java
index ae17e4e..63cfe5f 100644
--- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2DTestBase.java
+++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2DTestBase.java
@@ -13,6 +13,7 @@ import org.xbib.graphics.pdfbox.PdfBoxGraphics2D;
 import org.xbib.graphics.fonts.CoreFontDrawer;
 import org.xbib.graphics.fonts.DefaultFontDrawer;
 import org.xbib.graphics.fonts.ForcedFontDrawer;
+import org.xbib.graphics.svg.SVGException;
 
 import java.awt.FontFormatException;
 import java.awt.Graphics2D;
@@ -29,70 +30,66 @@ class PdfBoxGraphics2DTestBase {
         DefaultVectorized, FontTextIfPossible, ForceFontText, DefaultFontText
     }
 
-    void exportGraphic(String dir, String name, GraphicsExporter exporter) {
-        try {
-            PDDocument document = new PDDocument();
-            PDFont helvetica = new PDType1Font(HELVETICA);
-            File parentDir = new File("build/test/" + dir);
-            parentDir.mkdirs();
-            BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_4BYTE_ABGR);
-            Graphics2D imageGraphics = image.createGraphics();
-            exporter.draw(imageGraphics);
-            imageGraphics.dispose();
-            ImageIO.write(image, "PNG", new File(parentDir, name + ".png"));
-            for (Mode m : Mode.values()) {
-                PDPage page = new PDPage(PDRectangle.A4);
-                document.addPage(page);
-                PDPageContentStream contentStream = new PDPageContentStream(document, page);
-                PdfBoxGraphics2D pdfBoxGraphics2D = new PdfBoxGraphics2D(document, 400, 400);
-                contentStream.beginText();
-                contentStream.setStrokingColor(0f, 0f, 0f);
-                contentStream.setNonStrokingColor(0f, 0f, 0f);
-                contentStream.setFont(new PDType1Font(HELVETICA_BOLD), 15);
-                contentStream.setTextMatrix(Matrix.getTranslateInstance(10, 800));
-                contentStream.showText("Mode " + m);
-                contentStream.endText();
-                DefaultFontDrawer fontTextDrawer = null;
-                switch (m) {
-                    case FontTextIfPossible:
-                        fontTextDrawer = new DefaultFontDrawer();
-                        registerFonts(fontTextDrawer);
-                        break;
-                    case DefaultFontText: {
-                        fontTextDrawer = new CoreFontDrawer();
-                        registerFonts(fontTextDrawer);
-                        break;
-                    }
-                    case ForceFontText:
-                        fontTextDrawer = new ForcedFontDrawer();
-                        registerFonts(fontTextDrawer);
-                        fontTextDrawer.registerFont("Arial", helvetica);
-                        break;
-                    case DefaultVectorized:
-                    default:
-                        break;
+    void exportGraphic(String dir, String name, GraphicsExporter exporter) throws Exception {
+        PDDocument document = new PDDocument();
+        PDFont helvetica = new PDType1Font(HELVETICA);
+        File parentDir = new File("build/test/" + dir);
+        parentDir.mkdirs();
+        BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_4BYTE_ABGR);
+        Graphics2D imageGraphics = image.createGraphics();
+        exporter.draw(imageGraphics);
+        imageGraphics.dispose();
+        ImageIO.write(image, "PNG", new File(parentDir, name + ".png"));
+        for (Mode m : Mode.values()) {
+            PDPage page = new PDPage(PDRectangle.A4);
+            document.addPage(page);
+            PDPageContentStream contentStream = new PDPageContentStream(document, page);
+            PdfBoxGraphics2D pdfBoxGraphics2D = new PdfBoxGraphics2D(document, 400, 400);
+            contentStream.beginText();
+            contentStream.setStrokingColor(0f, 0f, 0f);
+            contentStream.setNonStrokingColor(0f, 0f, 0f);
+            contentStream.setFont(new PDType1Font(HELVETICA_BOLD), 15);
+            contentStream.setTextMatrix(Matrix.getTranslateInstance(10, 800));
+            contentStream.showText("Mode " + m);
+            contentStream.endText();
+            DefaultFontDrawer fontTextDrawer = null;
+            switch (m) {
+                case FontTextIfPossible:
+                    fontTextDrawer = new DefaultFontDrawer();
+                    registerFonts(fontTextDrawer);
+                    break;
+                case DefaultFontText: {
+                    fontTextDrawer = new CoreFontDrawer();
+                    registerFonts(fontTextDrawer);
+                    break;
                 }
-                if (fontTextDrawer != null) {
-                    pdfBoxGraphics2D.setFontTextDrawer(fontTextDrawer);
-                }
-                exporter.draw(pdfBoxGraphics2D);
-                pdfBoxGraphics2D.dispose();
-                PDFormXObject xFormObject = pdfBoxGraphics2D.getXFormObject();
-                Matrix matrix = new Matrix();
-                matrix.translate(0, 20);
-                contentStream.transform(matrix);
-                contentStream.drawForm(xFormObject);
-                matrix.scale(1.5f, 1.5f);
-                matrix.translate(0, 100);
-                contentStream.transform(matrix);
-                contentStream.drawForm(xFormObject);
-                contentStream.close();
+                case ForceFontText:
+                    fontTextDrawer = new ForcedFontDrawer();
+                    registerFonts(fontTextDrawer);
+                    fontTextDrawer.registerFont("Arial", helvetica);
+                    break;
+                case DefaultVectorized:
+                default:
+                    break;
             }
-            document.save(new File(parentDir, name + ".pdf"));
-            document.close();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
+            if (fontTextDrawer != null) {
+                pdfBoxGraphics2D.setFontTextDrawer(fontTextDrawer);
+            }
+            exporter.draw(pdfBoxGraphics2D);
+            pdfBoxGraphics2D.dispose();
+            PDFormXObject xFormObject = pdfBoxGraphics2D.getXFormObject();
+            Matrix matrix = new Matrix();
+            matrix.translate(0, 20);
+            contentStream.transform(matrix);
+            contentStream.drawForm(xFormObject);
+            matrix.scale(1.5f, 1.5f);
+            matrix.translate(0, 100);
+            contentStream.transform(matrix);
+            contentStream.drawForm(xFormObject);
+            contentStream.close();
         }
+        document.save(new File(parentDir, name + ".pdf"));
+        document.close();
     }
 
     private void registerFonts(DefaultFontDrawer fontTextDrawer) {
@@ -102,7 +99,7 @@ class PdfBoxGraphics2DTestBase {
     }
 
     interface GraphicsExporter {
-        void draw(Graphics2D gfx) throws IOException, FontFormatException;
+        void draw(Graphics2D gfx) throws IOException, FontFormatException, SVGException;
     }
 
 }
diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2dTest.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2dTest.java
index b08c289..a7c92b2 100644
--- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2dTest.java
+++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/PdfBoxGraphics2dTest.java
@@ -29,11 +29,10 @@ import java.util.Iterator;
 public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase {
 
     @Test
-    public void testNegativeShapesAndComposite() {
+    public void testNegativeShapesAndComposite() throws Exception {
         exportGraphic("simple", "negativeWithComposite", gfx -> {
             RoundRectangle2D.Float rect = new RoundRectangle2D.Float(10f, 10f, 20f, 20f, 5f,
                     6f);
-
             AffineTransform transformIdentity = new AffineTransform();
             AffineTransform transformMirrored = AffineTransform.getTranslateInstance(0, 100);
             transformMirrored.scale(1, -0.5);
@@ -69,7 +68,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase {
     }
 
     @Test
-    public void testGradients() {
+    public void testGradients() throws Exception {
         exportGraphic("simple", "gradients", gfx -> {
             LinearGradientPaint linearGradientPaint = new LinearGradientPaint(0, 0, 100, 200,
                     new float[]{0.0f, .2f, .4f, .9f, 1f},
@@ -91,7 +90,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase {
     }
 
     @Test
-    public void testBuildPatternFill() {
+    public void testBuildPatternFill() throws Exception {
         exportGraphic("simple", "patternfill", gfx -> {
             Composite composite = gfx.getComposite();
             RadialGradientPaint radialGradientPaint = new RadialGradientPaint(200, 200, 200,
@@ -109,7 +108,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase {
     }
 
     @Test
-    public void testDifferentFonts() {
+    public void testDifferentFonts() throws Exception {
         exportGraphic("simple", "fonts", gfx -> {
             Font sansSerif = new Font(Font.SANS_SERIF, Font.PLAIN, 15);
             Font embeddedFont = Font.createFont(Font.TRUETYPE_FONT,
@@ -147,15 +146,13 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase {
                 gfx.setFont(f.deriveFont(Font.ITALIC | Font.BOLD));
                 gfx.drawString(txt, x, y);
                 gfx.getFontMetrics().stringWidth(txt);
-
                 y += 30;
             }
-
         });
     }
 
     @Test
-    public void testImageEncoding() {
+    public void testImageEncoding() throws Exception {
         exportGraphic("imageenc", "imageenc", gfx -> {
             BufferedImage img2 = ImageIO
                     .read(PdfBoxGraphics2dTest.class.getResourceAsStream("pixeltest.png"));
@@ -178,8 +175,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase {
     }
 
     @Test
-    public void testEvenOddRules() {
-
+    public void testEvenOddRules() throws Exception {
         exportGraphic("simple", "evenOdd", gfx -> {
             gfx.setColor(Color.YELLOW);
             gfx.fillPolygon(new int[]{80, 129, 0, 160, 31},
@@ -202,7 +198,7 @@ public class PdfBoxGraphics2dTest extends PdfBoxGraphics2DTestBase {
     }
 
     @Test
-    public void testSimpleGraphics2d() {
+    public void testSimpleGraphics2d() throws Exception {
         Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("JPEG");
         while (readers.hasNext()) {
             readers.next();
diff --git a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/RenderSVGsTest.java b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/RenderSVGsTest.java
index 46d9265..a32b348 100644
--- a/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/RenderSVGsTest.java
+++ b/graphics-pdfbox/src/test/java/org/xbib/graphics/pdfbox/test/RenderSVGsTest.java
@@ -1,35 +1,35 @@
 package org.xbib.graphics.pdfbox.test;
 
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.xbib.graphics.svg.SVGDiagram;
-import org.xbib.graphics.svg.SVGException;
 import org.xbib.graphics.svg.SVGUniverse;
 
-import java.io.IOException;
 import java.net.URL;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 public class RenderSVGsTest extends PdfBoxGraphics2DTestBase {
 
+    private static final Logger logger = Logger.getLogger(RenderSVGsTest.class.getName());
+
     @Test
-    public void testSVGs() throws IOException {
+    public void testSVGs() throws Exception {
         renderSVG("barChart.svg", 0.45);
         renderSVG("gump-bench.svg", 1);
         renderSVG("json.svg", 150);
         renderSVG("heart.svg", 200);
         renderSVG("displayWebStats.svg", 200);
-        renderSVG("compuserver_msn_Ford_Focus.svg", 0.7);
-        renderSVG("watermark.svg", 0.4);
+        //renderSVG("compuserver_msn_Ford_Focus.svg", 0.7);
+        //renderSVG("watermark.svg", 0.4);
     }
 
     @Test
-    public void renderFailureCases() throws IOException {
-        // renderSVG("openhtml_536.svg", 1);
+    public void renderFailureCases() throws Exception {
         renderSVG("openhtml_538_gradient.svg", .5);
     }
 
     @Test
-    public void testGradientSVGEmulateObjectBoundingBox() throws IOException {
+    public void testGradientSVGEmulateObjectBoundingBox() throws Exception {
         renderSVG("long-gradient.svg", 0.55);
         renderSVG("tall-gradient.svg", 0.33);
         renderSVG("near-square-gradient.svg", 0.30);
@@ -38,22 +38,15 @@ public class RenderSVGsTest extends PdfBoxGraphics2DTestBase {
         renderSVG("horizontal-gradient.svg", 0.55);
     }
 
-    @Disabled
-    @Test
-    public void testSVGinCMYKColorspace() throws IOException {
-        //renderSVGCMYK("atmospheric-composiition.svg", 0.7);
-    }
-
-    private void renderSVG(String name, final double scale) {
+    private void renderSVG(String name, final double scale) throws Exception {
+        logger.log(Level.INFO, "name = " + name);
         URL url = getClass().getResource(name);
         SVGUniverse svgUniverse = new SVGUniverse();
         SVGDiagram diagram = svgUniverse.getDiagram(svgUniverse.loadSVG(url));
         exportGraphic("xbibsvg", name.replace(".svg", ""), gfx -> {
             gfx.scale(scale, scale);
-            try {
+            if (diagram != null) {
                 diagram.render(gfx);
-            } catch (SVGException e) {
-                throw new IllegalArgumentException(e);
             }
         });
     }
diff --git a/graphics-pdfbox/src/test/resources/org/xbib/graphics/pdfbox/test/json.svg b/graphics-pdfbox/src/test/resources/org/xbib/graphics/pdfbox/test/json.svg
index 7ec7a92..b02b633 100644
--- a/graphics-pdfbox/src/test/resources/org/xbib/graphics/pdfbox/test/json.svg
+++ b/graphics-pdfbox/src/test/resources/org/xbib/graphics/pdfbox/test/json.svg
@@ -1,6 +1,6 @@
 <!-- Taken from https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/ -->
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 102">
   <radialGradient id="jsongrad" cx="65" cy="90" r="100" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#EEF"/><stop offset="1"/></radialGradient>
-  <path d="M61,02 A 49,49 0,0,0 39,98 C 9,79 10,24 45,25 C 72,24 65,75 50,75 C 93,79 91,21 62,02" id="jsonswirl" fill="url(#jsongrad)"/>
+  <path d="M 61,02 A 49,49 0,0,0 39,98 C 9,79 10,24 45,25 C 72,24 65,75 50,75 C 93,79 91,21 62,02" id="jsonswirl" fill="url(#jsongrad)"/>
   <use xlink:href="#jsonswirl" transform="rotate(180 50,50)"/>
 </svg>
diff --git a/graphics-png/src/main/java/module-info.java b/graphics-png/src/main/java/module-info.java
index 62a6858..f8156d2 100644
--- a/graphics-png/src/main/java/module-info.java
+++ b/graphics-png/src/main/java/module-info.java
@@ -3,5 +3,5 @@ module org.xbib.graphics.png {
     exports org.xbib.graphics.imageio.plugins.png.pngj;
     exports org.xbib.graphics.imageio.plugins.png.pngj.chunks;
     exports org.xbib.graphics.imageio.plugins.png.pngj.pixels;
-    requires transitive java.desktop;
+    requires java.desktop;
 }
diff --git a/graphics-svg/src/main/java/module-info.java b/graphics-svg/src/main/java/module-info.java
index 3a03a17..d5b07cd 100644
--- a/graphics-svg/src/main/java/module-info.java
+++ b/graphics-svg/src/main/java/module-info.java
@@ -1,6 +1,4 @@
 module org.xbib.graphics.svg {
-    requires transitive java.desktop;
-    requires java.logging;
     exports org.xbib.graphics.svg;
     exports org.xbib.graphics.svg.element;
     exports org.xbib.graphics.svg.element.filtereffects;
@@ -10,4 +8,6 @@ module org.xbib.graphics.svg {
     exports org.xbib.graphics.svg.pathcmd;
     exports org.xbib.graphics.svg.xml;
     exports org.xbib.graphics.svg.util;
-}
\ No newline at end of file
+    requires java.desktop;
+    requires java.logging;
+}
diff --git a/graphics-svg/src/main/java/org/xbib/graphics/svg/SVGUniverse.java b/graphics-svg/src/main/java/org/xbib/graphics/svg/SVGUniverse.java
index d749655..6b6d8b7 100644
--- a/graphics-svg/src/main/java/org/xbib/graphics/svg/SVGUniverse.java
+++ b/graphics-svg/src/main/java/org/xbib/graphics/svg/SVGUniverse.java
@@ -113,7 +113,7 @@ public class SVGUniverse {
                     loadedImages.put(url, ref);
                     return url;
                 } catch (IOException ex) {
-                    logger.log(Level.SEVERE, "Could not decode inline image", ex);
+                    logger.log(Level.WARNING, "could not decode inline image: " + ex.getMessage());
                 }
             }
             return null;
@@ -123,7 +123,7 @@ public class SVGUniverse {
                 registerImage(url);
                 return url;
             } catch (MalformedURLException ex) {
-                logger.log(Level.SEVERE, "Bad url", ex);
+                logger.log(Level.WARNING, "Bad url: " + ex.getMessage());
             }
             return null;
         }
@@ -150,7 +150,7 @@ public class SVGUniverse {
             }
             loadedImages.put(imageURL, ref);
         } catch (Exception e) {
-            logger.log(Level.SEVERE, "Could not load image: " + imageURL, e);
+            logger.log(Level.WARNING, "Could not load image: " + imageURL + " : " + e.getMessage());
         }
     }
 
@@ -177,7 +177,7 @@ public class SVGUniverse {
             URI uri = new URI(path.toString());
             return getElement(uri, true);
         } catch (Exception e) {
-            logger.log(Level.SEVERE, "Could not parse url " + path, e);
+            logger.log(Level.WARNING, "Could not parse URL: " + path);
         }
         return null;
     }
@@ -194,7 +194,7 @@ public class SVGUniverse {
         try {
             return new URI(scheme, schemeSpecific, frag);
         } catch (URISyntaxException ex) {
-            Logger.getLogger(SVGUniverse.class.getName()).log(Level.SEVERE, null, ex);
+            logger.log(Level.WARNING, ex.getMessage());
         }
         return null;
     }
@@ -216,7 +216,7 @@ public class SVGUniverse {
             String fragment = path.getFragment();
             return fragment == null ? dia.getRoot() : dia.getElement(fragment);
         } catch (MalformedURLException | URISyntaxException e) {
-            logger.log(Level.SEVERE, "Could not parse path " + path, e);
+            logger.log(Level.WARNING, "Could not parse path " + path);
             return null;
         }
     }
@@ -244,7 +244,7 @@ public class SVGUniverse {
             dia = loadedDocs.get(xmlBase);
             return dia;
         } catch (Exception e) {
-            logger.log(Level.SEVERE, "Could not parse", e);
+            logger.log(Level.WARNING, e.getMessage());
         }
         return null;
     }
@@ -292,7 +292,7 @@ public class SVGUniverse {
             is.close();
             return result;
         } catch (URISyntaxException | IOException ex) {
-            logger.log(Level.SEVERE, "Could not parse", ex);
+            logger.log(Level.WARNING, ex.getMessage());
         }
         return null;
     }
@@ -324,7 +324,7 @@ public class SVGUniverse {
         try {
             return new URI("svg", name, null);
         } catch (Exception e) {
-            logger.log(Level.SEVERE, "Could not parse", e);
+            logger.log(Level.WARNING, e.getMessage());
             return null;
         }
     }
@@ -354,11 +354,11 @@ public class SVGUniverse {
             handler.getLoadedDiagram().updateTime(curTime);
             return xmlBase;
         } catch (SAXParseException sex) {
-            logger.log(Level.SEVERE, "Error processing " + xmlBase, sex);
+            logger.log(Level.WARNING, "error processing " + xmlBase);
             loadedDocs.remove(xmlBase);
             return null;
         } catch (Throwable e) {
-            logger.log(Level.SEVERE, "Could not load SVG " + xmlBase, e);
+            logger.log(Level.WARNING, "could not load SVG " + xmlBase);
         }
         return null;
     }
diff --git a/graphics-vector-eps/src/main/java/module-info.java b/graphics-vector-eps/src/main/java/module-info.java
index e399390..43a2db7 100644
--- a/graphics-vector-eps/src/main/java/module-info.java
+++ b/graphics-vector-eps/src/main/java/module-info.java
@@ -1,6 +1,7 @@
 module org.xbib.graphics.io.vector.eps {
     exports org.xbib.graphics.io.vector.eps;
-    requires transitive org.xbib.graphics.io.vector;
+    requires org.xbib.graphics.io.vector;
+    requires java.desktop;
     provides org.xbib.graphics.io.vector.VectorGraphics2DProvider with
             org.xbib.graphics.io.vector.eps.EPSGraphics2DProvider;
 }
diff --git a/graphics-vector-pdf/src/main/java/module-info.java b/graphics-vector-pdf/src/main/java/module-info.java
index 42fa0c2..7f6c08a 100644
--- a/graphics-vector-pdf/src/main/java/module-info.java
+++ b/graphics-vector-pdf/src/main/java/module-info.java
@@ -1,6 +1,7 @@
 module org.xbib.graphics.io.vector.pdf {
     exports org.xbib.graphics.io.vector.pdf;
-    requires transitive org.xbib.graphics.io.vector;
+    requires org.xbib.graphics.io.vector;
+    requires java.desktop;
     provides org.xbib.graphics.io.vector.VectorGraphics2DProvider with
             org.xbib.graphics.io.vector.pdf.PDFGraphics2DProvider;
 }
diff --git a/graphics-vector-svg/src/main/java/module-info.java b/graphics-vector-svg/src/main/java/module-info.java
index 2a3d589..958a815 100644
--- a/graphics-vector-svg/src/main/java/module-info.java
+++ b/graphics-vector-svg/src/main/java/module-info.java
@@ -1,6 +1,7 @@
 module org.xbib.graphics.io.vector.svg {
     exports org.xbib.graphics.io.vector.svg;
-    requires transitive org.xbib.graphics.io.vector;
+    requires org.xbib.graphics.io.vector;
+    requires java.desktop;
     provides org.xbib.graphics.io.vector.VectorGraphics2DProvider with
             org.xbib.graphics.io.vector.svg.SVGGraphics2DProvider;
 }
diff --git a/graphics-vector/src/main/java/module-info.java b/graphics-vector/src/main/java/module-info.java
index cfb2ba2..632bd05 100644
--- a/graphics-vector/src/main/java/module-info.java
+++ b/graphics-vector/src/main/java/module-info.java
@@ -2,5 +2,5 @@ module org.xbib.graphics.io.vector {
     exports org.xbib.graphics.io.vector;
     exports org.xbib.graphics.io.vector.commands;
     exports org.xbib.graphics.io.vector.filters;
-    requires transitive java.desktop;
+    requires java.desktop;
 }
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 35d145f..80620ac 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -16,11 +16,11 @@ dependencyResolutionManagement {
     versionCatalogs {
         libs {
             version('gradle', '8.7')
-            version('groovy', '4.0.21')
-            version('datastructures', '5.1.1')
+            version('groovy', '4.0.26')
+            version('datastructures', '5.2.4')
             library('groovy', 'org.apache.groovy', 'groovy').versionRef('groovy')
             library('groovy-xml', 'org.apache.groovy', 'groovy-xml').versionRef('groovy')
-            library('jna', 'net.java.dev.jna', 'jna').version('5.14.0')
+            library('jna', 'net.java.dev.jna', 'jna').version('5.16.0')
             library('pdfbox', 'org.apache.pdfbox', 'pdfbox').version('4.0.0-SNAPSHOT')
             library('pdfbox.jbig2', 'org.apache.pdfbox', 'jbig2-imageio').version('3.0.4')
             library('jai-jpeg2000', 'com.github.jai-imageio', 'jai-imageio-jpeg2000').version('1.4.0')
@@ -30,22 +30,23 @@ dependencyResolutionManagement {
             library('asm', 'org.ow2.asm', 'asm').version('9.6')
             library('asm-commons', 'org.ow2.asm', 'asm-commons').version('9.6')
             library('asm-util', 'org.ow2.asm', 'asm-util').version('9.6')
-            library('datastructures-settings', 'org.xbib', 'settings-datastructures').versionRef('datastructures')
-            library('datastructures-settings-json', 'org.xbib', 'settings-datastructures-json').versionRef('datastructures')
-            library('datastructures-settings-yaml', 'org.xbib', 'settings-datastructures-yaml').versionRef('datastructures')
+            library('settings-api', 'org.xbib', 'settings-api').versionRef('datastructures')
+            library('settings', 'org.xbib', 'settings-datastructures').versionRef('datastructures')
+            //library('settings-yaml', 'org.xbib', 'settings-datastructures-yaml').versionRef('datastructures')
         }
         testLibs {
-            version('groovy', '4.0.21')
-            version('junit', '5.10.2')
+            version('groovy', '4.0.26')
+            version('junit', '5.12.0')
             version('junit4', '4.13.2')
             version('spock', '2.4-M1-groovy-4.0')
+            version('datastructures', '5.2.4')
             library('junit-jupiter-api', 'org.junit.jupiter', 'junit-jupiter-api').versionRef('junit')
             library('junit-jupiter-params', 'org.junit.jupiter', 'junit-jupiter-params').versionRef('junit')
             library('junit-jupiter-engine', 'org.junit.jupiter', 'junit-jupiter-engine').versionRef('junit')
             library('junit-jupiter-vintage', 'org.junit.vintage', 'junit-vintage-engine').versionRef('junit')
-            library('junit-jupiter-platform-launcher', 'org.junit.platform', 'junit-platform-launcher').version('1.10.1')
+            library('junit-jupiter-platform-launcher', 'org.junit.platform', 'junit-platform-launcher').version('1.12.0')
             library('junit4', 'junit', 'junit').versionRef('junit4')
-            library('hamcrest', 'org.hamcrest', 'hamcrest-library').version('2.2')
+            library('hamcrest', 'org.hamcrest', 'hamcrest-library').version('3.0')
             library('groovy', 'org.apache.groovy', 'groovy').versionRef('groovy')
             library('groovy-json', 'org.apache.groovy', 'groovy-json').versionRef('groovy')
             library('groovy-nio', 'org.apache.groovy', 'groovy-nio').versionRef('groovy')
@@ -59,6 +60,7 @@ dependencyResolutionManagement {
             library('reflections', 'org.reflections', 'reflections').version('0.9.11')
             library('jfreechart', 'org.jfree', 'jfreechart').version('1.5.2')
             library('assertj', 'org.assertj', 'assertj-core').version('3.25.3')
+            library('settings-json', 'org.xbib', 'settings-datastructures-json').versionRef('datastructures')
         }
     }
 }