diff --git a/assembly/src/main/resources/hazelcast.xml b/assembly/src/main/resources/hazelcast.xml
index f1b2fae..43634e1 100644
--- a/assembly/src/main/resources/hazelcast.xml
+++ b/assembly/src/main/resources/hazelcast.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<hz:hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.5.xsd"
+<hz:hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.6.xsd"
            xmlns:hz="http://www.hazelcast.com/schema/config"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <hz:group>
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java
index f4ccc63..ec87ed9 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/management/internal/CellarBundleMBeanImpl.java
@@ -516,14 +516,14 @@
                             bundles.add(bundle);
                         } else {
                             // no match on bundle name, fall back to symbolic name and check if it matches the regex
-                            matcher = namePattern.matcher(name);
+                            matcher = namePattern.matcher(bundleSplit[0]);
                             if (matcher.find()) {
                                 bundles.add(bundle);
                             }
                         }
                     } else {
                         // no bundle name, fall back to symbolic name and check if it matches the regex
-                        matcher = namePattern.matcher(name);
+                        matcher = namePattern.matcher(bundleSplit[0]);
                         if (matcher.find()) {
                             bundles.add(bundle);
                         }
diff --git a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
index 06182ac..caf6e65 100644
--- a/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
+++ b/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/BundleCommandSupport.java
@@ -122,14 +122,14 @@
                             bundles.add(bundle);
                         } else {
                             // no match on bundle name, fall back to symbolic name and check if it matches the regex
-                            matcher = namePattern.matcher(name);
+                            matcher = namePattern.matcher(bundleSplit[0]);
                             if (matcher.find()) {
                                 bundles.add(bundle);
                             }
                         }
                     } else {
                         // no bundle name, fall back to symbolic name and check if it matches the regex
-                        matcher = namePattern.matcher(name);
+                        matcher = namePattern.matcher(bundleSplit[0]);
                         if (matcher.find()) {
                             bundles.add(bundle);
                         }
diff --git a/core/src/main/java/org/apache/karaf/cellar/core/discovery/Discovery.java b/core/src/main/java/org/apache/karaf/cellar/core/discovery/Discovery.java
index ce16744..95c6040 100644
--- a/core/src/main/java/org/apache/karaf/cellar/core/discovery/Discovery.java
+++ b/core/src/main/java/org/apache/karaf/cellar/core/discovery/Discovery.java
@@ -19,7 +19,6 @@
 public class Discovery {
 
     public static final String PID = "org.apache.karaf.cellar.discovery";
-    public static final String MEMBERS_PROPERTY_NAME = "tcpIpMembers";
     public static final String DISCOVERED_MEMBERS_PROPERTY_NAME = "discoveredMembers";
 
     public static final String INTERVAL = "interval";
diff --git a/core/src/main/java/org/apache/karaf/cellar/core/discovery/DiscoveryTask.java b/core/src/main/java/org/apache/karaf/cellar/core/discovery/DiscoveryTask.java
index c3f0b41..b50cc6e 100644
--- a/core/src/main/java/org/apache/karaf/cellar/core/discovery/DiscoveryTask.java
+++ b/core/src/main/java/org/apache/karaf/cellar/core/discovery/DiscoveryTask.java
@@ -70,7 +70,7 @@
                     	properties = new Hashtable();
                     }
                     String newMemberText = CellarUtils.createStringFromSet(members, true);
-                    String memberText = (String) properties.get(Discovery.MEMBERS_PROPERTY_NAME);
+                    String memberText = (String) properties.get(Discovery.DISCOVERED_MEMBERS_PROPERTY_NAME);
                     if (newMemberText != null && newMemberText.length() > 0 && !newMemberText.equals(memberText)) {
                         properties.put(Discovery.DISCOVERED_MEMBERS_PROPERTY_NAME, newMemberText);
                         LOGGER.trace("CELLAR DISCOVERY: adding a new member {} to configuration and updating it", newMemberText);
diff --git a/features/pom.xml b/features/pom.xml
index 10513eb..fba0212 100644
--- a/features/pom.xml
+++ b/features/pom.xml
@@ -115,8 +115,11 @@
                             *
                         </Import-Package>
                         <Private-Package>
+                            org.apache.karaf.features.internal.model,
                             org.apache.karaf.cellar.features.management.internal,
                             org.apache.karaf.cellar.features.internal.osgi,
+                            org.apache.felix.utils.version,
+                            org.apache.karaf.util,
                             org.apache.karaf.util.tracker;-split-package:=merge-first
                         </Private-Package>
                     </instructions>
diff --git a/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java b/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java
index 7af4e04..a4d4574 100644
--- a/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java
+++ b/features/src/main/java/org/apache/karaf/cellar/features/management/internal/CellarFeaturesMBeanImpl.java
@@ -26,6 +26,8 @@
 import org.apache.karaf.cellar.features.management.CellarFeaturesMBean;
 import org.apache.karaf.features.*;
 // import org.osgi.framework.BundleEvent;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.osgi.service.cm.ConfigurationAdmin;
 
 import javax.management.NotCompliantMBeanException;
@@ -438,39 +440,14 @@
                 }
             }
             if (name == null) {
-                // update the repository temporary locally
-                Repository repository = null;
-                boolean localRegistered = false;
-                // local lookup
-                for (Repository registeredRepository : featuresService.listRepositories()) {
-                    if (registeredRepository.getURI().equals(uri)) {
-                        repository = registeredRepository;
-                        break;
-                    }
-                }
-                if (repository == null) {
-                    // registered locally
-                    try {
-                        featuresService.addRepository(uri);
-                    } catch (Exception e) {
-                        throw new IllegalArgumentException("Features repository URL " + uri + " is not valid: " + e.getMessage());
-                    }
-                    // get the repository
-                    for (Repository registeredRepository : featuresService.listRepositories()) {
-                        if (registeredRepository.getURI().equals(uri)) {
-                            repository = registeredRepository;
-                            break;
-                        }
-                    }
-                    name = repository.getName();
-                } else {
-                    localRegistered = true;
-                }
+                // parsing the features repository to get content
+                Features repository = JaxbUtil.unmarshal(uri.toASCIIString(), true);
 
                 // update the cluster group
                 clusterRepositories.put(uri.toString(), name);
 
-                for (Feature feature : repository.getFeatures()) {
+                // update the features in the cluster group
+                for (Feature feature : repository.getFeature()) {
                     FeatureState state = new FeatureState();
                     state.setName(feature.getName());
                     state.setVersion(feature.getVersion());
@@ -478,10 +455,6 @@
                     clusterFeatures.put(feature.getName() + "/" + feature.getVersion(), state);
                 }
 
-                // un-register the repository if it's not local registered
-                if (!localRegistered)
-                    featuresService.removeRepository(uri);
-
                 // broadcast the cluster event
                 ClusterRepositoryEvent event = new ClusterRepositoryEvent(uri.toString(), RepositoryEvent.EventType.RepositoryAdded);
                 event.setInstall(install);
@@ -549,58 +522,31 @@
 
             for (String url : urls) {
                 // looking for the URL in the list
-                String name = null;
-                for (String clusterRepository : clusterRepositories.keySet()) {
-                    if (clusterRepository.equals(url)) {
-                        name = clusterRepositories.get(clusterRepository);
+                boolean found = false;
+                for (String repository : clusterRepositories.keySet()) {
+                    if (repository.equals(repository)) {
+                        found = true;
                         break;
                     }
                 }
-                if (name == null) {
-                    // update the repository temporary locally
-                    Repository repository = null;
-                    boolean localRegistered = false;
-                    // local lookup
-                    for (Repository registeredRepository : featuresService.listRepositories()) {
-                        if (registeredRepository.getURI().equals(new URI(url))) {
-                            repository = registeredRepository;
-                            break;
-                        }
-                    }
-                    if (repository == null) {
-                        // registered locally
-                        try {
-                            featuresService.addRepository(new URI(url));
-                        } catch (Exception e) {
-                            throw new IllegalArgumentException("Features repository URL " + url + " is not valid: " + e.getMessage());
-                        }
-                        // get the repository
-                        for (Repository registeredRepository : featuresService.listRepositories()) {
-                            if (registeredRepository.getURI().equals(new URI(url))) {
-                                repository = registeredRepository;
-                                break;
-                            }
-                        }
-                    } else {
-                        localRegistered = true;
-                    }
+                if (found) {
+                    Features repositoryModel = JaxbUtil.unmarshal(url, true);
 
-                    // update the cluster group
+                    // update the features repositories in the cluster group
                     clusterRepositories.remove(url);
 
-                    for (Feature feature : repository.getFeatures()) {
+                    // update the features in the cluster group
+                    for (Feature feature : repositoryModel.getFeature()) {
                         clusterFeatures.remove(feature.getName() + "/" + feature.getVersion());
                     }
 
-                    // un-register the repository if it's not local registered
-                    if (!localRegistered)
-                        featuresService.removeRepository(new URI(url));
-
                     // broadcast a cluster event
-                    ClusterRepositoryEvent event = new ClusterRepositoryEvent(repo, RepositoryEvent.EventType.RepositoryRemoved);
+                    ClusterRepositoryEvent event = new ClusterRepositoryEvent(url, RepositoryEvent.EventType.RepositoryRemoved);
                     event.setUninstall(uninstall);
                     event.setSourceGroup(group);
                     eventProducer.produce(event);
+                } else {
+                    throw new IllegalArgumentException("Features repository URL " + url + " not found in cluster group " + groupName);
                 }
             }
         } finally {
diff --git a/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java
index b00a111..549e887 100644
--- a/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java
+++ b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoAddCommand.java
@@ -27,6 +27,8 @@
 import org.apache.karaf.features.Repository;
 import org.apache.karaf.features.RepositoryEvent;
 import org.apache.karaf.features.command.completers.AvailableRepoNameCompleter;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Completion;
@@ -97,41 +99,16 @@
                     break;
                 }
             }
+
             if (name == null) {
-                // update the repository temporary locally
-                Repository repository = null;
-                boolean localRegistered = false;
-                // local lookup
-                for (Repository registeredRepository : featuresService.listRepositories()) {
-                    if (registeredRepository.getURI().equals(uri)) {
-                        repository = registeredRepository;
-                        break;
-                    }
-                }
-                if (repository == null) {
-                    // registered locally
-                    try {
-                        featuresService.addRepository(uri);
-                    } catch (Exception e) {
-                        System.err.println("Repository URL " + uri + " is not valid: " + e.getMessage());
-                        return null;
-                    }
-                    // get the repository
-                    for (Repository registeredRepository : featuresService.listRepositories()) {
-                        if (registeredRepository.getURI().equals(uri)) {
-                            repository = registeredRepository;
-                            break;
-                        }
-                    }
-                } else {
-                    localRegistered = true;
-                }
+                // parsing the features repository to get content
+                Features repository = JaxbUtil.unmarshal(uri.toASCIIString(), true);
 
                 // update the features repositories in the cluster group
                 clusterRepositories.put(uri.toString(), repository.getName());
 
                 // update the features in the cluster group
-                for (Feature feature : repository.getFeatures()) {
+                for (Feature feature : repository.getFeature()) {
                     FeatureState featureState = new FeatureState();
                     featureState.setName(feature.getName());
                     featureState.setVersion(feature.getVersion());
@@ -139,10 +116,6 @@
                     clusterFeatures.put(feature.getName() + "/" + feature.getVersion(), featureState);
                 }
 
-                // un-register the repository if it's not local registered
-                if (!localRegistered)
-                    featuresService.removeRepository(uri);
-
                 // broadcast the cluster event
                 ClusterRepositoryEvent event = new ClusterRepositoryEvent(uri.toString(), RepositoryEvent.EventType.RepositoryAdded);
                 event.setInstall(install);
diff --git a/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java
index df03c29..65bd6df 100644
--- a/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java
+++ b/features/src/main/java/org/apache/karaf/cellar/features/shell/RepoRemoveCommand.java
@@ -27,6 +27,8 @@
 import org.apache.karaf.features.Repository;
 import org.apache.karaf.features.RepositoryEvent;
 import org.apache.karaf.features.command.completers.InstalledRepoNameCompleter;
+import org.apache.karaf.features.internal.model.Features;
+import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Completion;
@@ -121,47 +123,16 @@
                     }
                 }
                 if (found) {
-                    // update the repository temporary locally
-                    Repository repository = null;
-                    boolean localRegistered = false;
-                    // local lookup
-                    for (Repository registeredRepository : featuresService.listRepositories()) {
-                        if (registeredRepository.getURI().equals(new URI(url))) {
-                            repository = registeredRepository;
-                            break;
-                        }
-                    }
-                    if (repository == null) {
-                        // registered locally
-                        try {
-                            featuresService.addRepository(new URI(url));
-                        } catch (Exception e) {
-                            System.err.println("Repository URL " + url + " is not valid: " + e.getMessage());
-                            continue;
-                        }
-                        // get the repository
-                        for (Repository registeredRepository : featuresService.listRepositories()) {
-                            if (registeredRepository.getURI().equals(new URI(url))) {
-                                repository = registeredRepository;
-                                break;
-                            }
-                        }
-                    } else {
-                        localRegistered = true;
-                    }
+                    Features repositoryModel = JaxbUtil.unmarshal(url, true);
 
                     // update the features repositories in the cluster group
                     clusterRepositories.remove(url);
 
                     // update the features in the cluster group
-                    for (Feature feature : repository.getFeatures()) {
+                    for (Feature feature : repositoryModel.getFeature()) {
                         clusterFeatures.remove(feature.getName() + "/" + feature.getVersion());
                     }
 
-                    // un-register the repository if it's not local registered
-                    if (!localRegistered)
-                        featuresService.removeRepository(new URI(url));
-
                     // broadcast a cluster event
                     ClusterRepositoryEvent event = new ClusterRepositoryEvent(url, RepositoryEvent.EventType.RepositoryRemoved);
                     event.setUninstall(uninstall);
diff --git a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/management/internal/CellarNodeMBeanImpl.java b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/management/internal/CellarNodeMBeanImpl.java
index 75d4862..4a4260a 100644
--- a/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/management/internal/CellarNodeMBeanImpl.java
+++ b/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/management/internal/CellarNodeMBeanImpl.java
@@ -81,7 +81,7 @@
         Set<Node> nodes = clusterManager.listNodes();
 
         for (Node node : nodes) {
-            boolean local = (nodes.equals(clusterManager.getNode()));
+            boolean local = (node.equals(clusterManager.getNode()));
             CompositeData data = new CompositeDataSupport(nodeType,
                     new String[]{ "id", "hostname", "port", "local" },
                     new Object[]{ node.getId(), node.getHost(), node.getPort(), local });
diff --git a/hazelcast/src/test/resources/etc/hazelcast.xml b/hazelcast/src/test/resources/etc/hazelcast.xml
index 9aaa40e..2e347ec 100644
--- a/hazelcast/src/test/resources/etc/hazelcast.xml
+++ b/hazelcast/src/test/resources/etc/hazelcast.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<hz:hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.5.xsd"
+<hz:hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.6.xsd"
            xmlns:hz="http://www.hazelcast.com/schema/config"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
diff --git a/manual/pom.xml b/manual/pom.xml
index 1b883db..ddb5045 100644
--- a/manual/pom.xml
+++ b/manual/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.karaf</groupId>
         <artifactId>cellar</artifactId>
-        <version>4.0.0-SNAPSHOT</version>
+        <version>4.0.1-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/pom.xml b/pom.xml
index f51c52e..5b3bd1b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,7 @@
         <felix.bundlerepository.version>2.0.6</felix.bundlerepository.version>
         <felix.utils.version>1.8.0</felix.utils.version>
         <felix.webconsole.version>4.2.14</felix.webconsole.version>
-        <hazelcast.version>3.5.4</hazelcast.version>
+        <hazelcast.version>3.6.3</hazelcast.version>
         <jclouds.version>1.9.1</jclouds.version>
         <joda-time.version>2.9.1</joda-time.version>
         <junit.version>4.11</junit.version>
