diff --git a/lib/log.php b/lib/log.php
index 231ff7997b10b9d74d0a18fa4687a8df97b82d2c..f5651514108205c823953d57828eb052d5649879 100644
--- a/lib/log.php
+++ b/lib/log.php
@@ -50,8 +50,9 @@ class OC_LOG {
 	 *
 	 * This function adds another entry to the log database
 	 */
-	public static function add( $appid, $subject, $predicate, $object = null ){
-		// TODO: write function
+	public static function add( $appid, $subject, $predicate, $object = ' ' ){
+		$query=OC_DB::prepare("INSERT INTO *PREFIX*log(`timestamp`,appid,user,action,info) VALUES(NOW(),?,?,?,?)");
+		$query->execute(array($appid,$subject,$predicate,$object));
 		return true;
 	}
 
@@ -71,8 +72,27 @@ class OC_LOG {
 	 *   - app: only entries for this app
 	 */
 	public static function get( $filter = array()){
-		// TODO: write function
-		return array();
+		$queryString='SELECT * FROM *PREFIX*log WHERE 1=1 ';
+		$params=array();
+		if(isset($filter['from'])){
+			$queryString.='AND `timestamp`>? ';
+			array_push($params,$filter('from'));
+		}
+		if(isset($filter['until'])){
+			$queryString.='AND `timestamp`<? ';
+			array_push($params,$filter('until'));
+		}
+		if(isset($filter['user'])){
+			$queryString.='AND user=? ';
+			array_push($params,$filter('user'));
+		}
+		if(isset($filter['app'])){
+			$queryString.='AND appid=? ';
+			array_push($params,$filter('app'));
+		}
+		$query=OC_DB::prepare($queryString);
+		return $query->execute($params)->fetchAll();
+		
 	}
 
 	/**
@@ -83,9 +103,26 @@ class OC_LOG {
 	 * This function deletes all entries that are older than $date.
 	 */
 	public static function deleteBefore( $date ){
-		// TODO: write function
+		$query=OC_DB::prepare("DELETE FROM *PREFIX*log WHERE `timestamp`<?");
+		$query->execute(array($date));
 		return true;
 	}
+	
+	/**
+	 * @brief filter an array of log entries on action
+	 * @param array $logs the log entries to filter
+	 * @param array $actions an array of actions to filter for
+	 * @returns array
+	 */
+	public static function filterAction($logs,$actions){
+		$filteredLogs=array();
+		foreach($logs as $log){
+			if(array_search($log['action'],$actions)!==false){
+				$filteredLogs[]=$log;
+			}
+		}
+		return $filteredLogs;
+	}
 }