diff --git a/tests/conftest.py b/tests/conftest.py
index 49e178b..b9879f8 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -5,21 +5,21 @@
     HMACBackend, CipherBackend, HashBackend
 )
 
-from .utils import check_for_iface, check_backend_support, modify_backend_list
+from .utils import check_for_iface, check_backend_support, select_backends
 
 
 # copy all backends so we can mutate it.This variable is used in generate
 # tests to allow us to target a single backend without changing _ALL_BACKENDS
-_DESIRED_BACKENDS = list(_ALL_BACKENDS)
+_SELECTED_BACKENDS = list(_ALL_BACKENDS)
 
 
 def pytest_generate_tests(metafunc):
-    global _DESIRED_BACKENDS
-    name = metafunc.config.getoption("--backend")
-    modify_backend_list(name, _DESIRED_BACKENDS)
+    global _SELECTED_BACKENDS
+    names = metafunc.config.getoption("--backend")
+    _SELECTED_BACKENDS = select_backends(names, _SELECTED_BACKENDS)
 
 
-@pytest.fixture(params=_DESIRED_BACKENDS)
+@pytest.fixture(params=_SELECTED_BACKENDS)
 def backend(request):
     return request.param
 
diff --git a/tests/test_utils.py b/tests/test_utils.py
index e8037c1..a7da490 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -21,7 +21,7 @@
 from .utils import (
     load_nist_vectors, load_vectors_from_file, load_cryptrec_vectors,
     load_openssl_vectors, load_hash_vectors, check_for_iface,
-    check_backend_support, modify_backend_list
+    check_backend_support, select_backends
 )
 
 
@@ -29,25 +29,46 @@
     pass
 
 
-def test_modify_backend_list_leave_one():
+def test_select_one_backend():
     b1 = pretend.stub(name="b1")
     b2 = pretend.stub(name="b2")
     b3 = pretend.stub(name="b3")
     backends = [b1, b2, b3]
     name = "b2"
-    modify_backend_list(name, backends)
+    select_backends(name, backends)
     assert len(backends) == 1
     assert backends[0] == b2
 
 
-def test_modify_backend_list_error_none():
+def test_select_no_backend():
     b1 = pretend.stub(name="b1")
     b2 = pretend.stub(name="b2")
     b3 = pretend.stub(name="b3")
     backends = [b1, b2, b3]
     name = "back!"
     with pytest.raises(ValueError):
-        modify_backend_list(name, backends)
+        select_backends(name, backends)
+
+
+def test_select_backends_none():
+    b1 = pretend.stub(name="b1")
+    b2 = pretend.stub(name="b2")
+    b3 = pretend.stub(name="b3")
+    backends = [b1, b2, b3]
+    name = None
+    select_backends(name, backends)
+    assert len(backends) == 3
+
+
+def test_select_two_backends():
+    b1 = pretend.stub(name="b1")
+    b2 = pretend.stub(name="b2")
+    b3 = pretend.stub(name="b3")
+    backends = [b1, b2, b3]
+    name = "b2 ,b1 "
+    select_backends(name, backends)
+    assert len(backends) == 2
+    assert backends == [b1, b2]
 
 
 def test_check_for_iface():
diff --git a/tests/utils.py b/tests/utils.py
index 343f3ef..ee1675e 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -16,14 +16,23 @@
 import pytest
 
 
-def modify_backend_list(name, all_backends):
-    if name is not None:
-        backends = list(all_backends)
-        for backend in backends:
-            if backend.name != name:
-                all_backends.remove(backend)
-        if len(all_backends) == 0:
-            raise ValueError("No backends selected for testing")
+def select_backends(names, backend_list):
+    if names is None:
+        return backend_list
+    split_names = [x.strip() for x in names.split(',')]
+    # this must be duplicated and then removed to preserve the metadata
+    # pytest associates. Appending backends to a new list doesn't seem to work
+    backends = list(backend_list)
+    for backend in backends:
+        if backend.name not in split_names:
+            backend_list.remove(backend)
+
+    if len(backend_list) > 0:
+        return backend_list
+    else:
+        raise ValueError(
+            "No backend selected. Tried to select: {0}".format(split_names)
+        )
 
 
 def check_for_iface(name, iface, item):
