diff --git a/swift/account/server.py b/swift/account/server.py
index 5496ff2b8b..953e5a918e 100644
--- a/swift/account/server.py
+++ b/swift/account/server.py
@@ -214,10 +214,14 @@ class AccountController(object):
                                   content_type='text/plain', request=req)
         if query_format:
             req.accept = 'application/%s' % query_format.lower()
-        out_content_type = req.accept.best_match(
-                                ['text/plain', 'application/json',
-                                 'application/xml', 'text/xml'],
-                                default_match='text/plain')
+        try:
+            out_content_type = req.accept.best_match(
+                                    ['text/plain', 'application/json',
+                                     'application/xml', 'text/xml'],
+                                    default_match='text/plain')
+        except AssertionError, err:
+            return HTTPBadRequest(body='bad accept header: %s' % req.accept,
+                                  content_type='text/plain', request=req)
         account_list = broker.list_containers_iter(limit, marker, end_marker,
                                                    prefix, delimiter)
         if out_content_type == 'application/json':
diff --git a/swift/container/server.py b/swift/container/server.py
index 906a784b25..0ac5c41aa3 100644
--- a/swift/container/server.py
+++ b/swift/container/server.py
@@ -306,10 +306,14 @@ class ContainerController(object):
                                   content_type='text/plain', request=req)
         if query_format:
             req.accept = 'application/%s' % query_format.lower()
-        out_content_type = req.accept.best_match(
-                                ['text/plain', 'application/json',
-                                 'application/xml', 'text/xml'],
-                                default_match='text/plain')
+        try:
+            out_content_type = req.accept.best_match(
+                                    ['text/plain', 'application/json',
+                                     'application/xml', 'text/xml'],
+                                    default_match='text/plain')
+        except AssertionError, err:
+            return HTTPBadRequest(body='bad accept header: %s' % req.accept,
+                                  content_type='text/plain', request=req)
         container_list = broker.list_objects_iter(limit, marker, end_marker,
                                                   prefix, delimiter, path)
         if out_content_type == 'application/json':
diff --git a/test/unit/account/test_server.py b/test/unit/account/test_server.py
index 846239aba7..879592c4ad 100644
--- a/test/unit/account/test_server.py
+++ b/test/unit/account/test_server.py
@@ -748,6 +748,23 @@ class TestAccountController(unittest.TestCase):
         self.assertEquals(resp.status_int, 200)
         self.assertEquals(resp.body, 'c1\n')
 
+    def test_GET_accept_not_valid(self):
+        req = Request.blank('/sda1/p/a', environ={'REQUEST_METHOD': 'PUT',
+            'HTTP_X_TIMESTAMP': '0'})
+        self.controller.PUT(req)
+        req = Request.blank('/sda1/p/a/c1', environ={'REQUEST_METHOD': 'PUT'},
+                            headers={'X-Put-Timestamp': '1',
+                                     'X-Delete-Timestamp': '0',
+                                     'X-Object-Count': '0',
+                                     'X-Bytes-Used': '0',
+                                     'X-Timestamp': normalize_timestamp(0)})
+        self.controller.PUT(req)
+        req = Request.blank('/sda1/p/a', environ={'REQUEST_METHOD': 'GET'})
+        req.accept = 'application/xml*'
+        resp = self.controller.GET(req)
+        self.assertEquals(resp.status_int, 400)
+        self.assertEquals(resp.body, 'bad accept header: application/xml*')
+
     def test_GET_prefix_delimeter_plain(self):
         req = Request.blank('/sda1/p/a', environ={'REQUEST_METHOD': 'PUT',
             'HTTP_X_TIMESTAMP': '0'})
diff --git a/test/unit/container/test_server.py b/test/unit/container/test_server.py
index 8cf75844df..64e8cb8ff3 100644
--- a/test/unit/container/test_server.py
+++ b/test/unit/container/test_server.py
@@ -733,7 +733,24 @@ class TestContainerController(unittest.TestCase):
         resp = self.controller.GET(req)
         result = [x['content_type'] for x in simplejson.loads(resp.body)]
         self.assertEquals(result, [u'\u2603', 'text/plain; "utf-8"'])
-
+        
+    def test_GET_accept_not_valid(self):
+        req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'PUT',
+            'HTTP_X_TIMESTAMP': '0'})
+        self.controller.PUT(req)
+        req = Request.blank('/sda1/p/a/c1', environ={'REQUEST_METHOD': 'PUT'},
+                            headers={'X-Put-Timestamp': '1',
+                                     'X-Delete-Timestamp': '0',
+                                     'X-Object-Count': '0',
+                                     'X-Bytes-Used': '0',
+                                     'X-Timestamp': normalize_timestamp(0)})
+        self.controller.PUT(req)
+        req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'GET'})
+        req.accept = 'application/xml*'
+        resp = self.controller.GET(req)
+        self.assertEquals(resp.status_int, 400)
+        self.assertEquals(resp.body, 'bad accept header: application/xml*')
+        
     def test_GET_limit(self):
         # make a container
         req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'PUT',