diff --git a/CHANGELOG.md b/CHANGELOG.md
index b85395cf0c0082ea66abc1fd75977454ff434e25..182e1163f0b6533feec9137106bc1617aa3c878d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,8 @@
 # v1.2.5
 
 * bugfix: fixed `log_frames` in `Cluster`
+* improved Travis build pipeline
+* added stress tests for `SelectListener`
 
 # v1.2.4
 
diff --git a/README.md b/README.md
index 112945235133f06a9518ddd9c27a0259f9fb08af..933ab17d00ccd382511ad2da3b271c4a9a21cb97 100644
--- a/README.md
+++ b/README.md
@@ -109,7 +109,7 @@ The default username used is guest, and password is guest.
 You can also run unit tests from Docker, if you wish so. To launch the unit test suite:
 
 ```bash
-docker-compose up tests
+docker-compose up unittest
 ```
 
 To launch the stress test suite
diff --git a/setup.cfg b/setup.cfg
index 4f1119b36851927a4bca276adfa64ee09a63a4c4..dac2abb00f86bd5fc829cf502a5aed08ac0aec20 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -10,6 +10,7 @@ classifiers =
     Programming Language :: Python :: 3.6
     Programming Language :: Python :: 3.7
     Programming Language :: Python :: 3.8
+    Programming Language :: Python :: 3.9
     Programming Language :: Python :: Implementation :: CPython
     Programming Language :: Python :: Implementation :: PyPy
     Operating System :: OS Independent
diff --git a/setup.py b/setup.py
index 5345ecae35f69d99468e2ee1fc17caeaae97dc5e..0e99fadd97595dc941f68bf5b40ec42651d0f6d7 100644
--- a/setup.py
+++ b/setup.py
@@ -11,6 +11,7 @@ setup(keywords=['amqp', 'rabbitmq', 'client', 'network', 'ha', 'high availabilit
       # per coverage version for codeclimate-reporter
       tests_require=["nose2", "coverage", "nose2[coverage_plugin]"],
       test_suite='nose2.collector.collector',
+      python_requires='!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*',
       extras_require={
           ':python_version == "2.7"': ['futures', 'typing', 'monotonic'],
           'prctl': ['prctl'],
diff --git a/tests/test_clustering/test_a.py b/tests/test_clustering/test_a.py
index daa86c0293c6849018edac50e3a9b077de79f2ab..947dcff05f9b7a1f25692dea9acb11b9deeaf340 100644
--- a/tests/test_clustering/test_a.py
+++ b/tests/test_clustering/test_a.py
@@ -187,7 +187,7 @@ class TestA(unittest.TestCase):
         self.assertTrue(P['q'])
 
     def test_send_recv_nonzerolen_memoryview(self):
-        """single and multi frame"""
+        """single and multi frame in MEMORYVIEW mode"""
         from coolamqp.attaches import BodyReceiveMode
 
         con, fut = self.c.consume(Queue(u'hello7', exclusive=True), no_ack=True,
@@ -210,7 +210,7 @@ class TestA(unittest.TestCase):
         self.assertEquals(m.body.tobytes(), data)
 
     def test_send_recv_nonzerolen_listofmemoryview(self):
-        """single and multi frame"""
+        """single and multi frame in LIST_OF_MEMORYVIEW mode"""
         from coolamqp.attaches import BodyReceiveMode
 
         con, fut = self.c.consume(Queue(u'hello8', exclusive=True), no_ack=True,
diff --git a/tests/travis_test.sh b/tests/travis_test.sh
index 69a4bf893ccca1c55aa54aa8439a5f916f444283..9dd2e3b5166faef8028edbe4086dc0f3dfb62830 100644
--- a/tests/travis_test.sh
+++ b/tests/travis_test.sh
@@ -15,3 +15,4 @@ coverage run -m compile_definitions
 coverage run --append -m nose2 -vv
 COOLAMQP_FORCE_SELECT_LISTENER=1 coverage run --append -m nose2 -vv
 coverage run --append -m stress_tests
+COOLAMQP_FORCE_SELECT_LISTENER=1 coverage run --append -m stress_tests