diff --git a/ChangeLog b/ChangeLog
index 26707cc0558a4724027029beb73d76b8b6f6856e..8789b215d22fd42ace5b878a27d59829a8fcddcf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -964,7 +964,7 @@ Changes in version 0.3.3.2-alpha - 2018-02-10
       would call the Rust implementation of
       protover_get_supported_protocols(). This was due to the C version
       returning a static string, whereas the Rust version newly allocated
-      a CString to pass accross the FFI boundary. Consequently, the C
+      a CString to pass across the FFI boundary. Consequently, the C
       code was not expecting to need to free() what it was given. Fixes
       bug 25127; bugfix on 0.3.2.1-alpha.
 
diff --git a/Makefile.am b/Makefile.am
index 04ca88a2369be8e42da5b2c49f918730b3b076a1..cccad6c5ed593643baa27bb7e7101f89689a46ae 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -217,6 +217,26 @@ check-logs:
 	$(top_srcdir)/scripts/maint/checkLogs.pl \
 		$(top_srcdir)/src/*/*.[ch] | sort -n
 
+.PHONY: check-typos
+check-typos:
+	@if test -x "`which misspell 2>&1;true`"; then \
+		echo "Checking for Typos ..."; \
+		(misspell \
+			$(top_srcdir)/src/[^e]*/*.[ch] \
+			$(top_srcdir)/doc \
+			$(top_srcdir)/contrib \
+			$(top_srcdir)/scripts \
+			$(top_srcdir)/README \
+			$(top_srcdir)/ChangeLog \
+			$(top_srcdir)/INSTALL \
+			$(top_srcdir)/ReleaseNotes \
+			$(top_srcdir)/LICENSE); \
+	else \
+		echo "Tor can use misspell to check for typos."; \
+		echo "It seems that you don't have misspell installed."; \
+		echo "You can install the latest version of misspell here: https://github.com/client9/misspell#install"; \
+	fi
+
 .PHONY: check-changes
 check-changes:
 if USEPYTHON
diff --git a/changes/ticket25024 b/changes/ticket25024
new file mode 100644
index 0000000000000000000000000000000000000000..0e5069cf81d14b3de8d0808820bb71423d991680
--- /dev/null
+++ b/changes/ticket25024
@@ -0,0 +1,4 @@
+  o Minor features (code quality):
+    - Add optional spell-checking for the Tor codebase, using the "misspell"
+      program.  To use this feature, run "make check-typos".
+      Closes ticket 25024.
diff --git a/src/common/crypto_rsa.h b/src/common/crypto_rsa.h
index 2f5442a5d2f81d5db0cd7f28e7e396dc9df923f8..e952089318b2c3987607c428049c477a54bc4cc4 100644
--- a/src/common/crypto_rsa.h
+++ b/src/common/crypto_rsa.h
@@ -35,7 +35,7 @@
 /** A public key, or a public/private key-pair. */
 typedef struct crypto_pk_t crypto_pk_t;
 
-/* RSA enviroment setup */
+/* RSA environment setup */
 MOCK_DECL(crypto_pk_t *,crypto_pk_new,(void));
 void crypto_pk_free_(crypto_pk_t *env);
 #define crypto_pk_free(pk) FREE_AND_NULL(crypto_pk_t, crypto_pk_free_, (pk))
diff --git a/src/or/protover.c b/src/or/protover.c
index 6532f09c2f0435d0b410da72f4d5af38717e159d..18382ba7c99f5e07c9bfd0e76b4f82c24f37b171 100644
--- a/src/or/protover.c
+++ b/src/or/protover.c
@@ -715,7 +715,7 @@ protover_all_supported(const char *s, char **missing_out)
             versions->high = i;
           }
           /* If the last one to be unsupported is one less than the current
-           * one, we're in a continous range, so set the high field. */
+           * one, we're in a continuous range, so set the high field. */
           if ((versions->high && versions->high == i - 1) ||
               /* Similarly, if the last high wasn't set and we're currently
                * one higher than the low, add current index as the highest