starting to handle scope bundle
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 e0ebd9d..c027de5 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
@@ -23,6 +23,8 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Objects;
 import java.util.function.Supplier;
 import java.util.jar.Manifest;
@@ -36,6 +38,7 @@
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.BundleListener;
+import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
 import org.osgi.framework.FrameworkListener;
 import org.osgi.framework.FrameworkUtil;
@@ -53,6 +56,7 @@
     private final BundleRegistry registry;
     private final Collection<BundleListener> bundleListeners = new ArrayList<>();
     private final Collection<FrameworkListener> frameworkListeners = new ArrayList<>();
+    private final Map<ServiceReference<?>, Object> serviceInstances = new HashMap<>();
 
     BundleContextImpl(final Manifest manifest, final OSGiServices services, final Supplier<Bundle> bundleSupplier,
                       final BundleRegistry registry) {
@@ -226,12 +230,20 @@
 
     @Override
     public <S> S getService(final ServiceReference<S> reference) {
-        return (S) ServiceReferenceImpl.class.cast(reference).getReference();
+        final ServiceReferenceImpl ref = ServiceReferenceImpl.class.cast(reference);
+        if (Constants.SCOPE_BUNDLE.equals(ref.getProperty(Constants.SERVICE_SCOPE))) {
+            return (S) serviceInstances.computeIfAbsent(ref, r -> ref.getReference());
+        }
+        return (S) ref.getReference();
     }
 
     @Override
     public boolean ungetService(final ServiceReference<?> reference) {
-        return ServiceReferenceImpl.class.cast(reference).unget();
+        final ServiceReferenceImpl serviceReference = ServiceReferenceImpl.class.cast(reference);
+        if (Constants.SCOPE_BUNDLE.equals(serviceReference.getProperty(Constants.SERVICE_SCOPE))) {
+            return serviceInstances.remove(serviceReference) != null;
+        }
+        return serviceReference.unget();
     }
 
     @Override
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/service/ServiceReferenceImpl.java b/winegrower-core/src/main/java/org/apache/winegrower/service/ServiceReferenceImpl.java
index 22aeddf..21e5953 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/service/ServiceReferenceImpl.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/service/ServiceReferenceImpl.java
@@ -32,8 +32,8 @@
     ServiceReferenceImpl(final Dictionary<String, ?> properties, final Bundle bundle, final Object reference) {
         this.properties = properties;
         this.bundle = bundle;
-        this.reference = reference;
         this.usesFactory = ServiceFactory.class.isInstance(reference);
+        this.reference = reference;
     }
 
     public boolean hasFactory() {