diff --git a/pom.xml b/pom.xml
index b93dd6d..365ff74 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
@@ -27,7 +27,7 @@
 
   <groupId>org.apache.winegrower</groupId>
   <artifactId>winegrower</artifactId>
-  <version>1.0.1-SNAPSHOT</version>
+  <version>1.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Apache Winegrower</name>
diff --git a/winegrower-cepages/pom.xml b/winegrower-cepages/pom.xml
index 973f681..34c2a97 100644
--- a/winegrower-cepages/pom.xml
+++ b/winegrower-cepages/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-cepages/winegrower-cepage-cxf-rs/pom.xml b/winegrower-cepages/winegrower-cepage-cxf-rs/pom.xml
index 20ee714..4d28adf 100644
--- a/winegrower-cepages/winegrower-cepage-cxf-rs/pom.xml
+++ b/winegrower-cepages/winegrower-cepage-cxf-rs/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.apache.winegrower.cepages</groupId>
     <artifactId>winegrower-cepages</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-cepages/winegrower-cepage-http/pom.xml b/winegrower-cepages/winegrower-cepage-http/pom.xml
index 5d634ac..10edf86 100644
--- a/winegrower-cepages/winegrower-cepage-http/pom.xml
+++ b/winegrower-cepages/winegrower-cepage-http/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.cepages</groupId>
     <artifactId>winegrower-cepages</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-cepages/winegrower-cepage-jaxrs/pom.xml b/winegrower-cepages/winegrower-cepage-jaxrs/pom.xml
index 2c977ac..160a181 100644
--- a/winegrower-cepages/winegrower-cepage-jaxrs/pom.xml
+++ b/winegrower-cepages/winegrower-cepage-jaxrs/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.cepages</groupId>
     <artifactId>winegrower-cepages</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-cepages/winegrower-cepage-osgi-cdi/pom.xml b/winegrower-cepages/winegrower-cepage-osgi-cdi/pom.xml
index d5febb2..1b6fd25 100644
--- a/winegrower-cepages/winegrower-cepage-osgi-cdi/pom.xml
+++ b/winegrower-cepages/winegrower-cepage-osgi-cdi/pom.xml
@@ -15,13 +15,13 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.cepages</groupId>
     <artifactId>winegrower-cepages</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-cepages/winegrower-cepage-shell/pom.xml b/winegrower-cepages/winegrower-cepage-shell/pom.xml
index 2d26ac6..a431390 100644
--- a/winegrower-cepages/winegrower-cepage-shell/pom.xml
+++ b/winegrower-cepages/winegrower-cepage-shell/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.cepages</groupId>
     <artifactId>winegrower-cepages</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-core/pom.xml b/winegrower-core/pom.xml
index 48971f7..d8fef0f 100644
--- a/winegrower-core/pom.xml
+++ b/winegrower-core/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
@@ -75,4 +75,50 @@
       <scope>test</scope>
     </dependency>
   </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <version>3.2.4</version>
