diff --git a/trac/trac/wiki/model.py b/trac/trac/wiki/model.py
index fe2b0bf..c6ed03b 100644
--- a/trac/trac/wiki/model.py
+++ b/trac/trac/wiki/model.py
@@ -57,12 +57,12 @@ class WikiPage(object):
         if version is not None:
             cursor.execute("SELECT version,time,author,text,comment,readonly "
                            "FROM wiki "
-                           "WHERE name=%s AND version=%s",
+                           "WHERE name=%s AND version=%s AND deleted IS NULL",
                            (name, int(version)))
         else:
             cursor.execute("SELECT version,time,author,text,comment,readonly "
                            "FROM wiki "
-                           "WHERE name=%s ORDER BY version DESC LIMIT 1",
+                           "WHERE name=%s AND deleted IS NULL ORDER BY version DESC LIMIT 1",
                            (name,))
         row = cursor.fetchone()
         if row:
@@ -89,12 +89,12 @@ class WikiPage(object):
             cursor = db.cursor()
             if version is None:
                 # Delete a wiki page completely
-                cursor.execute("DELETE FROM wiki WHERE name=%s", (self.name,))
+                cursor.execute("UPDATE wiki SET deleted=%s WHERE name=%s AND deleted IS NULL", (datetime.now(utc), self.name,))
                 self.env.log.info('Deleted page %s' % self.name)
             else:
                 # Delete only a specific page version
-                cursor.execute("DELETE FROM wiki WHERE name=%s and version=%s",
-                               (self.name, version))
+                cursor.execute("UPDATE wiki SET deleted=%s WHERE name=%s and version=%s AND deleted IS NULL",
+                               (datetime.now(utc), self.name,  version))
                 self.env.log.info('Deleted version %d of page %s'
                                   % (version, self.name))
 
@@ -127,14 +127,17 @@ class WikiPage(object):
         def do_save(db):
             cursor = db.cursor()
             if new_text:
+                cursor.execute("SELECT max(version)+1 FROM wiki WHERE name=%s", (self.name,))
+                (new_version,) = cursor.fetchone()
+
                 cursor.execute("""
                     INSERT INTO wiki (name,version,time,author,ipnr,text,
                                       comment,readonly)
                     VALUES (%s,%s,%s,%s,%s,%s,%s,%s)
-                    """, (self.name, self.version + 1, to_utimestamp(t),
+                    """, (self.name, new_version, to_utimestamp(t),
                           author, remote_addr, self.text, comment,
                           self.readonly))
-                self.version += 1
+                self.version = new_version
                 self.resource = self.resource(version=self.version)
             else:
                 cursor.execute("UPDATE wiki SET readonly=%s WHERE name=%s",
