ensure winegrower.properties also configured DefaultConfigurationAdmin
diff --git a/winegrower-core/src/main/asciidoc/index.adoc b/winegrower-core/src/main/asciidoc/index.adoc
index 61cd6a0..156747c 100644
--- a/winegrower-core/src/main/asciidoc/index.adoc
+++ b/winegrower-core/src/main/asciidoc/index.adoc
@@ -24,6 +24,8 @@
 
 === Package default configuration
 
-The configuration is takend from the agent by default but you can also embed some default values for your convenience.
+The configuration is taken from the agent by default but you can also embed some default values for your convenience.
 This is done providing a `winegrower.properties` in the agent classloader. It takes the same configuration as the agent.
 
+TIP: you can also pass `winegrower.service.*` properties in this file.
+
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java b/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
index 917ff6d..26b8792 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
@@ -38,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Dictionary;
+import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
@@ -201,7 +202,7 @@
             if (configurationAdminIterator.hasNext()) {
                 return configurationAdminIterator.next();
             }
-            return new DefaultConfigurationAdmin();
+            return new DefaultConfigurationAdmin(new HashMap<>());
         }
 
         public void loadConfiguration(final InputStream stream) throws IOException {
@@ -276,6 +277,15 @@
                 }
             });
 
+            if (DefaultConfigurationAdmin.class.isInstance(configurationAdmin)) {
+                final DefaultConfigurationAdmin dca = DefaultConfigurationAdmin.class.cast(configurationAdmin);
+                embedConfig.stringPropertyNames()
+                           .stream()
+                           .filter(it -> it.startsWith("winegrower.service."))
+                           .peek(matched::add)
+                           .forEach(key -> dca.getProvidedConfiguration().put(key, embedConfig.getProperty(key)));
+            }
+
             embedConfig.stringPropertyNames().stream().filter(it -> !matched.contains(it.toLowerCase(ROOT)))
                        .forEach(it -> LOGGER.warn("Didn't match configuration {}, did you mispell it?", it));
         }
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/service/DefaultConfigurationAdmin.java b/winegrower-core/src/main/java/org/apache/winegrower/service/DefaultConfigurationAdmin.java
index bbe3d9b..e66d821 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/service/DefaultConfigurationAdmin.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/service/DefaultConfigurationAdmin.java
@@ -43,26 +43,35 @@
     private final static String WINEGROWER_CONFIG_PATH = "winegrower.config.path";
     private final static String WINEGROWER_CONFIG_EXTENSION = ".cfg";
 
+    private final Map<String, String> providedConfiguration;
     private final Map<String, Configuration> configurations = new HashMap<>();
 
+    public DefaultConfigurationAdmin(final Map<String, String> providedConfiguration) {
+        this.providedConfiguration = providedConfiguration;
+    }
+
+    public Map<String, String> getProvidedConfiguration() {
+        return providedConfiguration;
+    }
+
     @Override
     public Configuration createFactoryConfiguration(final String pid) {
-        return new DefaultConfiguration(pid, null, null);
+        return new DefaultConfiguration(providedConfiguration, pid, null, null);
     }
 
     @Override
     public Configuration createFactoryConfiguration(final String pid, final String location) {
-        return new DefaultConfiguration(pid, null, location);
+        return new DefaultConfiguration(providedConfiguration, pid, null, location);
     }
 
     @Override
     public Configuration getConfiguration(final String pid, final String location) {
-        return configurations.computeIfAbsent(pid, p -> new DefaultConfiguration(null, p, location));
+        return configurations.computeIfAbsent(pid, p -> new DefaultConfiguration(providedConfiguration, null, p, location));
     }
 
     @Override
     public Configuration getConfiguration(final String pid) {
-        return configurations.computeIfAbsent(pid, p -> new DefaultConfiguration(null, p, null));
+        return configurations.computeIfAbsent(pid, p -> new DefaultConfiguration(providedConfiguration, null, p, null));
     }
 
     @Override
@@ -82,11 +91,14 @@
         private final String pid;
         private final Map<String, String> defaultConfig = new HashMap<>();
         private final File defaultExternalConfigLocation;
+        private final Map<String, String> configRegistry;
         private String location;
         private final Hashtable<String, Object> properties;
         private final AtomicLong changeCount = new AtomicLong();
 
