Index: program/include/rcube_contacts.php
===================================================================
--- program/include/rcube_contacts.php	(revision cc90ed1f84174a89039feb6906775778e0c4eb18)
+++ program/include/rcube_contacts.php	(revision 7f5a849e7816e7b4c7b13a72d38a9c777632d7cd)
@@ -53,4 +53,5 @@
     public $readonly = false;
     public $groups = true;
+    public $undelete = true;
     public $list_page = 1;
     public $page_size = 10;
@@ -693,10 +694,41 @@
 
     /**
+     * Undelete one or more contact records
+     *
+     * @param array  Record identifiers
+     */
+    function undelete($ids)
+    {
+        if (!is_array($ids))
+            $ids = explode(',', $ids);
+
+        $ids = $this->db->array2list($ids, 'integer');
+
+        // flag record as deleted
+        $this->db->query(
+            "UPDATE ".get_table_name($this->db_name).
+            " SET del=0, changed=".$this->db->now().
+            " WHERE user_id=?".
+                " AND contact_id IN ($ids)",
+            $this->user_id
+        );
+
+        $this->cache = null;
+
+        return $this->db->affected_rows();
+    }
+
+
+    /**
      * Remove all records from the database
      */
     function delete_all()
     {
-        $this->db->query("DELETE FROM ".get_table_name($this->db_name)." WHERE user_id = ?", $this->user_id);
         $this->cache = null;
+
+        $this->db->query("UPDATE ".get_table_name($this->db_name).
+            " SET del=1, changed=".$this->db->now().
+            " WHERE user_id = ?", $this->user_id);
+
         return $this->db->affected_rows();
     }
