diff --git a/lib/Cake/Cache/Engine/MemcacheEngine.php b/lib/Cake/Cache/Engine/MemcacheEngine.php
index 835496b32..4721b0388 100644
--- a/lib/Cake/Cache/Engine/MemcacheEngine.php
+++ b/lib/Cake/Cache/Engine/MemcacheEngine.php
@@ -189,10 +189,32 @@ class MemcacheEngine extends CacheEngine {
 /**
  * Delete all keys from the cache
  *
+ * @param boolean $check
  * @return boolean True if the cache was successfully cleared, false otherwise
  */
 	public function clear($check) {
-		return $this->_Memcache->flush();
+		if ($check) {
+			return true;
+		}
+		foreach ($this->_Memcache->getExtendedStats('slabs') as $slabs) {
+			foreach (array_keys($slabs) as $slabId) {
+				if (!is_numeric($slabId)) {
+					continue;
+				}
+
+				foreach ($this->_Memcache->getExtendedStats('cachedump', $slabId) as $stats) {
+					if (!is_array($stats)) {
+						continue;
+					}
+					foreach (array_keys($stats) as $key) {
+						if (strpos($key, $this->settings['prefix']) === 0) {
+							$this->_Memcache->delete($key);
+						}
+					}
+				}
+			}
+		}
+		return true;
 	}
 
 /**
diff --git a/lib/Cake/Test/Case/Cache/Engine/MemcacheTest.php b/lib/Cake/Test/Case/Cache/Engine/MemcacheTest.php
index cc02f1b0e..09bbac3cb 100644
--- a/lib/Cake/Test/Case/Cache/Engine/MemcacheTest.php
+++ b/lib/Cake/Test/Case/Cache/Engine/MemcacheTest.php
@@ -344,11 +344,24 @@ class MemcacheEngineTest extends CakeTestCase {
  * @return void
  */
 	public function testClear() {
-		Cache::write('some_value', 'value', 'memcache');
+		Cache::config('memcache2', array(
+			'engine' => 'Memcache',
+			'prefix' => 'cake2_',
+			'duration' => 3600
+		));
 
+		Cache::write('some_value', 'cache1', 'memcache');
+		$result = Cache::clear(true, 'memcache');
+		$this->assertTrue($result);
+		$this->assertEquals('cache1', Cache::read('some_value', 'memcache'));
+
+		Cache::write('some_value', 'cache2', 'memcache2');
 		$result = Cache::clear(false, 'memcache');
 		$this->assertTrue($result);
 		$this->assertFalse(Cache::read('some_value', 'memcache'));
+		$this->assertEquals('cache2', Cache::read('some_value', 'memcache2'));
+
+		Cache::clear(false, 'memcache2');
 	}
 /**
  * test that a 0 duration can succesfully write.