diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0d13a3d09a43f6bc52afdd3cba35f3684f8193d..4534a620b79ab99bda7e728cd04c7272bf7c8797 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
 # v1.3.2
 
-* _TBA_
+* added `read_requirements_txt`
 
 # v1.3.1
 
diff --git a/README.md b/README.md
index 929e861bb6699fc89b97148f7839831b7844d189..32258f398feda1e5f76e81af094b36d6d53e1af8 100644
--- a/README.md
+++ b/README.md
@@ -73,3 +73,23 @@ logger = logging.getLogger(__name__)
 
 Otherwise `PyInit` won't be generated by Cython 
 and such module will be unimportable in Python. Normal import won't suffice.
+
+Further streamlining your builds
+--------------------------------
+
+If you add a MANIFEST.in file with contents:
+
+```
+include requirements.txt
+```
+
+Then you can write the following in your setup.py:
+
+```python
+from snakehouse import read_requirements_txt
+
+setup(install_requires=read_requirements_txt())                       
+```
+
+This will read in your requirements.txt and extract packages from there.
+Be sure to entertain it's [pydoc](snakehouse/requirements.py)!
diff --git a/requirements.txt b/requirements.txt
index e17969fc1d0d7dba749c634fa8d053959d507fe1..efe15f8c4a55b5764d3d986efab0ae2192187e5e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,3 @@
 Cython
 mako
-satella
+satella>=2.14.46
diff --git a/setup.py b/setup.py
index 5a0916f430760df724a5db46ee4d33b1967b2c16..b428c83cab78a2d19e02de3f47c3bc19cdcdc61a 100644
--- a/setup.py
+++ b/setup.py
@@ -6,7 +6,7 @@ setup(keywords=['cython', 'extension', 'multiple', 'pyx'],
       packages=find_packages(include=['snakehouse']),
       version=__version__,
       install_requires=[
-            'Cython', 'mako', 'satella',
+            'Cython', 'mako', 'satella>=2.14.46',
       ],
       python_requires='!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*',
       package_data={
diff --git a/snakehouse/__init__.py b/snakehouse/__init__.py
index 95881362e46f3fc6d56faa24ccb50328825b8710..f11983c3ee467f8c07b4a68a08aca050e07ebdbc 100644
--- a/snakehouse/__init__.py
+++ b/snakehouse/__init__.py
@@ -1,5 +1,6 @@
 from .build import build
 from .multibuild import Multibuild
 from .faster_builds import monkey_patch_parallel_compilation
+from .requirements import read_requirements_txt
 
-__version__ = '1.3.2a1'
+__version__ = '1.3.2'
diff --git a/snakehouse/requirements.py b/snakehouse/requirements.py
new file mode 100644
index 0000000000000000000000000000000000000000..e7bedce03ef354494200e9e7d784b7cbd2fc63bd
--- /dev/null
+++ b/snakehouse/requirements.py
@@ -0,0 +1,23 @@
+from satella.files import read_lines
+
+
+def read_requirements_txt(path: str = 'requirements.txt'):
+    """
+    Read requirements.txt and parse it into a list of packages
+    as given by setup(install_required=).
+
+    This means it will read in all lines, discard empty and commented ones,
+    and discard all those who are an URL.
+
+    Remember to include your requirements.txt inside your MANIFEST.in!
+
+    :param path: path to requirements.txt. Default is `requirements.txt`.
+    :return: list of packages ready to be fed to setup(install_requires=)
+    """
+    lines = read_lines(path)
+    lines = (line.strip() for line in lines)
+    lines = (line for line in lines if not line.startswith('#'))
+    lines = (line for line in lines if not line.startswith('git+'))
+    lines = (line for line in lines if not line.startswith('http'))
+    lines = (line for line in lines if line)
+    return list(lines)