diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 0b799060f98edb8389faa7415ca4fbe2078da55a..a6981b466a70d38fb41a19abb0938cea956bb5b6 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -4,7 +4,9 @@
 This is the development version of mwclient.
 
 *Dropped support for Python 2.4–2.5 and MediaWiki 1.11–1.15.
-This version requires minimum Python 2.6 and MediaWiki 1.16.*
+This version requires minimum Python 2.6 and MediaWiki 1.16.
+Compability methods for working with MediaWiki < 1.16 have been
+removed.*
 
 * [2012-08-30] [@btongminh](https://github.com/btongminh):
   Allow setting both the upload description and the page content separately.
diff --git a/mwclient/errors.py b/mwclient/errors.py
index 27afffcd4c33a98d90a2d51a2f570bf5e2fd1ed9..6540c2d73e2d69da9c16f5c4c4845da517e14124 100644
--- a/mwclient/errors.py
+++ b/mwclient/errors.py
@@ -52,3 +52,7 @@ class EmailError(MwClientError):
 
 class NoSpecifiedEmail(EmailError):
     pass
+
+
+class NoWriteApi(MwClientError):
+    pass
diff --git a/mwclient/page.py b/mwclient/page.py
index fb951644fe7e8ca95bec5b406c733c773c4554d2..e7995ec32b4ee14d2bac1ef2297c3531838cf966 100644
--- a/mwclient/page.py
+++ b/mwclient/page.py
@@ -1,7 +1,6 @@
 import client
 import errors
 import listing
-from page_nowriteapi import OldPage
 
 import urllib
 import urlparse
@@ -171,7 +170,7 @@ class Page(object):
             section = self.section
 
         if not self.site.writeapi:
-            return OldPage.save(self, text=text, summary=summary, minor=False)
+            raise errors.NoWriteApi(self)
 
         data = {}
         if minor:
@@ -246,8 +245,7 @@ class Page(object):
             raise errors.InsufficientPermission(self)
 
         if not self.site.writeapi:
-            return OldPage.move(self, new_title=new_title,
-                                reason=reason, move_talk=move_talk)
+            raise errors.NoWriteApi(self)
 
         data = {}
         if move_talk:
@@ -269,7 +267,7 @@ class Page(object):
             raise errors.InsufficientPermission(self)
 
         if not self.site.writeapi:
-            return OldPage.delete(self, reason=reason)
+            raise errors.NoWriteApi(self)
 
         data = {}
         if watch:
diff --git a/mwclient/page_nowriteapi.py b/mwclient/page_nowriteapi.py
deleted file mode 100644
index d6f68cdb7a0cc7c896bd399e3ac526b1fb9a75ef..0000000000000000000000000000000000000000
--- a/mwclient/page_nowriteapi.py
+++ /dev/null
@@ -1,133 +0,0 @@
-import time
-from HTMLParser import HTMLParser
-from htmlentitydefs import name2codepoint
-
-import errors
-
-
-class OldPage(object):
-
-    @staticmethod
-    def save(self, text=u'', summary=u'', minor=False):
-        data = {}
-        data['wpTextbox1'] = text
-        data['wpSummary'] = summary
-        data['wpSave'] = 'Save page'
-        data['wpEditToken'] = self.get_token('edit')
-        if self.last_rev_time:
-            data['wpEdittime'] = time.strftime('%Y%m%d%H%M%S', self.last_rev_time)
-        else:
-            data['wpEdittime'] = time.strftime('%Y%m%d%H%M%S', time.gmtime())
-        if self.edit_time:
-            data['wpStarttime'] = time.strftime('%Y%m%d%H%M%S', self.edit_time)
-        else:
-            data['wpStarttime'] = time.strftime('%Y%m%d%H%M%S', time.gmtime())
-        data['wpStarttime'] = time.strftime('%Y%m%d%H%M%S', time.gmtime())
-
-        if minor:
-            data['wpMinoredit'] = '1'
-        data['title'] = self.name
-
-        page_data = self.site.raw_index('submit', **data)
-
-        page = EditPage('editform')
-        page.feed(page_data)
-        page.close()
-
-        if page.data:
-            if page.readonly:
-                raise errors.ProtectedPageError(self)
-            self.get_token('edit', True)
-            raise errors.EditError(page.title, data)
-
-    @staticmethod
-    def move(self, new_title, reason='', move_talk=True):
-        postdata = {'wpNewTitle': new_title,
-                    'wpOldTitle': self.name,
-                    'wpReason': reason,
-                    'wpMove': '1',
-                    'wpEditToken': self.get_token('move')}
-        if move_talk:
-            postdata['wpMovetalk'] = '1'
-        postdata['title'] = 'Special:Movepage'
-
-        page_data = self.site.raw_index('submit', **data)
-
-        page = EditPage('movepage')
-        page.feed(page_data.decode('utf-8', 'ignore'))
-        page.close()
-
-        if 'wpEditToken' in page.data:
-            raise errors.EditError(page.title, postdata)
-
-    @staticmethod
-    def delete(self, reason=''):
-        postdata = {'wpReason': reason,
-                    'wpConfirmB': 'Delete',
-                    'mw-filedelete-submit': 'Delete',
-                    'wpEditToken': self.get_token('delete'),
-                    'title': self.name}
-
-        page_data = self.site.raw_index('delete', **postdata)
-
-
-class EditPage(HTMLParser):
-
-    def __init__(self, form):
-        HTMLParser.__init__(self)
-
-        self.form = form
-
-        self.in_form = False
-        self.in_text = False
-        self.in_title = False
-
-        self.data = {}
-        self.textdata = []
-        self.title = u''
-
-        self.readonly = True
-
-    def handle_starttag(self, tag, attrs):
-        self.in_title = (tag == 'title')
-
-        if (u'id', self.form) in attrs:
-            attrs = dict(attrs)
-            self.in_form = True
-            self.action = attrs['action']
-
-        if tag == 'input' and self.in_form and (u'type', u'submit') \
-                not in attrs and (u'type', u'checkbox') not in attrs:
-            attrs = dict(attrs)
-            if u'name' in attrs:
-                self.data[attrs[u'name']] = attrs.get(u'value', u'')
-
-        if self.in_form and tag == 'textarea':
-            self.in_text = True
-            self.readonly = (u'readonly', u'readonly') in attrs
-
-    def handle_endtag(self, tag):
-        if self.in_title and tag == 'title':
-            self.in_title = False
-        if self.in_form and tag == 'form':
-            self.in_form = False
-        if self.in_text and tag == 'textarea':
-            self.in_text = False
-
-    def handle_data(self, data):
-        if self.in_text:
-            self.textdata.append(data)
-        if self.in_title:
-            self.title += data
-
-    def handle_entityref(self, name):
-        if name in name2codepoint:
-            self.handle_data(unichr(name2codepoint[name]))
-        else:
-            self.handle_data(u'&%s;' % name)
-
-    def handle_charref(self, name):
-        try:
-            self.handle_data(unichr(int(name)))
-        except ValueError:
-            self.handle_data(u'&#$s;' % name)