diff --git a/mwclient/image.py b/mwclient/image.py
new file mode 100644
index 0000000000000000000000000000000000000000..8cf176406a63c30f4058fc46c083ac6e42db9c60
--- /dev/null
+++ b/mwclient/image.py
@@ -0,0 +1,37 @@
+import mwclient.listing
+import mwclient.page
+
+
+class Image(mwclient.page.Page):
+
+    def __init__(self, site, name, info=None):
+        mwclient.page.Page.__init__(self, site, name, info,
+                                    extra_properties={'imageinfo': (('iiprop', 'timestamp|user|comment|url|size|sha1|metadata|archivename'), )})
+        self.imagerepository = self._info.get('imagerepository', '')
+        self.imageinfo = self._info.get('imageinfo', ({}, ))[0]
+
+    def imagehistory(self):
+        return mwclient.listing.PageProperty(self, 'imageinfo', 'ii',
+                                             iiprop='timestamp|user|comment|url|size|sha1|metadata|archivename')
+
+    def imageusage(self, namespace=None, filterredir='all', redirect=False,
+                   limit=None, generator=True):
+        prefix = mwclient.listing.List.get_prefix('iu', generator)
+        kwargs = dict(mwclient.listing.List.generate_kwargs(prefix, title=self.name, namespace=namespace, filterredir=filterredir))
+        if redirect:
+            kwargs['%sredirect' % prefix] = '1'
+        return mwclient.listing.List.get_list(generator)(self.site, 'imageusage', 'iu', limit=limit, return_values='title', **kwargs)
+
+    def duplicatefiles(self, limit=None):
+        return mwclient.listing.PageProperty(self, 'duplicatefiles', 'df', dflimit=limit)
+
+    def download(self):
+        url = self.imageinfo['url']
+        if not url.startswith('http://'):
+            url = 'http://' + self.site.host + url
+        url = urllib.parse.urlparse(url)
+        # TODO: query string
+        return self.site.connection.get(url[1], url[2])
+
+    def __repr__(self):
+        return "<Image object '%s' for %s>" % (self.name.encode('utf-8'), self.site)
diff --git a/mwclient/listing.py b/mwclient/listing.py
index 51100f2ccffb1612c3c6a833062e888099303ee1..ce71b9acbd456c6795842f3bc270bb5db6f2508a 100644
--- a/mwclient/listing.py
+++ b/mwclient/listing.py
@@ -3,6 +3,7 @@ import six.moves
 from six import text_type
 from mwclient.util import parse_timestamp
 import mwclient.page
+import mwclient.image
 
 
 class List(object):
@@ -143,7 +144,7 @@ class GeneratorList(List):
         if info['ns'] == 14:
             return Category(self.site, u'', info)
         if info['ns'] == 6:
-            return mwclient.page.Image(self.site, u'', info)
+            return mwclient.image.Image(self.site, u'', info)
         return mwclient.page.Page(self.site, u'', info)
 
     def load_chunk(self):
@@ -195,7 +196,7 @@ class PageList(GeneratorList):
         if self.namespace == 14:
             return Category(self.site, self.site.namespaces[14] + ':' + name, info)
         elif self.namespace == 6:
-            return mwclient.page.Image(self.site, self.site.namespaces[6] + ':' + name, info)
+            return mwclient.image.Image(self.site, self.site.namespaces[6] + ':' + name, info)
         elif self.namespace != 0:
             return mwclient.page.Page(self.site, self.site.namespaces[self.namespace] + ':' + name, info)
         else:
@@ -205,7 +206,7 @@ class PageList(GeneratorList):
                 if namespace == 14:
                     return Category(self.site, name, info)
                 elif namespace == 6:
-                    return mwclient.page.Image(self.site, name, info)
+                    return mwclient.image.Image(self.site, name, info)
             return mwclient.page.Page(self.site, name, info)
 
     def guess_namespace(self, name):
diff --git a/mwclient/page.py b/mwclient/page.py
index 1ee0a0be1e2eedb04f963ef014109ae21cfe7a8b..19d412a99e6e1777433171ec8505a176b8b0f50c 100644
--- a/mwclient/page.py
+++ b/mwclient/page.py
@@ -1,5 +1,4 @@
 import six
-from six.moves import urllib
 from six import text_type
 import time
 import warnings
@@ -358,40 +357,3 @@ class Page(object):
             return mwclient.listing.PagePropertyGenerator(self, 'templates', 'tl')
         else:
             return mwclient.listing.PageProperty(self, 'templates', 'tl', return_values='title')
-
-
-class Image(Page):
-
-    def __init__(self, site, name, info=None):
-        Page.__init__(self, site, name, info,
-                      extra_properties={'imageinfo':
-                                        (('iiprop', 'timestamp|user|comment|url|size|sha1|metadata|archivename'), )
-                                        })
-        self.imagerepository = self._info.get('imagerepository', '')
-        self.imageinfo = self._info.get('imageinfo', ({}, ))[0]
-
-    def imagehistory(self):
-        return mwclient.listing.PageProperty(self, 'imageinfo', 'ii',
-                                             iiprop='timestamp|user|comment|url|size|sha1|metadata|archivename')
-
-    def imageusage(self, namespace=None, filterredir='all', redirect=False,
-                   limit=None, generator=True):
-        prefix = mwclient.listing.List.get_prefix('iu', generator)
-        kwargs = dict(mwclient.listing.List.generate_kwargs(prefix, title=self.name, namespace=namespace, filterredir=filterredir))
-        if redirect:
-            kwargs['%sredirect' % prefix] = '1'
-        return mwclient.listing.List.get_list(generator)(self.site, 'imageusage', 'iu', limit=limit, return_values='title', **kwargs)
-
-    def duplicatefiles(self, limit=None):
-        return mwclient.listing.PageProperty(self, 'duplicatefiles', 'df', dflimit=limit)
-
-    def download(self):
-        url = self.imageinfo['url']
-        if not url.startswith('http://'):
-            url = 'http://' + self.site.host + url
-        url = urllib.parse.urlparse(url)
-        # TODO: query string
-        return self.site.connection.get(url[1], url[2])
-
-    def __repr__(self):
-        return "<Image object '%s' for %s>" % (self.name.encode('utf-8'), self.site)