+        <executions>
+          <execution>
+            <id>fatjar</id>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <shadedArtifactAttached>true</shadedArtifactAttached>
+              <shadedClassifierName>fatjar</shadedClassifierName>
+              <createDependencyReducedPom>false</createDependencyReducedPom>
+              <dependencyReducedPomLocation>${project.build.directory}/shade.pom</dependencyReducedPomLocation>
+              <artifactSet>
+                <includes>
+                  <include>org.apache.xbean:*</include>
+                </includes>
+              </artifactSet>
+              <filters>
+                <filter>
+                  <artifact>*:*</artifact>
+                  <excludes>
+                    <exclude>META-INF/*.SF</exclude>
+                    <exclude>META-INF/*.DSA</exclude>
+                    <exclude>META-INF/*.RSA</exclude>
+                  </excludes>
+                </filter>
+                <filter>
+                  <artifact>org.apache.xbean:*</artifact>
+                  <excludes>
+                    <exclude>META-INF/MANIFEST.MF</exclude>
+                  </excludes>
+                </filter>
+              </filters>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 </project>
diff --git a/winegrower-core/src/main/asciidoc/index.adoc b/winegrower-core/src/main/asciidoc/index.adoc
index 156747c..7ce457b 100644
--- a/winegrower-core/src/main/asciidoc/index.adoc
+++ b/winegrower-core/src/main/asciidoc/index.adoc
@@ -29,3 +29,18 @@
 
 TIP: you can also pass `winegrower.service.*` properties in this file.
 
+=== Use as Karaf framework
+
+In some cloud oriented application it can makes sense to deploy Winegrower as a Karaf framework.
+To do so:
+
+1. Customize your `config.properties` setting/adding these properties:
++
+[source,properties]
+----
+karaf.framework=winegrower
+karaf.framework.factory=org.apache.winegrower.framework.WinegrowerFramework$Factory
+karaf.framework.winegrower=mvn\:org.apache.winegrower/winegrower-core/<version>/jar/fatjar
+----
+2. Ensure `winegrower-core` fatjar is in `system/` directly of Karaf
+3. Ensure `winegrower-core` OSGi API dependencies are in `karaf/lib` (typically config admin is required or `osgi.cmpn`)
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 fdbeb38..69b34b2 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
@@ -115,6 +115,7 @@
 
         private File workDir = new File(System.getProperty("java.io.tmpdir"), "karaf-boot_" + UUID.randomUUID().toString());
         private Predicate<String> jarFilter = it -> DEFAULT_EXCLUSIONS.stream().anyMatch(it::startsWith);
+        private boolean lazyInstall;
         private Collection<String> scanningIncludes;
         private Collection<String> scanningExcludes;
         private Collection<String> ignoredBundles = emptyList();
@@ -138,6 +139,14 @@
                 "pax-web-runtime",
                 "org.apache.aries.cdi");
 
+        public boolean isLazyInstall() {
+            return lazyInstall;
+        }
+
+        public void setLazyInstall(boolean lazyInstall) {
+            this.lazyInstall = lazyInstall;
+        }
+
         public Collection<String> getIgnoredBundles() {
             return ignoredBundles;
         }
@@ -193,8 +202,65 @@
         public Predicate<String> getJarFilter() {
             return jarFilter;
         }
-    }
 
+        public void fromProperties(final Properties properties) {
+            ofNullable(properties.getProperty("winegrower.ripener.configuration.workdir"))
+                    .map(String::valueOf)
+                    .map(File::new)
+                    .ifPresent(this::setWorkDir);
+            ofNullable(properties.getProperty("winegrower.ripener.configuration.lazyInstall"))
+                    .map(String::valueOf)
+                    .map(Boolean::parseBoolean)
+                    .ifPresent(this::setLazyInstall);
+            ofNullable(properties.getProperty("winegrower.ripener.configuration.prioritizedBundles"))
+                    .map(String::valueOf)
+                    .filter(it -> !it.isEmpty())
+                    .map(it -> asList(it.split(",")))
+                    .ifPresent(this::setPrioritizedBundles);
+            ofNullable(properties.getProperty("winegrower.ripener.configuration.ignoredBundles"))
+                    .map(String::valueOf)
+                    .filter(it -> !it.isEmpty())
+                    .map(it -> asList(it.split(",")))
+                    .ifPresent(this::setIgnoredBundles);
+            ofNullable(properties.getProperty("winegrower.ripener.configuration.scanningIncludes"))
+                    .map(String::valueOf)
+                    .filter(it -> !it.isEmpty())
+                    .map(it -> asList(it.split(",")))
+                    .ifPresent(this::setScanningIncludes);
+            ofNullable(properties.getProperty("winegrower.ripener.configuration.scanningExcludes"))
+                    .map(String::valueOf)
+                    .filter(it -> !it.isEmpty())
+                    .map(it -> asList(it.split(",")))
+                    .ifPresent(this::setScanningExcludes);
+            ofNullable(properties.getProperty("winegrower.ripener.configuration.manifestContributors"))
+                    .map(String::valueOf)
+                    .filter(it -> !it.isEmpty())
+                    .map(it -> asList(it.split(",")))
+                    .ifPresent(contributors -> setManifestContributors(contributors.stream().map(clazz -> {
+                        try {
+                            return Thread.currentThread().getContextClassLoader().loadClass(clazz).getConstructor().newInstance();
+                        } catch (final InstantiationException | NoSuchMethodException | IllegalAccessException
+                                | ClassNotFoundException e) {
+                            throw new IllegalArgumentException(e);
+                        } catch (final InvocationTargetException e) {
+                            throw new IllegalArgumentException(e.getTargetException());
+                        }
+                    }).map(ManifestContributor.class::cast).collect(toList())));
+            ofNullable(properties.getProperty("winegrower.ripener.configuration.jarFilter"))
+                    .map(String::valueOf)
+                    .filter(it -> !it.isEmpty())
+                    .ifPresent(filter -> {
+                        try {
+                            setJarFilter((Predicate<String>) Thread.currentThread().getContextClassLoader().loadClass(filter)
+                                    .getConstructor().newInstance());
+                        } catch (final InstantiationException | NoSuchMethodException | IllegalAccessException | ClassNotFoundException e) {
+                            throw new IllegalArgumentException(e);
+                        } catch (final InvocationTargetException e) {
+                            throw new IllegalArgumentException(e.getTargetException());
+                        }
+                    });
+        }
+    }
 
     class Impl implements Ripener {
         private static final Logger LOGGER = LoggerFactory.getLogger(Ripener.class);
@@ -207,6 +273,7 @@
         private final Configuration configuration;
 
         private long startTime = -1;
+        private StandaloneScanner scanner;
 
         public Impl(final Configuration configuration) {
             this.configuration = configuration;
@@ -222,7 +289,8 @@
             registerBuiltInService(EventAdmin.class, this.eventAdmin, new Hashtable<>());
             registerBuiltInService(org.osgi.service.log.LoggerFactory.class, loadLoggerFactory(), new Hashtable<>());
 
-            try (final InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("winegrower.properties")) {
+            try (final InputStream stream = Thread.currentThread().getContextClassLoader()
+                    .getResourceAsStream("winegrower.properties")) {
                 loadConfiguration(stream);
             } catch (final IOException e) {
                 LOGGER.warn(e.getMessage());
@@ -367,7 +435,10 @@
             startTime = System.currentTimeMillis();
             LOGGER.info("Starting Apache Winegrower application on {}",
                     LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault()));
-            final StandaloneScanner scanner = new StandaloneScanner(configuration, registry.getFramework());
+            if (configuration.isLazyInstall()) {
+                return this;
+            }
+            final StandaloneScanner scanner = getScanner();
             final AtomicLong bundleIdGenerator = new AtomicLong(1);
             Stream.concat(Stream.concat(
                     scanner.findOSGiBundles().stream(),
@@ -382,9 +453,14 @@
                     .peek(OSGiBundleLifecycle::start)
                     .peek(it -> registry.getBundles().put(it.getBundle().getBundleId(), it))
                     .forEach(bundle -> LOGGER.debug("Bundle {}", bundle));
+            this.scanner = null; // we don't need it anymore since we don't support runtime install so make it gc friendly
             return this;
         }
 
+        public synchronized StandaloneScanner getScanner() {
+            return scanner == null ? scanner = new StandaloneScanner(configuration, registry.getFramework()) : scanner;
+        }
+
         @Override
         public synchronized void stop() {
             LOGGER.info("Stopping Apache Winegrower application on {}", LocalDateTime.now());
@@ -474,6 +550,7 @@
                     .map(it -> configuration.getPrioritizedBundles().indexOf(it))
                     .orElse(-1);
         }
+
     }
 
     static Ripener create(final Configuration configuration) {
@@ -484,59 +561,7 @@
     static void main(final String[] args) {
         final CountDownLatch latch = new CountDownLatch(1);
         final Configuration configuration = new Configuration();
-        ofNullable(System.getProperty("winegrower.ripener.configuration.workdir"))
-                .map(String::valueOf)
-                .map(File::new)
-                .ifPresent(configuration::setWorkDir);
-        ofNullable(System.getProperty("winegrower.ripener.configuration.prioritizedBundles"))
-                .map(String::valueOf)
-                .filter(it -> !it.isEmpty())
-                .map(it -> asList(it.split(",")))
-                .ifPresent(configuration::setPrioritizedBundles);
-        ofNullable(System.getProperty("winegrower.ripener.configuration.ignoredBundles"))
-                .map(String::valueOf)
-                .filter(it -> !it.isEmpty())
-                .map(it -> asList(it.split(",")))
-                .ifPresent(configuration::setIgnoredBundles);
-        ofNullable(System.getProperty("winegrower.ripener.configuration.scanningIncludes"))
-                .map(String::valueOf)
-                .filter(it -> !it.isEmpty())
-                .map(it -> asList(it.split(",")))
-                .ifPresent(configuration::setScanningIncludes);
-        ofNullable(System.getProperty("winegrower.ripener.configuration.scanningExcludes"))
-                .map(String::valueOf)
-                .filter(it -> !it.isEmpty())
-                .map(it -> asList(it.split(",")))
-                .ifPresent(configuration::setScanningExcludes);
-        ofNullable(System.getProperty("winegrower.ripener.configuration.manifestContributors"))
-                .map(String::valueOf)
-                .filter(it -> !it.isEmpty())
-                .map(it -> asList(it.split(",")))
-                .ifPresent(contributors -> {
-                    configuration.setManifestContributors(contributors.stream().map(clazz -> {
-                        try {
-                            return Thread.currentThread().getContextClassLoader().loadClass(clazz).getConstructor().newInstance();
-                        } catch (final InstantiationException | NoSuchMethodException | IllegalAccessException
-                                | ClassNotFoundException e) {
-                            throw new IllegalArgumentException(e);
-                        } catch (final InvocationTargetException e) {
-                            throw new IllegalArgumentException(e.getTargetException());
-                        }
-                    }).map(ManifestContributor.class::cast).collect(toList()));
-                });
-        ofNullable(System.getProperty("winegrower.ripener.configuration.jarFilter"))
-                .map(String::valueOf)
-                .filter(it -> !it.isEmpty())
-                .ifPresent(filter -> {
-                    try {
-                        configuration.setJarFilter((Predicate<String>) Thread.currentThread().getContextClassLoader().loadClass(filter)
-                                .getConstructor().newInstance());
-                    } catch (final InstantiationException | NoSuchMethodException | IllegalAccessException | ClassNotFoundException e) {
-                        throw new IllegalArgumentException(e);
-                    } catch (final InvocationTargetException e) {
-                        throw new IllegalArgumentException(e.getTargetException());
-                    }
-                });
+        configuration.fromProperties(System.getProperties());
         final Ripener main = new Impl(configuration).start();
         Runtime.getRuntime().addShutdownHook(new Thread() {
 
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/deployer/BundleContextImpl.java b/winegrower-core/src/main/java/org/apache/winegrower/deployer/BundleContextImpl.java
index e1f3133..bfeb121 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/deployer/BundleContextImpl.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/deployer/BundleContextImpl.java
@@ -26,6 +26,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Function;
 import java.util.function.Supplier;
 import java.util.jar.Manifest;
 import java.util.stream.Stream;
@@ -63,6 +64,8 @@
     private final Collection<FrameworkListener> frameworkListeners = new CopyOnWriteArrayList<>();
     private final Map<ServiceReference<?>, Object> serviceInstances = new ConcurrentHashMap<>();
 
+    private Function<String, Bundle> installer;
+
     BundleContextImpl(final Manifest manifest, final OSGiServices services, final Supplier<Bundle> bundleSupplier,
                       final BundleRegistry registry) {
         this.manifest = manifest;
@@ -71,6 +74,10 @@
         this.registry = registry;
     }
 
+    public void setInstaller(final Function<String, Bundle> installer) {
+        this.installer = installer;
+    }
+
     public BundleRegistry getRegistry() {
         return registry;
     }
@@ -103,12 +110,15 @@
 
     @Override
     public Bundle installBundle(final String location, final InputStream input) throws BundleException {
+        if (installer != null) {
+            return installer.apply(location);
+        }
         throw new BundleException("Unsupported operation");
     }
 
     @Override
     public Bundle installBundle(final String location) throws BundleException {
-        throw new BundleException("Unsupported operation");
+        return installBundle(location, null);
     }
 
     @Override
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/framework/WinegrowerFramework.java b/winegrower-core/src/main/java/org/apache/winegrower/framework/WinegrowerFramework.java
new file mode 100644
index 0000000..32a2279
--- /dev/null
+++ b/winegrower-core/src/main/java/org/apache/winegrower/framework/WinegrowerFramework.java
@@ -0,0 +1,356 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.winegrower.framework;
+
+import org.apache.winegrower.Ripener;
+import org.apache.winegrower.deployer.BundleContextImpl;
+import org.apache.winegrower.deployer.BundleImpl;
+import org.apache.winegrower.deployer.OSGiBundleLifecycle;
+import org.apache.winegrower.scanner.StandaloneScanner;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.framework.Version;
+import org.osgi.framework.launch.Framework;
+import org.osgi.framework.launch.FrameworkFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.cert.X509Certificate;
+import java.time.Clock;
+import java.time.Instant;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collector;
+import java.util.stream.Stream;
+
+import static java.util.Optional.ofNullable;
+
+public class WinegrowerFramework implements Framework {
+    private volatile int state = INSTALLED;
+
+    private final AtomicLong bundleIdGenerator = new AtomicLong(1);
+
+    private Ripener ripener;
+    private Ripener.Configuration configuration = new Ripener.Configuration();
+    private FrameworkListener[] listeners;
+    private BundleImpl frameworkBundle;
+
+    public WinegrowerFramework() {
+        configuration.setLazyInstall(true);
+    }
+
+    public void setConfiguration(final Ripener.Configuration configuration) {
+        this.configuration = configuration;
+        this.configuration.fromProperties(System.getProperties());
+    }
+
+    public void setConfigurationProperties(final Properties configuration) {
+        this.configuration.fromProperties(configuration);
+    }
+
+    @Override
+    public void init() {
+        init(new FrameworkListener[0]);
+    }
+
+    @Override
+    public void init(final FrameworkListener... listeners) {
+        ripener = Ripener.create(configuration);
+        frameworkBundle = ripener.getRegistry().getBundles().get(0L).getBundle();
+        BundleContextImpl.class.cast(getBundleContext()).setInstaller(this::installBundle);
+        this.listeners = listeners;
+        state = INSTALLED;
+        fireFrameworkEvent(null);
+    }
+
+    @Override
+    public FrameworkEvent waitForStop(final long timeout) throws InterruptedException {
+        final Clock clock = Clock.systemUTC();
+        final Instant end = clock.instant().plusMillis(timeout);
+        while (clock.instant().isBefore(end)) {
+            switch (state) {
+                case ACTIVE:
+                case RESOLVED:
+                case INSTALLED:
+                    Thread.sleep(250);
+                default:
+                    break;
+            }
+        }
+        return new FrameworkEvent(state, getFrameworkBundle(), null);
+    }
+
+    @Override
+    public void start() throws BundleException {
+        start(ACTIVE);
+    }
+
+    @Override
+    public int getState() {
+        return state;
+    }
+
+    @Override
+    public void start(final int options) throws BundleException {
+        state = STARTING;
+        fireFrameworkEvent(null);
+        try {
+            ripener.start();
+            state = ACTIVE;
+            fireFrameworkEvent(null);
+        } catch (final RuntimeException re) {
+            state = UNINSTALLED;
+            fireFrameworkEvent(re);
+            throw re;
+        } catch (final Exception e) {
+            state = UNINSTALLED;
+            fireFrameworkEvent(e);
+            throw new BundleException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public void stop() throws BundleException {
+        stop(STOP_TRANSIENT);
+    }
+
+    @Override
+    public void stop(final int options) throws BundleException {
+        state = STOPPING;
+        fireFrameworkEvent(null);
+        try {
+            ripener.stop();
+            state = STOP_TRANSIENT;
+            fireFrameworkEvent(null);
+        } catch (final RuntimeException re) {
+            state = UNINSTALLED;
+            fireFrameworkEvent(re);
+            throw re;
+        } catch (final Exception e) {
+            state = UNINSTALLED;
+            fireFrameworkEvent(e);
+            throw new BundleException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public void uninstall() {
+        state = Framework.UNINSTALLED;
+        final Map<Long, OSGiBundleLifecycle> bundles = ripener.getRegistry().getBundles();
+        bundles.entrySet().stream()
+                .filter(it -> it.getKey() > 0)
+                .forEach(e -> e.getValue().stop());
+        final OSGiBundleLifecycle fwk = bundles.remove(0L);
+        bundles.clear();
+        bundles.put(0L, fwk);
+        fireFrameworkEvent(null);
+    }
+
+    @Override
+    public Dictionary<String, String> getHeaders() {
+        return getHeaders(null);
+    }
+
+    @Override
+    public void update() {
+        // no-op
+    }
+
+    @Override
+    public void update(final InputStream in) {
+        // no-op
+    }
+
+    @Override
+    public long getBundleId() {
+        return 0;
+    }
+
+    @Override
+    public String getLocation() {
+        return "system";
+    }
+
+    @Override
+    public ServiceReference<?>[] getRegisteredServices() {
+        return ripener.getServices().getServices().stream()
+                .map(ServiceRegistration::getReference)
+                .toArray(ServiceReference[]::new);
+    }
+
+    @Override
+    public ServiceReference<?>[] getServicesInUse() {
+        return getRegisteredServices();
+    }
+
+    @Override
+    public boolean hasPermission(final Object permission) {
+        return true;
+    }
+
+    @Override
+    public URL getResource(final String name) {
+        return getFrameworkBundle().getResource(name);
+    }
+
+    @Override
+    public Dictionary<String, String> getHeaders(final String locale) {
+        return getFrameworkBundle().getHeaders(locale);
+    }
+
+    @Override
+    public String getSymbolicName() {
+        return getFrameworkBundle().getSymbolicName();
+    }
+
+    @Override
+    public Class<?> loadClass(final String name) throws ClassNotFoundException {
+        return getFrameworkBundle().loadClass(name);
+    }
+
+    @Override
+    public Enumeration<URL> getResources(final String name) throws IOException {
+        return getFrameworkBundle().getResources(name);
+    }
+
+    @Override
+    public Enumeration<String> getEntryPaths(final String path) {
+        return getFrameworkBundle().getEntryPaths(path);
+    }
+
+    @Override
+    public URL getEntry(final String path) {
+        return getFrameworkBundle().getEntry(path);
+    }
+
+    @Override
+    public long getLastModified() {
+        return getFrameworkBundle().getLastModified();
+    }
+
+    @Override
+    public Enumeration<URL> findEntries(final String path, final String filePattern, final boolean recurse) {
+        return getFrameworkBundle().findEntries(path, filePattern, recurse);
+    }
+
+    @Override
+    public BundleContext getBundleContext() {
+        return getFrameworkBundle().getBundleContext();
+    }
+
+    @Override
+    public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(final int signersType) {
+        return getFrameworkBundle().getSignerCertificates(signersType);
+    }
+
+    @Override
+    public Version getVersion() {
+        return getFrameworkBundle().getVersion();
+    }
+
+    @Override
+    public <A> A adapt(final Class<A> type) {
+        return getFrameworkBundle().adapt(type);
+    }
+
+    @Override
+    public File getDataFile(final String filename) {
+        return getFrameworkBundle().getDataFile(filename);
+    }
+
+    @Override
+    public int compareTo(final Bundle o) {
+        return getFrameworkBundle().compareTo(o);
+    }
+
+    private Bundle installBundle(final String location) {
+        final StandaloneScanner scanner = Ripener.Impl.class.cast(ripener).getScanner();
+        final StandaloneScanner.BundleDefinition bundleDefinition = Stream.concat(
+                scanner.findOSGiBundles().stream(),
+                scanner.findPotentialOSGiBundles().stream())
+                .filter(bundle -> doesLocationMatches(bundle, location))
+                .findFirst()
+                .orElseThrow(() -> new IllegalArgumentException("No bundle found for " + location + ", available:\n\n" +
+                        scanner.findOSGiBundles() + "\n" +
+                        scanner.findPotentialOSGiBundles()));
+        final OSGiBundleLifecycle lifecycle = new OSGiBundleLifecycle(
+                bundleDefinition.getManifest(), bundleDefinition.getJar(),
+                ripener.getServices(), ripener.getRegistry(), configuration,
+                bundleIdGenerator.getAndIncrement(),
+                bundleDefinition.getFiles());
+        lifecycle.start();
+        ripener.getRegistry().getBundles().put(lifecycle.getBundle().getBundleId(), lifecycle);
+        return lifecycle.getBundle();
+    }
+
+    // todo: enhance with mvn:, file:// support
+    private boolean doesLocationMatches(final StandaloneScanner.BundleDefinition bundle, final String location) {
+        if (bundle.getJar() != null) {
+            final boolean direct = location.contains(bundle.getJar().getAbsolutePath());
+            if (direct) {
+                return true;
+            }
+
+            final String normalizedName = location.replace(File.separatorChar, '/');
+            if (!normalizedName.contains("/")) {
+                return bundle.getJar().getName().equals(normalizedName);
+            }
+
+            try {
+                return bundle.getJar().toURI().toURL().toExternalForm().equals(location);
+            } catch (final MalformedURLException e) {
+                return false;
+            }
+        }
+        return false;
+    }
+
+    private BundleImpl getFrameworkBundle() {
+        return frameworkBundle;
+    }
+
+    private void fireFrameworkEvent(final Throwable error) { // todo: shouldn't really be state
+        final FrameworkEvent event = new FrameworkEvent(error != null ? FrameworkEvent.ERROR : state, getFrameworkBundle(), error);
+        ofNullable(listeners).map(Stream::of).orElseGet(Stream::empty).forEach(l -> l.frameworkEvent(event));
+    }
+
+    public static class Factory implements FrameworkFactory {
+        @Override
+        public Framework newFramework(final Map<String, String> configuration) {
+            final WinegrowerFramework framework = new WinegrowerFramework();
+            ofNullable(configuration)
+                    .map(c -> c.entrySet().stream().collect(Collector.of(
+                            Properties::new,
+                            (p, i) -> p.setProperty(i.getKey(), i.getValue()),
+                            (p1, p2) -> {
+                                p1.putAll(p2);
+                                return p1;
+                            })))
+                    .ifPresent(framework.configuration::fromProperties);
+            return framework;
+        }
+    }
+}
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/scanner/StandaloneScanner.java b/winegrower-core/src/main/java/org/apache/winegrower/scanner/StandaloneScanner.java
index 9b3cfb2..eee1829 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/scanner/StandaloneScanner.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/scanner/StandaloneScanner.java
@@ -62,6 +62,9 @@
     private final Map<String, Manifest> providedManifests;
     private final Map<String, List<String>> providedIndex;
 
+    private List<BundleDefinition> potentialBundles;
+    private List<BundleDefinition> bundles;
+
     public StandaloneScanner(final Ripener.Configuration configuration, final File frameworkJar) {
         this.configuration = configuration;
         this.frameworkJar = frameworkJar;
@@ -152,8 +155,11 @@
     }
 
     public Collection<BundleDefinition> findPotentialOSGiBundles() {
+        if (potentialBundles != null) {
+            return potentialBundles;
+        }
         final KnownJarsFilter filter = new KnownJarsFilter(configuration);
-        return urls.stream()
+        return potentialBundles = urls.stream()
               .map(it -> new FileAndUrl(Files.toFile(it), it))
               .filter(it -> !it.file.getAbsoluteFile().equals(frameworkJar))
               .filter(it -> filter.test(it.file.getName()))
@@ -179,7 +185,10 @@
     }
 
     public Collection<BundleDefinition> findOSGiBundles() {
-        return Stream.concat(
+        if (bundles != null) {
+            return bundles;
+        }
+        return bundles = Stream.concat(
                     urls.stream()
                         .map(Files::toFile)
                         .filter(this::isIncluded)
@@ -265,6 +274,13 @@
         public File getJar() {
             return jar;
         }
+
+        @Override
+        public String toString() {
+            return "BundleDefinition{" +
+                    "jar=" + jar +
+                    '}';
+        }
     }
 
     private static class FileAndUrl {
diff --git a/winegrower-core/src/test/java/org/apache/winegrower/framework/WinegrowerFrameworkTest.java b/winegrower-core/src/test/java/org/apache/winegrower/framework/WinegrowerFrameworkTest.java
new file mode 100644
index 0000000..b302d2d
--- /dev/null
+++ b/winegrower-core/src/test/java/org/apache/winegrower/framework/WinegrowerFrameworkTest.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.winegrower.framework;
+
+import org.junit.jupiter.api.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.launch.Framework;
+
+import java.util.Properties;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class WinegrowerFrameworkTest {
+    @Test
+    public void run() throws BundleException {
+        final Framework framework = new WinegrowerFramework();
+        { // let this specific API not be exposed in the other parts of the test
+            WinegrowerFramework.class.cast(framework).setConfigurationProperties(new Properties() {{
+                setProperty("winegrower.ripener.configuration.scanningExcludes", "test-classes");
+            }});
+        }
+        assertEquals(Framework.INSTALLED, framework.getState());
+        framework.init();
+        assertEquals(Framework.INSTALLED, framework.getState());
+        framework.start();
+        assertEquals(Framework.ACTIVE, framework.getState());
+        final Bundle[] bundles = framework.getBundleContext().getBundles();
+        assertEquals(1, bundles.length);
+        framework.getBundleContext().installBundle("org.apache.aries.cdi.extra-1.1.0.jar");
+        assertEquals(2, framework.getBundleContext().getBundles().length);
+        framework.stop();
+        assertEquals(Framework.STOP_TRANSIENT, framework.getState());
+    }
+}
diff --git a/winegrower-documentation/pom.xml b/winegrower-documentation/pom.xml
index d4c81e2..61c97cd 100644
--- a/winegrower-documentation/pom.xml
+++ b/winegrower-documentation/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>winegrower</artifactId>
     <groupId>org.apache.winegrower</groupId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-examples/bundle/pom.xml b/winegrower-examples/bundle/pom.xml
index d9365ee..92168a2 100644
--- a/winegrower-examples/bundle/pom.xml
+++ b/winegrower-examples/bundle/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.examples</groupId>
     <artifactId>winegrower-examples</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-examples/config/pom.xml b/winegrower-examples/config/pom.xml
index c8f4b15..f7711ab 100644
--- a/winegrower-examples/config/pom.xml
+++ b/winegrower-examples/config/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.examples</groupId>
     <artifactId>winegrower-examples</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-examples/http/pom.xml b/winegrower-examples/http/pom.xml
index 5fccd7d..6e0ba6b 100644
--- a/winegrower-examples/http/pom.xml
+++ b/winegrower-examples/http/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.examples</groupId>
     <artifactId>winegrower-examples</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-examples/jaxrs-whiteboard/pom.xml b/winegrower-examples/jaxrs-whiteboard/pom.xml
index 85d56ea..9f5b1e2 100644
--- a/winegrower-examples/jaxrs-whiteboard/pom.xml
+++ b/winegrower-examples/jaxrs-whiteboard/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.examples</groupId>
     <artifactId>winegrower-examples</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-examples/jaxrs/pom.xml b/winegrower-examples/jaxrs/pom.xml
index 741fb92..7be7ca5 100644
--- a/winegrower-examples/jaxrs/pom.xml
+++ b/winegrower-examples/jaxrs/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.winegrower.examples</groupId>
     <artifactId>winegrower-examples</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-examples/osgi-cdi/pom.xml b/winegrower-examples/osgi-cdi/pom.xml
index 4a4280e..311d8d6 100644
--- a/winegrower-examples/osgi-cdi/pom.xml
+++ b/winegrower-examples/osgi-cdi/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.examples</groupId>
     <artifactId>winegrower-examples</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-examples/pom.xml b/winegrower-examples/pom.xml
index 81fc385..4922cad 100644
--- a/winegrower-examples/pom.xml
+++ b/winegrower-examples/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-examples/shell/pom.xml b/winegrower-examples/shell/pom.xml
index b41becc..10481d0 100644
--- a/winegrower-examples/shell/pom.xml
+++ b/winegrower-examples/shell/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.examples</groupId>
     <artifactId>winegrower-examples</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-examples/simple/pom.xml b/winegrower-examples/simple/pom.xml
index f1f7e43..fdee0b8 100644
--- a/winegrower-examples/simple/pom.xml
+++ b/winegrower-examples/simple/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower.examples</groupId>
     <artifactId>winegrower-examples</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
diff --git a/winegrower-extension/pom.xml b/winegrower-extension/pom.xml
index f86e33f..7af5796 100644
--- a/winegrower-extension/pom.xml
+++ b/winegrower-extension/pom.xml
@@ -15,14 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>winegrower-extension</artifactId>
diff --git a/winegrower-extension/winegrower-agent/pom.xml b/winegrower-extension/winegrower-agent/pom.xml
index c7cf1c5..a53c441 100644
--- a/winegrower-extension/winegrower-agent/pom.xml
+++ b/winegrower-extension/winegrower-agent/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower-extension</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-extension/winegrower-build/pom.xml b/winegrower-extension/winegrower-build/pom.xml
index 15d689f..51263a7 100644
--- a/winegrower-extension/winegrower-build/pom.xml
+++ b/winegrower-extension/winegrower-build/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower-extension</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-extension/winegrower-build/winegrower-build-common/pom.xml b/winegrower-extension/winegrower-build/winegrower-build-common/pom.xml
index 113e1ec..a92ddee 100644
--- a/winegrower-extension/winegrower-build/winegrower-build-common/pom.xml
+++ b/winegrower-extension/winegrower-build/winegrower-build-common/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower-build</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-extension/winegrower-build/winegrower-maven-plugin/pom.xml b/winegrower-extension/winegrower-build/winegrower-maven-plugin/pom.xml
index bf0d71c..bb8e70f 100644
--- a/winegrower-extension/winegrower-build/winegrower-maven-plugin/pom.xml
+++ b/winegrower-extension/winegrower-build/winegrower-maven-plugin/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower-build</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-extension/winegrower-cdi/pom.xml b/winegrower-extension/winegrower-cdi/pom.xml
index d6129ec..793a6f8 100644
--- a/winegrower-extension/winegrower-cdi/pom.xml
+++ b/winegrower-extension/winegrower-cdi/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower-extension</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-extension/winegrower-servlet/pom.xml b/winegrower-extension/winegrower-servlet/pom.xml
index 0cdc524..7c1efe5 100644
--- a/winegrower-extension/winegrower-servlet/pom.xml
+++ b/winegrower-extension/winegrower-servlet/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower-extension</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-extension/winegrower-testing/pom.xml b/winegrower-extension/winegrower-testing/pom.xml
index d9e7647..a1b522d 100644
--- a/winegrower-extension/winegrower-testing/pom.xml
+++ b/winegrower-extension/winegrower-testing/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower-extension</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/winegrower-extension/winegrower-testing/winegrower-testing-junit5/pom.xml b/winegrower-extension/winegrower-testing/winegrower-testing-junit5/pom.xml
index b5ed698..3c135ff 100644
--- a/winegrower-extension/winegrower-testing/winegrower-testing-junit5/pom.xml
+++ b/winegrower-extension/winegrower-testing/winegrower-testing-junit5/pom.xml
@@ -15,11 +15,11 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <groupId>org.apache.winegrower</groupId>
     <artifactId>winegrower-testing</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>1.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
