diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/pom.xml
new file mode 100644
index 0000000000..828fe7de6a
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/pom.xml
@@ -0,0 +1,38 @@
+
+
+
+ com.baeldung.decoupling-pattern2
+ decoupling-pattern2
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ com.baeldung.consumermodule
+ consumermodule
+ 1.0
+
+
+
+ com.baeldung.servicemodule
+ servicemodule
+ 1.0
+
+
+ com.baeldung.providermodule
+ providermodule
+ 1.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/src/main/java/com/baeldung/consumermodule/Application.java b/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/src/main/java/com/baeldung/consumermodule/Application.java
new file mode 100644
index 0000000000..b9430eb458
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/src/main/java/com/baeldung/consumermodule/Application.java
@@ -0,0 +1,15 @@
+package com.baeldung.consumermodule;
+
+import com.baeldung.servicemodule.TextService;
+
+import java.util.ServiceLoader;
+
+public class Application {
+
+ public static void main(String[] args) {
+ ServiceLoader services = ServiceLoader.load(TextService.class);
+ for (final TextService service: services) {
+ System.out.println("The service " + service.getClass().getSimpleName() + " says: " + service.parseText("Hello from Baeldung!"));
+ }
+ }
+}
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/src/main/java/module-info.java b/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/src/main/java/module-info.java
new file mode 100644
index 0000000000..d8438a7bbc
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/consumermodule/src/main/java/module-info.java
@@ -0,0 +1,4 @@
+module com.baeldung.consumermodule {
+ requires com.baeldung.servicemodule;
+ uses com.baeldung.servicemodule.TextService;
+}
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml
new file mode 100644
index 0000000000..f8c05d40b8
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/pom.xml
@@ -0,0 +1,34 @@
+
+
+ 4.0.0
+
+ com.baeldung.decoupling-pattern2
+ decoupling-pattern2
+ 1.0-SNAPSHOT
+ pom
+
+
+ servicemodule
+ providermodule
+ consumermodule
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+ 11
+ 11
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml
new file mode 100644
index 0000000000..ceeda9049c
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/pom.xml
@@ -0,0 +1,34 @@
+
+
+
+ 4.0.0
+ com.baeldung.providermodule
+ providermodule
+ 1.0
+
+
+ com.baeldung.decoupling-pattern2
+ decoupling-pattern2
+ 1.0-SNAPSHOT
+
+
+
+
+ com.baeldung.servicemodule
+ servicemodule
+ 1.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java b/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java
new file mode 100644
index 0000000000..51e742e641
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/com/baeldung/providermodule/LowercaseTextService.java
@@ -0,0 +1,10 @@
+package com.baeldung.providermodule;
+
+import com.baeldung.servicemodule.TextService;
+
+public class LowercaseTextService implements TextService {
+ @Override
+ public String parseText(String text) {
+ return text.toLowerCase();
+ }
+}
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/module-info.java b/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/module-info.java
new file mode 100644
index 0000000000..1223aa0121
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/providermodule/src/main/java/module-info.java
@@ -0,0 +1,4 @@
+module com.baeldung.providermodule {
+ requires com.baeldung.servicemodule;
+ provides com.baeldung.servicemodule.TextService with com.baeldung.providermodule.LowercaseTextService;
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/pom.xml b/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/pom.xml
new file mode 100644
index 0000000000..4de3df8c01
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+
+ >com.baeldung.decoupling-pattern2
+ decoupling-pattern2
+ 1.0-SNAPSHOT
+
+
+ com.baeldung.servicemodule
+ servicemodule
+ 1.0
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/src/main/java/com/baeldung/servicemodule/TextService.java b/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/src/main/java/com/baeldung/servicemodule/TextService.java
new file mode 100644
index 0000000000..dedbd774ca
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/src/main/java/com/baeldung/servicemodule/TextService.java
@@ -0,0 +1,6 @@
+package com.baeldung.servicemodule;
+
+public interface TextService {
+
+ String parseText(String text);
+}
diff --git a/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/src/main/java/module-info.java b/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/src/main/java/module-info.java
new file mode 100644
index 0000000000..dbd70b944b
--- /dev/null
+++ b/core-java-modules/core-java-jpms/decoupling-pattern2/servicemodule/src/main/java/module-info.java
@@ -0,0 +1,3 @@
+module com.baeldung.servicemodule {
+ exports com.baeldung.servicemodule;
+}
\ No newline at end of file