diff --git a/conf.d/README.in b/conf.d/README.in
index 90c45de..4783a43 100644
--- a/conf.d/README.in
+++ b/conf.d/README.in
@@ -9,7 +9,7 @@
 The files are loaded in numeric order, the structure of the configuration
 has led to the following conventions in usage:
 
- Files begining with:	Contain:
+ Files beginning with:	Contain:
  
  00 through 09		Font directories
  10 through 19		system rendering defaults (AA, etc)
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 36f78da..c1d2a4a 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -232,7 +232,7 @@
 	@false
 endif
 
-# force doc rebulid after configure
+# force doc rebuild after configure
 dist-hook-local: dist-local-check-docs-enabled
 
 -include $(top_srcdir)/git.mk
diff --git a/doc/fccharset.fncs b/doc/fccharset.fncs
index 7245a2a..ee35555 100644
--- a/doc/fccharset.fncs
+++ b/doc/fccharset.fncs
@@ -195,7 +195,7 @@
 + (4-1)</parameter>) and <literal>0x35e</literal> (<parameter>0x300 +
 32*2 + (31-1)</parameter>) because <parameter>map[2]</parameter> has
 the 4th and 31st bits set.  The code points represented by
-<literal>map[3]</literal> and later are left as an excercise for the
+<literal>map[3]</literal> and later are left as an exercise for the
 reader ;).
 @@
 
diff --git a/fc-cat/fc-cat.c b/fc-cat/fc-cat.c
index e2be0cb..15a2f09 100644
--- a/fc-cat/fc-cat.c
+++ b/fc-cat/fc-cat.c
@@ -81,7 +81,7 @@
  * POSIX has broken stdio so that putc must do thread-safe locking,
  * this is a serious performance problem for applications doing large
  * amounts of IO with putc (as is done here).  If available, use
- * the putc_unlocked varient instead.
+ * the putc_unlocked variant instead.
  */
  
 #if defined(putc_unlocked) || defined(_IO_putc_unlocked)
diff --git a/fc-conflist/fc-conflist.sgml b/fc-conflist/fc-conflist.sgml
index a82dd1c..2bf6a4d 100644
--- a/fc-conflist/fc-conflist.sgml
+++ b/fc-conflist/fc-conflist.sgml
@@ -106,7 +106,7 @@
   <refsect1>
     <title>RETURN CODES</title>
     <para><command>fc-conflist</command> returns error code 0 for successful parsing,
-    or 1 if any errors occured or if at least one font face could not be opened.</para>
+    or 1 if any errors occurred or if at least one font face could not be opened.</para>
   </refsect1>
 
   <refsect1>
diff --git a/fc-lang/brx.orth b/fc-lang/brx.orth
index eab2046..111ddb4 100644
--- a/fc-lang/brx.orth
+++ b/fc-lang/brx.orth
@@ -42,5 +42,5 @@
 0960-0963       # Additional vowels
 0964-0965       # Punctuations
 0966-096F       # Digits
-0970            # Abbrevation sign
+0970            # Abbreviation sign
 
diff --git a/fc-lang/ee.orth b/fc-lang/ee.orth
index 089c47e..d860d29 100644
--- a/fc-lang/ee.orth
+++ b/fc-lang/ee.orth
@@ -30,7 +30,7 @@
 # * http://www.panafril10n.org/wikidoc/pmwiki.php/PanAfrLoc/Gbe
 #
 # We amend the main alphabet with tone marks over each vowel, but some
-# combinations lack precomposed forms in Unicode, so we also add indiviual
+# combinations lack precomposed forms in Unicode, so we also add individual
 # combining marks.
 #
 # Sources also differ on the notation used for the fourth tone: circumflex
diff --git a/fc-lang/ne.orth b/fc-lang/ne.orth
index ca1f285..b980697 100644
--- a/fc-lang/ne.orth
+++ b/fc-lang/ne.orth
@@ -40,4 +40,4 @@
 0950		# Sign and vedic tone marks
 0964-0965	# Punctuations
 0966-096F	# Digits
-0970		# Abbrevation sign
+0970		# Abbreviation sign
diff --git a/fc-lang/pa_pk.orth b/fc-lang/pa_pk.orth
index fba09e3..8548dd2 100644
--- a/fc-lang/pa_pk.orth
+++ b/fc-lang/pa_pk.orth
@@ -23,7 +23,7 @@
 #
 # Panjabi/Punjabi in Pakistan (pa-PK)
 #
-# This file is kept for compatiblity for glibc: According to ISO 639-3, the
+# This file is kept for compatibility for glibc: According to ISO 639-3, the
 # proper code for Pakistani Panjabi is 'lah'. See the file 'lah.orth' for
 # more information.
 include lah.orth
