lifecycle for root bundle and reserse the stop compared to the start
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 45c9276..2d241bc 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
@@ -28,6 +28,7 @@
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.Map;
 import java.util.ServiceLoader;
 import java.util.UUID;
@@ -167,7 +168,9 @@
         public synchronized void stop() {
             LOGGER.info("Stopping Apache Winegrower application on {}", LocalDateTime.now());
             final Map<Long, OSGiBundleLifecycle> bundles = registry.getBundles();
-            bundles.forEach((k, v) -> v.stop());
+            bundles.values().stream()
+                   .sorted((o1, o2) -> (int) (o2.getBundle().getBundleId() - o1.getBundle().getBundleId()))
+                   .forEach(OSGiBundleLifecycle::stop);
             bundles.clear();
             if (configuration.getWorkDir().exists()) {
                 try {
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/service/BundleRegistry.java b/winegrower-core/src/main/java/org/apache/winegrower/service/BundleRegistry.java
index ac35e3a..cdeb85e 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/service/BundleRegistry.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/service/BundleRegistry.java
@@ -39,7 +39,10 @@
         frameworkManifest.getMainAttributes().putValue("Manifest-Version", "1.0");
         frameworkManifest.getMainAttributes().putValue("Bundle-Version", "1.0");
         frameworkManifest.getMainAttributes().putValue("Bundle-SymbolicName", "Ripener");
-        bundles.put(0L, new OSGiBundleLifecycle(frameworkManifest, framework, services, this, configuration, 0L));
+        final OSGiBundleLifecycle frameworkBundle = new OSGiBundleLifecycle(
+                frameworkManifest, framework, services, this, configuration, 0L);
+        frameworkBundle.start();
+        bundles.put(0L, frameworkBundle);
     }
 
     public File getFramework() {
diff --git a/winegrower-core/src/test/java/org/apache/winegrower/RipenerTest.java b/winegrower-core/src/test/java/org/apache/winegrower/RipenerTest.java
index 4121958..096ab4c 100644
--- a/winegrower-core/src/test/java/org/apache/winegrower/RipenerTest.java
+++ b/winegrower-core/src/test/java/org/apache/winegrower/RipenerTest.java
@@ -25,6 +25,7 @@
 import java.io.Writer;
 import java.util.Map;
 
+import org.apache.winegrower.deployer.BundleImpl;
 import org.apache.winegrower.deployer.OSGiBundleLifecycle;
 import org.apache.winegrower.service.BundleActivatorHandler;
 import org.apache.winegrower.test.WithRipener;
@@ -32,12 +33,22 @@
 import org.apache.winegrower.test.WithRipener.Service;
 import org.apache.winegrower.test.simpleactivator.MyActivator;
 import org.junit.jupiter.api.Test;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleActivator;
 
 class RipenerTest {
 
     @Test
     @WithRipener
+    void stopFrameworkBundle(@Service final Ripener ripener) {
+        final BundleImpl bundle = ripener.getRegistry().getBundles().get(0L).getBundle();
+        assertEquals(Bundle.ACTIVE, bundle.getState());
+        ripener.stop();
+        assertEquals(Bundle.UNINSTALLED, bundle.getState());
+    }
+
+    @Test
+    @WithRipener
     void workDir(@Service final Ripener ripener) throws IOException {
         final File workDir = ripener.getConfiguration().getWorkDir();
         assertFalse(workDir.exists());