diff --git a/lib/db.php b/lib/db.php
index 74e7ca5b0e0957db219ba60f71a49e528cd1d265..c5908afe69bf5c5e183076f481a980af4f64bf9f 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -41,6 +41,8 @@ class OC_DB {
 	const BACKEND_PDO=0;
 	const BACKEND_MDB2=1;
 
+	static private $preparedQueries = array();
+
 	/**
 	 * @var MDB2_Driver_Common
 	 */
@@ -321,7 +323,12 @@ class OC_DB {
 					$query.=$limitsql;
 				}
 			}
+		} else {
+			if (isset(self::$preparedQueries[$query])) {
+				return self::$preparedQueries[$query];
+			}
 		}
+		$rawQuery = $query;
 
 		// Optimize the query
 		$query = self::processQuery( $query );
@@ -343,6 +350,9 @@ class OC_DB {
 			}
 			$result=new PDOStatementWrapper($result);
 		}
+		if (is_null($limit) || $limit == -1) {
+			self::$preparedQueries[$rawQuery] = $result;
+		}
 		return $result;
 	}