diff --git a/README.rst b/README.rst
index 1862809be2f4c1dfe0136fee6bb9070d2ae4f85b..95400fe831fef6fc268219dc9ada29bc29460bc7 100644
--- a/README.rst
+++ b/README.rst
@@ -18,26 +18,26 @@ and accurately.
 
 It relies on
 
-* `numpy <http://pypi.python.org/pypi/numpy>`_ for arrays
-* `modepy <http://pypi.python.org/pypi/modepy>`_ for modes and nodes on simplices
-* `meshmode <http://pypi.python.org/pypi/meshmode>`_ for modes and nodes on simplices
-* `loopy <http://pypi.python.org/pypi/loo.py>`_ for fast array operations
-* `leap <http://pypi.python.org/pypi/leap>`_ for time integration
-* `dagrt <http://pypi.python.org/pypi/dagrt>`_ as an execution runtime
-* `pytest <http://pypi.python.org/pypi/pytest>`_ for automated testing
+* `numpy <https://pypi.org/project/numpy>`_ for arrays
+* `modepy <https://pypi.org/project/modepy>`_ for modes and nodes on simplices
+* `meshmode <https://pypi.org/project/meshmode>`_ for modes and nodes on simplices
+* `loopy <https://pypi.org/project/loopy>`_ for fast array operations
+* `leap <https://pypi.org/project/leap>`_ for time integration
+* `dagrt <https://pypi.org/project/dagrt>`_ as an execution runtime
+* `pytest <https://pypi.org/project/pytest>`_ for automated testing
 
 and, indirectly,
 
-* `PyOpenCL <http://pypi.python.org/pypi/pyopencl>`_ as computational infrastructure
+* `PyOpenCL <https://pypi.org/project/pyopencl>`_ as computational infrastructure
 
 PyOpenCL is likely the only package you'll have to install
 by hand, all the others will be installed automatically.
 
 .. image:: https://badge.fury.io/py/grudge.png
-    :target: http://pypi.python.org/pypi/grudge
+    :target: https://pypi..org/project/grudge
 
 Resources:
 
-* `documentation <http://documen.tician.de/grudge>`_
-* `wiki home page <http://wiki.tiker.net/Grudge>`_
-* `source code via git <http://gitlab.tiker.net/inducer/grudge>`_
+* `documentation <https://documen.tician.de/grudge>`_
+* `wiki home page <https://wiki.tiker.net/Grudge>`_
+* `source code via git <https://gitlab.tiker.net/inducer/grudge>`_
diff --git a/contrib/maxima/cns.mac b/contrib/maxima/cns.mac
index 7bf5640f95fdbfeeb49e5d3c546a747761e0e456..7ae1a13bd1a09a884d873b8f0835af465fd5d16f 100644
--- a/contrib/maxima/cns.mac
+++ b/contrib/maxima/cns.mac
@@ -1,5 +1,5 @@
 /* compare formulation in JSH/TW with 
- * http://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations#Compressible_flow_of_Newtonian_fluids
+ * https://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations#Compressible_flow_of_Newtonian_fluids
  */
 
 kill(all);
diff --git a/contrib/maxima/pml.mac b/contrib/maxima/pml.mac
index 0068fac2ef46731542875d57f02435c4a83c56bc..e65eaf1da85dacd609cda749dd49ed2bb56df4cb 100644
--- a/contrib/maxima/pml.mac
+++ b/contrib/maxima/pml.mac
@@ -4,7 +4,7 @@ load("maxwellbase.mac");
 /*
 See
 S.G. Johnson, “Notes on Perfectly Matched Layers,” 2008;
-http://math.mit.edu/~stevenj/18.369/pml.pdf.
+https://math.mit.edu/~stevenj/18.369/pml.pdf.
 */
 
 coords:[x,y,z];
diff --git a/doc/Makefile b/doc/Makefile
index 7f8ed545e0a8499aa11972ee64ade230a4740510..e092de694ec5f75f5fcf4b1f321e7c33d57ee573 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -9,7 +9,7 @@ BUILDDIR      = _build
 
 # User-friendly check for sphinx-build
 ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
-$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
+$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from https://sphinx-doc.org/)
 endif
 
 # Internal variables.
diff --git a/doc/conf.py b/doc/conf.py
index 1b1cb89eb3abdf59de9093124c4a8bdc5ca4e67e..ac50671e36f9f3ead973986199cd8c458db9e9b1 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -127,7 +127,7 @@ html_theme = "alabaster"
 html_theme_options = {
         "extra_nav_links": {
             "🚀 Github": "https://github.com/inducer/grudge",
-            "💾 Download Releases": "https://pypi.python.org/pypi/grudge",
+            "💾 Download Releases": "https://pypi.org/project/grudge",
             }
         }
 
diff --git a/grudge/tools.py b/grudge/tools.py
index 4872962e521c5b2a512111589c699b7a11bb28f0..25018b530ccf1748f20c4a04191bcacf8e622799 100644
--- a/grudge/tools.py
+++ b/grudge/tools.py
@@ -130,7 +130,7 @@ def partial_to_all_subset_indices(subsets, base=0):
 
 # {{{ OrderedSet
 
-# Source: http://code.activestate.com/recipes/576694-orderedset/
+# Source: https://code.activestate.com/recipes/576694-orderedset/
 # Author: Raymond Hettinger
 # License: MIT
 
diff --git a/requirements.txt b/requirements.txt
index 0b012db622ab67efb99714d1328e4b7ccf46ff35..ca045bc369d633d5a367f60411951c0f33ad0c25 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,7 +4,7 @@ git+https://github.com/inducer/pytools.git#egg=pytools
 git+https://github.com/inducer/pymbolic.git#egg=pymbolic
 git+https://github.com/inducer/islpy.git#egg=islpy
 git+https://github.com/inducer/pyopencl.git#egg=pyopencl
-git+https://github.com/inducer/loopy.git#egg=loo.py
+git+https://github.com/inducer/loopy.git#egg=loopy
 git+https://github.com/inducer/dagrt.git#egg=dagrt
 git+https://github.com/inducer/leap.git#egg=leap
 git+https://github.com/inducer/meshpy.git#egg=meshpy
diff --git a/setup.py b/setup.py
index 22aaa32c258a5e73d2bff6cee64490fa4403478d..0393328612aeb5dc42282154eee9dee370964eb3 100644
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,7 @@ def main():
           author="Andreas Kloeckner",
           author_email="inform@tiker.net",
           license="MIT",
-          url="http://github.com/inducer/grudge",
+          url="https://github.com/inducer/grudge",
           classifiers=[
               'Development Status :: 3 - Alpha',
               'Intended Audience :: Developers',
@@ -50,7 +50,7 @@ def main():
               "meshmode>=2020.2",
               "pyopencl>=2013.1",
               "pymbolic>=2013.2",
-              "loo.py>=2013.1beta",
+              "loopy>=2020.2",
               "cgen>=2013.1.2",
               "leap>=2019.1",
               "dagrt>=2019.1",