-        private DefaultConfiguration(final String factoryPid, final String pid, final String location) {
+        private DefaultConfiguration(final Map<String, String> configRegistry,
+                                     final String factoryPid, final String pid, final String location) {
+            this.configRegistry = configRegistry;
             this.factoryPid = factoryPid;
             this.pid = pid;
             this.location = location;
@@ -104,6 +116,8 @@
         }
 
         private void loadConfig(final String pid) {
+            final String prefix = "winegrower.service." + pid + "."; // for "global" registries like system props
+
             // we first read the config from the classpath (lowest priority)
             try (final InputStream embedConfig = Thread.currentThread().getContextClassLoader()
                                                        .getResourceAsStream(pid + WINEGROWER_CONFIG_EXTENSION)) {
@@ -115,6 +129,11 @@
             }
             properties.putAll(defaultConfig);
 
+            // then the default registry which is considered "in JVM" so less prioritized than external config
+            configRegistry.entrySet().stream()
+                          .filter(it -> it.getKey().startsWith(prefix))
+                          .forEach(entry -> properties.put(entry.getKey().substring(prefix.length()), entry.getValue()));
+
             // then from an external file
             if (defaultExternalConfigLocation.isFile()) {
                 try (final InputStream stream = new FileInputStream(defaultExternalConfigLocation)) {
@@ -125,7 +144,6 @@
             }
 
             // and finally from system properties
-            final String prefix = "winegrower.service." + pid + ".";
             System.getProperties().stringPropertyNames().stream()
                   .filter(it -> it.startsWith(prefix))
                   .forEach(key -> properties.put(key.substring(prefix.length()), System.getProperty(key)));
diff --git a/winegrower-core/src/test/java/org/apache/winegrower/service/DefaultConfigurationAdminTest.java b/winegrower-core/src/test/java/org/apache/winegrower/service/DefaultConfigurationAdminTest.java
index c0aa517..6fe5c0d 100644
--- a/winegrower-core/src/test/java/org/apache/winegrower/service/DefaultConfigurationAdminTest.java
+++ b/winegrower-core/src/test/java/org/apache/winegrower/service/DefaultConfigurationAdminTest.java
@@ -13,39 +13,41 @@
  */
 package org.apache.winegrower.service;
 
+import static java.util.Collections.emptyMap;
+
+import java.io.File;
+
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.osgi.service.cm.Configuration;
 
-import java.io.File;
-
-public class DefaultConfigurationAdminTest {
+class DefaultConfigurationAdminTest {
 
   @Test
   @DisplayName("Should return value from system property")
-  public void systemPropertiesTest() throws Exception {
+  void systemPropertiesTest() {
     System.setProperty("winegrower.service.test.foo", "bar");
-    DefaultConfigurationAdmin configurationAdmin = new DefaultConfigurationAdmin();
+    DefaultConfigurationAdmin configurationAdmin = new DefaultConfigurationAdmin(emptyMap());
     Configuration configuration = configurationAdmin.getConfiguration("test");
     Assertions.assertEquals("bar", configuration.getProperties().get("foo"));
   }
 
   @Test
   @DisplayName("Should return value from cfg file in classpath")
-  public void externalConfigClasspathTest() throws Exception {
-    DefaultConfigurationAdmin configurationAdmin = new DefaultConfigurationAdmin();
+  void externalConfigClasspathTest() {
+    DefaultConfigurationAdmin configurationAdmin = new DefaultConfigurationAdmin(emptyMap());
     Configuration configuration = configurationAdmin.getConfiguration("external.test");
     Assertions.assertEquals("bar", configuration.getProperties().get("foo"));
   }
 
   @Test
   @DisplayName("Should return value from cfg file in winegrower.config.path location")
-  public void externalConfigPathTest() throws Exception {
+  void externalConfigPathTest() {
     File file = new File("src/test/resources");
     System.out.println(file.getAbsolutePath());
     System.setProperty("winegrower.config.path", "src/test/resources");
-    DefaultConfigurationAdmin configurationAdmin = new DefaultConfigurationAdmin();
+    DefaultConfigurationAdmin configurationAdmin = new DefaultConfigurationAdmin(emptyMap());
     Configuration configuration = configurationAdmin.getConfiguration("external.test");
     Assertions.assertEquals("bar", configuration.getProperties().get("foo"));
   }