diff --git a/owslib/wcs.py b/owslib/wcs.py
index <HASH>..<HASH> 100644
--- a/owslib/wcs.py
+++ b/owslib/wcs.py
@@ -20,16 +20,16 @@ from coverage import wcs100, wcs110, wcsBase
 
 def WebCoverageService(url, version=None, xml=None):
     ''' wcs factory function, returns a version specific WebCoverageService object '''
-    if xml is None:
-        reader = wcsBase.WCSCapabilitiesReader()
-        request = reader.capabilities_url(url)
-        xml = urllib2.urlopen(request).read()
-
+    
     if version is None:
+        if xml is None:
+            reader = wcsBase.WCSCapabilitiesReader()
+            request = reader.capabilities_url(url)
+            xml = urllib2.urlopen(request).read()
         capabilities = etree.etree.fromstring(xml)
         version = capabilities.get('version')
         del capabilities
-    
+        
     if version == '1.0.0':
         return wcs100.WebCoverageService_1_0_0.__new__(wcs100.WebCoverageService_1_0_0, url, xml)
     elif version == '1.1.0':
The web coverage reader was being created twice by the WebCoverageService factory function - this was not necessary.