diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCacheManager.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCacheManager.java
index ff0979d..e62cb9a 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCacheManager.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/control/CompositeCacheManager.java
@@ -736,8 +736,8 @@
                 if ( log.isDebugEnabled() )
                 {
                     log.debug( "Release called, but " + clients + " remain" );
-                    return;
                 }
+                return;
             }
 
             if ( log.isDebugEnabled() )
diff --git a/commons-jcs-core/src/test/java/org/apache/commons/jcs/engine/control/CompositeCacheManagerTest.java b/commons-jcs-core/src/test/java/org/apache/commons/jcs/engine/control/CompositeCacheManagerTest.java
new file mode 100644
index 0000000..49bcd72
--- /dev/null
+++ b/commons-jcs-core/src/test/java/org/apache/commons/jcs/engine/control/CompositeCacheManagerTest.java
@@ -0,0 +1,54 @@
+package org.apache.commons.jcs.engine.control;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ */
+
+import junit.framework.TestCase;
+
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.CompositeCacheAttributes;
+
+/** Unit tests for the composite cache manager */
+public class CompositeCacheManagerTest
+        extends TestCase
+{
+
+    /**
+     * Verify that calling release, when there are active clients, the caches are correctly disposed or not.
+     */
+    public void testRelease()
+    {
+        // See JCS-184
+        // create the manager
+        CompositeCacheManager manager = CompositeCacheManager.getInstance();
+        // add a simple cache
+        CompositeCacheAttributes cacheAttributes = new CompositeCacheAttributes();
+        CompositeCache<String, String> cache = new CompositeCache<String, String>(cacheAttributes, /* attr */ null);
+        manager.addCache("simple_cache", cache);
+        // add a client to the cache
+        CompositeCacheManager.getUnconfiguredInstance();
+        // won't release as there are still clients. Only disposed when release() is called by
+        // the last client
+        manager.release();
+        assertEquals("The cache was disposed during release!", CacheStatus.ALIVE, cache.getStatus());
+        manager.release();
+        assertEquals("The cache was NOT disposed during release!", CacheStatus.DISPOSED, cache.getStatus());
+    }
+
+}
\ No newline at end of file
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 20e237c..800235c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -19,15 +19,23 @@
 		<author email="dev@commons.apache.org">Apache Commons Developers</author>
 	</properties>
 	<body>
+        <release version="2.2.1" date="2017-08-02">
+          <action dev="kinow" type="fix" due-to="athun">
+            Unexpected dispose() in CompositeCacheManager.release()
+          </action>
+          <action issue="JCS-183" dev="rmannibucau" type="fix">
+            JCache CDI Integration is slow
+          </action>
+        </release>
         <release version="2.2" date="2017-08-02">
             <action issue="JCS-180" dev="rmannibucau" type="fix">
                 CacheInvocationContextImpl NPE if method doesnt have any argument
             </action>
             <action issue="JCS-179" dev="tv" type="fix" due-to="Archer">
-                RemoteCacheServerFactory not able to start server 
+                RemoteCacheServerFactory not able to start server
             </action>
             <action issue="JCS-178" dev="tv" type="fix">
-                Clients using RemoteCache are not working. Add a test. 
+                Clients using RemoteCache are not working. Add a test.
             </action>
             <action dev="tv" type="add">
                 Add a shutdown() method to JCS
