diff --git a/mwclient/client.py b/mwclient/client.py
index 6d866d60a3fd6bebda10b89fc06913ce3bdebadb..dc08069cae31320e583e8c724d62adbc1af3f713 100644
--- a/mwclient/client.py
+++ b/mwclient/client.py
@@ -61,6 +61,8 @@ class Site(object):
 		else:
 			self.connection = pool
 			
+		self.version = None
+			
 		self.Pages = listing.PageList(self)
 		self.Categories = listing.PageList(self, namespace = 14)
 		self.Images = listing.PageList(self, namespace = 6)
@@ -127,15 +129,17 @@ class Site(object):
 		while True:
 			info = self.raw_api(action, **kwargs)
 			if not info: info = {}
-			if 'userinfo' in info.get('query', ()):
-				userinfo = info['query']['userinfo']
-				if 'blockedby' in userinfo:
-					self.blocked = (userinfo['blockedby'], 
-						userinfo.get('blockreason', u''))
-				else:
-					self.blocked = False
-				self.hasmsg = 'message' in userinfo
-				self.logged_in = 'anon' not in userinfo
+				
+			try:
+				userinfo = compatibility.userinfo(info, self.require(1, 12, raise_error = None))
+			except KeyError:
+				userinfo = ()
+			if 'blockedby' in userinfo:
+				self.blocked = (userinfo['blockedby'], userinfo.get('blockreason', u''))
+			else:
+				self.blocked = False
+			self.hasmsg = 'message' in userinfo
+			self.logged_in = 'anon' not in userinfo
 			if 'error' in info:
 				if info['error']['code'] in (u'internal_api_error_DBConnectionError', ):
 					self.wait(token)
@@ -212,6 +216,10 @@ class Site(object):
 		return self.wait_tokens[token]
 
 	def require(self, major, minor, revision = None, raise_error = True):
+		if self.version is None:
+			if raise_error is None: return 
+			raise RuntimeError('Site %s has not yet been initialized' % repr(self))
+		
 		if revision is None:
 			if self.version[:2] >= (major, minor):
 				return True
diff --git a/mwclient/compatibility.py b/mwclient/compatibility.py
index 65392aad8d50b18959a88786696f3271b827b015..4bd7625d93f6ce5a03f94b966c96a7a7ea324eb9 100644
--- a/mwclient/compatibility.py
+++ b/mwclient/compatibility.py
@@ -4,8 +4,22 @@ def title(prefix, new_format):
 	else:
 		return 'titles'
 		
-def userinfo(data, new_format):
-	if new_format:
+def userinfo(data, new_format = None):
+	if new_format is None:
+		# Unknown version; trying to guess
+		if 'userinfo' in data: 
+			return data['userinfo']
+		elif 'userinfo' in data.get('query', ()):
+			return data['query']['userinfo']
+		else: 
+			return {}
+	elif new_format:
 		return data['query']['userinfo']
 	else:
 		return data['userinfo']
+
+def iiprop(post_112):
+	if post_112:
+		return 'timestamp|user|comment|url|size|sha1|metadata'
+	else:
+		return 'timestamp|user|comment|url|size|sha1'
\ No newline at end of file
diff --git a/mwclient/listing.py b/mwclient/listing.py
index 0df04311c62818410995553d6fbcdc2104319d60..2b34a94227f56b5dee4b0662d76818c157264d27 100644
--- a/mwclient/listing.py
+++ b/mwclient/listing.py
@@ -1,4 +1,5 @@
 import client, page
+import compatibility
 
 class List(object):
 	def __init__(self, site, list_name, prefix, limit = None, return_values = None, *args, **kwargs):
@@ -95,7 +96,6 @@ class GeneratorList(List):
 		
 		self.args['prop'] = 'info|imageinfo'
 		self.args['inprop'] = 'protection'
-		self.args['iiprop'] = 'timestamp|user|comment|url|size|sha1|metadata'
 		
 		self.result_member = 'pages'
 		
@@ -108,6 +108,13 @@ class GeneratorList(List):
 		if info['ns'] == 6:
 			return page.Image(self.site, u'', info)
 		return page.Page(self.site, u'', info)
+		
+	def load_chunk(self):
+		# Put this here so that the constructor does not fail 
+		# on uninitialized sites
+		self.args['iiprop'] = compatibility.iiprop(site.require(1, 12, raise_error = False))
+		return List.load_chunk(self)
+		
 	
 class Category(page.Page, GeneratorList):
 	def __init__(self, site, name, info = None, namespace = None):
diff --git a/mwclient/page.py b/mwclient/page.py
index 1e6ac1a014799875ce62a10b298a3e6a3e3e609e..e41b1b82a0e0ad2254421f352ab9c907853d663e 100644
--- a/mwclient/page.py
+++ b/mwclient/page.py
@@ -184,7 +184,7 @@ class Page(object):
 		kwargs = dict(listing.List.generate_kwargs(prefix, 
 			namespace = namespace, filterredir = filterredir))
 		if redirect: kwargs['%sredirect' % prefix] = '1'
-		kwargs[compatibility.title(prefix, self.site.require(1, 11))] = self.name
+		kwargs[compatibility.title(prefix, self.site.require(1, 11, raise_error = False))] = self.name
 			
 		return listing.List.get_list(generator)(self.site, 'backlinks', 'bl', limit = limit, return_values = 'title', **kwargs)
 	def categories(self, generator = True):
@@ -201,7 +201,7 @@ class Page(object):
 		kwargs = dict(listing.List.generate_kwargs(prefix,
 			namespace = namespace, filterredir = filterredir))
 		if redirect: kwargs['%sredirect' % prefix] = '1'
-		kwargs[compatibility.title(prefix, self.site.require(1, 11))] = self.name
+		kwargs[compatibility.title(prefix, self.site.require(1, 11, raise_error = False))] = self.name
 			
 		return listing.List.get_list(generator)(self.site, 'embeddedin', 'ei', limit = limit, return_values = 'title', **kwargs)
 	def extlinks(self):
@@ -247,14 +247,14 @@ class Image(Page):
 	def __init__(self, site, name, info = None):
 		site.require(1, 11)
 		Page.__init__(self, site, name, info,
-			extra_properties = {'imageinfo': (('iiprop', 
-			'timestamp|user|comment|url|size|sha1|metadata'), )})
+			extra_properties = {'imageinfo': (('iiprop', compatibility.iiprop(
+				site.require(1, 12, raise_error = False))), )})
 		self.imagerepository = self._info.get('imagerepository', '')
 		self.imageinfo = self._info.get('imageinfo', ((), ))[0]
 
 	def imagehistory(self):
 		return listing.PageProperty(self, 'imageinfo', 'ii', 
-			iiprop = 'timestamp|user|comment|url|size|sha1|metadata')
+			iiprop = compatibility.iiprop(self.site.require(1, 12, raise_error = False)))
 	def imageusage(self, namespace = None, filterredir = 'all', redirect = False, 
 			limit = None, generator = True):
 		self.site.require(1, 11)