diff --git a/fc-lang/sat.orth b/fc-lang/sat.orth
index d5d91d0..bc80e75 100644
--- a/fc-lang/sat.orth
+++ b/fc-lang/sat.orth
@@ -41,4 +41,4 @@
 0950            # Sign
 0964-0965       # Punctuations
 0966-096F       # Digits
-0970            # Abbrevation sign
+0970            # Abbreviation sign
diff --git a/fc-query/fc-query.sgml b/fc-query/fc-query.sgml
index fd51d21..9d77375 100644
--- a/fc-query/fc-query.sgml
+++ b/fc-query/fc-query.sgml
@@ -157,7 +157,7 @@
   <refsect1>
     <title>RETURN CODES</title>
     <para><command>fc-query</command> returns error code 0 for successful parsing,
-    or 1 if any errors occured or if at least one font face could not be opened.</para>
+    or 1 if any errors occurred or if at least one font face could not be opened.</para>
   </refsect1>
 
   <refsect1>
diff --git a/fc-validate/fc-validate.c b/fc-validate/fc-validate.c
index ecd31c6..e8119c6 100644
--- a/fc-validate/fc-validate.c
+++ b/fc-validate/fc-validate.c
@@ -167,7 +167,7 @@
 
     if (FT_Init_FreeType (&ftlib))
     {
-	fprintf (stderr, _("Can't initalize FreeType library\n"));
+	fprintf (stderr, _("Can't initialize FreeType library\n"));
 	return 1;
     }
 
diff --git a/fc-validate/fc-validate.sgml b/fc-validate/fc-validate.sgml
index c677ef2..fd62116 100644
--- a/fc-validate/fc-validate.sgml
+++ b/fc-validate/fc-validate.sgml
@@ -153,7 +153,7 @@
   <refsect1>
     <title>RETURN CODES</title>
     <para><command>fc-validate</command> returns error code 0 for successful parsing,
-    or 1 if any errors occured or if at least one font face could not be opened.</para>
+    or 1 if any errors occurred or if at least one font face could not be opened.</para>
   </refsect1>
 
   <refsect1>
diff --git a/fonts.dtd b/fonts.dtd
index 40ecb4e..3b37974 100644
--- a/fonts.dtd
+++ b/fonts.dtd
@@ -27,7 +27,7 @@
 
     If 'prefix' is 'default' or 'cwd', then the current working directory will be added prior to the value.
     If 'prefix' is 'xdg', then the value in the $XDG_DATA_HOME will be added prior to the value.
-    If 'prefix' is 'relative', then the path of curent file will be added prior to the value.
+    If 'prefix' is 'relative', then the path of current file will be added prior to the value.
 -->
 <!ELEMENT cache (#PCDATA)>
 <!ATTLIST cache xml:space (default|preserve) 'preserve'>
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index 90d84fa..7147569 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1300,7 +1300,7 @@
 
 	/* All color fonts are designed to be scaled, even if they only have
 	 * bitmap strikes.  Client is responsible to scale the bitmaps.  This
-	 * is in constrast to non-color strikes... */
+	 * is in contrast to non-color strikes... */
 	if (!FcPatternObjectAddBool (pat, FC_SCALABLE_OBJECT, has_outline || has_color))
 	    goto bail1;
     }
diff --git a/src/fclang.c b/src/fclang.c
index 687e2a7..9f3e046 100644
--- a/src/fclang.c
+++ b/src/fclang.c
@@ -415,10 +415,10 @@
 	c2 = FcToLower (c2);
 	if (c1 != c2)
 	{
-	    /* see if super has a country while sub is mising one */
+	    /* see if super has a country while sub is missing one */
 	    if (c1 == '-' && c2 == '\0')
 		return FcTrue;
-	    /* see if sub has a country while super is mising one */
+	    /* see if sub has a country while super is missing one */
 	    if (c1 == '\0' && c2 == '-')
 		return FcTrue;
 	    return FcFalse;
diff --git a/src/fclist.c b/src/fclist.c
index 053803b..51634ce 100644
--- a/src/fclist.c
+++ b/src/fclist.c
@@ -222,7 +222,7 @@
 	if (pe->object == FC_NAMELANG_OBJECT)
 	{
 	    /* "namelang" object is the alias object to change "familylang",
-	     * "stylelang" and "fullnamelang" object alltogether. it won't be
+	     * "stylelang" and "fullnamelang" object all together. it won't be
 	     * available on the font pattern. so checking its availability
 	     * causes no results. we should ignore it here.
 	     */
diff --git a/src/fcstr.c b/src/fcstr.c
index cdebe98..864d4aa 100644
--- a/src/fcstr.c
+++ b/src/fcstr.c
@@ -409,7 +409,7 @@
 }
 
 /*
- * returns the number of strings (ignoring delimitors and case) being matched
+ * returns the number of strings (ignoring delimiters and case) being matched
  */
 
 int
