diff --git a/wsme/rest/protocol.py b/wsme/rest/protocol.py
index 1ecf4de..ff53528 100644
--- a/wsme/rest/protocol.py
+++ b/wsme/rest/protocol.py
@@ -5,7 +5,8 @@ from wsme.utils import OrderedDict
 from wsme.protocol import CallContext, Protocol, media_type_accept
 
 import wsme.rest
-import wsme.rest.args
+from wsme.rest import json
+from wsme.rest import xml
 import wsme.runtime
 
 log = logging.getLogger(__name__)
@@ -14,21 +15,22 @@ log = logging.getLogger(__name__)
 class RestProtocol(Protocol):
     name = 'rest'
     displayname = 'REST'
-    dataformats = ['json', 'xml']
-    content_types = ['application/json', 'text/xml']
+    formatters = {
+        'json': json,
+        'xml': xml,
+    }
 
     def __init__(self, dataformats=None):
         if dataformats is None:
-            dataformats = RestProtocol.dataformats
+            dataformats = ('json', 'xml')
 
         self.dataformats = OrderedDict()
         self.content_types = []
 
         for dataformat in dataformats:
-            __import__('wsme.rest.' + dataformat)
-            dfmod = getattr(wsme.rest, dataformat)
-            self.dataformats[dataformat] = dfmod
-            self.content_types.extend(dfmod.accept_content_types)
+            formatter = self.formatters[dataformat]
+            self.dataformats[dataformat] = formatter
+            self.content_types.extend(formatter.accept_content_types)
 
     def accept(self, request):
         for dataformat in self.dataformats: