diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index 586bd57..79133ba 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -465,7 +465,7 @@
   return st.wDayOfWeek;
 }
 
-/* add/substract 'months' from date */
+/* add/subtract 'months' from date */
 static inline void MONTHCAL_GetMonth(SYSTEMTIME *date, INT months)
 {
   INT length, m = date->wMonth + months;
@@ -2560,7 +2560,7 @@
   MONTHCAL_SetFont(infoPtr, GetStockObject(DEFAULT_GUI_FONT), FALSE);
 
   /* initialize info structure */
-  /* FIXME: calculate systemtime ->> localtime(substract timezoneinfo) */
+  /* FIXME: calculate systemtime ->> localtime(subtract timezoneinfo) */
 
   GetLocalTime(&infoPtr->todaysDate);
   MONTHCAL_SetFirstDayOfWeek(infoPtr, -1);
diff --git a/dlls/cryptnet/tests/cryptnet.c b/dlls/cryptnet/tests/cryptnet.c
index 1be327e..683c6b6 100644
--- a/dlls/cryptnet/tests/cryptnet.c
+++ b/dlls/cryptnet/tests/cryptnet.c
@@ -721,7 +721,7 @@
     CertCloseStore(revPara.hCrlStore, 0);
     /* Test again with a valid CRL.  This time, the cert should be revoked when
      * the time is after the validity period of the CRL, or considered
-     * "revocation offline" when the the checked time precedes the validity
+     * "revocation offline" when the checked time precedes the validity
      * period of the CRL.
      */
     revPara.hCrlStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c
index a655974..db98419 100644
--- a/dlls/d3d9/tests/visual.c
+++ b/dlls/d3d9/tests/visual.c
@@ -5179,10 +5179,10 @@
      * set by the compiler, it was added manually after compilation. Note that the COISSUE
      * flag on a color(.xyz) operation is only allowed after an alpha operation. DirectX doesn't
      * have proper docs, but GL_ATI_fragment_shader explains the pairing of color and alpha ops
-     * good enough.
+     * well enough.
      *
      * The shader attempts to test the range [-1;1] against coissued cnd, which is a bit tricky.
-     * The input from t0 is [0;1]. 0.5 is substracted, then we have to multiply with 2. Since
+     * The input from t0 is [0;1]. 0.5 is subtracted, then we have to multiply with 2. Since
      * constants are clamped to [-1;1], a 2.0 is constructed by adding c0.r(=1.0) to c0.r into r1.r,
      * then r1(2.0, 0.0, 0.0, 0.0) is passed to dp3(explained above).
      */
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
index 201b2b3..4dffa62 100644
--- a/dlls/d3dx9_36/mesh.c
+++ b/dlls/d3dx9_36/mesh.c
@@ -2454,7 +2454,7 @@
     /* Perform 2D polygon triangulation for complex glyphs.
      * Triangulation is performed using a sweep line concept, from right to left,
      * by processing vertices in sorted order. Complex polygons are split into
-     * monotone polygons which are triangulated seperately. */
+     * monotone polygons which are triangulated separately. */
     /* FIXME: The order of the faces is not consistent with the native implementation. */
 
     /* Reserve space for maximum possible faces from triangulation.
diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c
index bde8595..5367745 100644
--- a/dlls/d3dx9_36/tests/mesh.c
+++ b/dlls/d3dx9_36/tests/mesh.c
@@ -2530,7 +2530,7 @@
         }
 
         /* FIXME: compute expected faces */
-        /* Add placeholder to seperate glyph outlines */
+        /* Add placeholder to separate glyph outlines */
         vertex_ptr->position.x = 0;
         vertex_ptr->position.y = 0;
         vertex_ptr->position.z = 0;
diff --git a/dlls/gdiplus/gdiplus.c b/dlls/gdiplus/gdiplus.c
index 8c08660..8026f6e 100644
--- a/dlls/gdiplus/gdiplus.c
+++ b/dlls/gdiplus/gdiplus.c
@@ -119,7 +119,7 @@
 ULONG WINAPI GdiplusShutdown_wrapper(ULONG_PTR token)
 {
     /* Notice the slightly different prototype from the official
-     * signature which forces us to use the the _wrapper suffix.
+     * signature which forces us to use the _wrapper suffix.
      */
 
     /* FIXME: no object tracking */
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
index 3eedf30..6f41adf 100644
--- a/dlls/iphlpapi/tests/iphlpapi.c
+++ b/dlls/iphlpapi/tests/iphlpapi.c
@@ -834,7 +834,7 @@
     }
     ok(ret == ERROR_IO_PENDING, "NotifyAddrChange returned %d, expected ERROR_IO_PENDING\n", ret);
     ret = GetLastError();
-    todo_wine ok(ret == ERROR_IO_PENDING, "GetLastError returned %d, excepted ERROR_IO_PENDING\n", ret);
+    todo_wine ok(ret == ERROR_IO_PENDING, "GetLastError returned %d, expected ERROR_IO_PENDING\n", ret);
     success = gCancelIPChangeNotify(&overlapped);
     todo_wine ok(success == TRUE, "CancelIPChangeNotify returned FALSE, expected TRUE\n");
 
@@ -849,9 +849,9 @@
     ok(ret == ERROR_IO_PENDING, "NotifyAddrChange returned %d, expected ERROR_IO_PENDING\n", ret);
     todo_wine ok(handle != INVALID_HANDLE_VALUE, "NotifyAddrChange returned invalid file handle\n");
     success = GetOverlappedResult(handle, &overlapped, &bytes, FALSE);
-    todo_wine ok(success == FALSE, "GetOverlappedResult returned TRUE, excepted FALSE\n");
+    todo_wine ok(success == FALSE, "GetOverlappedResult returned TRUE, expected FALSE\n");
     ret = GetLastError();
-    todo_wine ok(ret == ERROR_IO_INCOMPLETE, "GetLastError returned %d, excepted ERROR_IO_INCOMPLETE\n", ret);
+    todo_wine ok(ret == ERROR_IO_INCOMPLETE, "GetLastError returned %d, expected ERROR_IO_INCOMPLETE\n", ret);
     success = gCancelIPChangeNotify(&overlapped);
     todo_wine ok(success == TRUE, "CancelIPChangeNotify returned FALSE, expected TRUE\n");
 
@@ -860,19 +860,19 @@
         handle = NULL;
         ZeroMemory(&overlapped, sizeof(overlapped));
         overlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
-        trace("Testing asyncronous ipv4 address change notification. Please "
-              "change ipv4 address of one of your network interfaces\n");
+        trace("Testing asynchronous ipv4 address change notification. Please "
+              "change the ipv4 address of one of your network interfaces\n");
         ret = gNotifyAddrChange(&handle, &overlapped);
         ok(ret == ERROR_IO_PENDING, "NotifyAddrChange returned %d, expected NO_ERROR\n", ret);
         success = GetOverlappedResult(handle, &overlapped, &bytes, TRUE);
-        ok(success == TRUE, "GetOverlappedResult returned FALSE, excepted TRUE\n");
+        ok(success == TRUE, "GetOverlappedResult returned FALSE, expected TRUE\n");
     }
 
-    /* test syncronous functionality */
+    /* test synchronous functionality */
     if (winetest_interactive)
     {
-        trace("Testing syncronous ipv4 address change notification. Please "
-              "change ipv4 address of one of your network interfaces\n");
+        trace("Testing synchronous ipv4 address change notification. Please "
+              "change the ipv4 address of one of your network interfaces\n");
         ret = gNotifyAddrChange(NULL, NULL);
         todo_wine ok(ret == NO_ERROR, "NotifyAddrChange returned %d, expected NO_ERROR\n", ret);
     }
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index e93f1e9..eb2ba8f 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -1117,7 +1117,7 @@
         *result = &This->nsIAsyncVerifyRedirectCallback_iface;
     }else {
         *result = NULL;
-        WARN("unimplmented iface %s\n", debugstr_guid(riid));
+        WARN("unimplemented iface %s\n", debugstr_guid(riid));
         return NS_NOINTERFACE;
     }
 
diff --git a/dlls/mshtml/tests/exectest.html b/dlls/mshtml/tests/exectest.html
index 1d84917..ad94f42 100644
--- a/dlls/mshtml/tests/exectest.html
+++ b/dlls/mshtml/tests/exectest.html
@@ -21,7 +21,7 @@
 
 len = document.getElementsByTagName('script').length;
 ok(len === 2, "script col length = " + len);
-ok(executed, "writen script not executed");
+ok(executed, "written script not executed");
 
 external.reportSuccess();
 </script>
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index c9bfa49..f828241 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -7179,7 +7179,7 @@
         VariantClear(&value);
     }
 
-    hr = IXMLDOMDocument_createCDATASection(doc, _bstr_("[1]*2=3; &gee thats not right!"), &cdata);
+    hr = IXMLDOMDocument_createCDATASection(doc, _bstr_("[1]*2=3; &gee that's not right!"), &cdata);
     ok(hr == S_OK, "ret %08x\n", hr );
     {
         V_VT(&value) = VT_NULL;
@@ -7187,7 +7187,7 @@
         hr = IXMLDOMCDATASection_get_nodeTypedValue(cdata, &value);
         ok(hr == S_OK, "ret %08x\n", hr );
         ok(V_VT(&value) == VT_BSTR, "got %d\n", V_VT(&value));
-        ok(!lstrcmpW(V_BSTR(&value), _bstr_("[1]*2=3; &gee thats not right!")), "got wrong value\n");
+        ok(!lstrcmpW(V_BSTR(&value), _bstr_("[1]*2=3; &gee that's not right!")), "got wrong value\n");
         IXMLDOMCDATASection_Release(cdata);
         VariantClear(&value);
     }
diff --git a/dlls/user.exe16/message.c b/dlls/user.exe16/message.c
index bc81d45..d10ecb6 100644
--- a/dlls/user.exe16/message.c
+++ b/dlls/user.exe16/message.c
@@ -1425,7 +1425,7 @@
     case CB_GETEDITSEL:
         ret = callback( HWND_16(hwnd), CB_GETEDITSEL16, wParam, lParam, result, arg );
         if (wParam) *((PUINT)(wParam)) = LOWORD(*result);
-        if (lParam) *((PUINT)(lParam)) = HIWORD(*result);  /* FIXME: substract 1? */
+        if (lParam) *((PUINT)(lParam)) = HIWORD(*result);  /* FIXME: subtract 1? */
         break;
     case CB_ADDSTRING:
     case CB_FINDSTRING:
diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c
index 83bdd87..d84145b 100644
--- a/dlls/usp10/tests/usp10.c
+++ b/dlls/usp10/tests/usp10.c
@@ -1120,7 +1120,7 @@
         ok(piTrailing == 1, "iX=%d should return piTrailing=1 not %d\n", iX, piTrailing);
     }
 
-    /* 0,1,2 are actaully fractional offsets meaning that they will not be reporting the same iCP as comes in so dont test those */
+    /* 0,1,2 are actually fractional offsets meaning that they will not be reporting the same iCP as comes in so don't test those */
     for(iCP = 3; iCP < 10; iCP++)
     {
         iX = offsets[iCP];
@@ -1240,7 +1240,7 @@
  *
  * This set of tests are for the string functions of uniscribe.  The ScriptStringAnalyse
  * function allocates memory pointed to by the SCRIPT_STRING_ANALYSIS ssa pointer.  This
- * memory if freed by ScriptStringFree.  There needs to be a valid hdc for this as
+ * memory is freed by ScriptStringFree.  There needs to be a valid hdc for this as
  * ScriptStringAnalyse calls ScriptSItemize, ScriptShape and ScriptPlace which require it.
  *
  */
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 6898603..99f189b 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -1380,7 +1380,7 @@
     }
 
     /* DirectDraw supports 8bit paletted render targets and these are used by
-     * old games like Starcraft and C&C. Most modern hardware doesn't support
+     * old games like StarCraft and C&C. Most modern hardware doesn't support
      * 8bit natively so we perform some form of 8bit -> 32bit conversion. The
      * conversion (ab)uses the alpha component for storing the palette index.
      * For this reason we require a format with 8bit alpha, so request
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 6948ec3..f1049a3 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -1213,7 +1213,7 @@
         /* DirectX apps expect integer values, while OpenGL drivers add approximately 0.5. This causes
          * off-by-one problems as spotted by the vPos d3d9 visual test. Unfortunately the ATI cards do
          * not add exactly 0.5, but rather something like 0.49999999 or 0.50000001, which still causes
-         * precision troubles when we just substract 0.5.
+         * precision troubles when we just subtract 0.5.
          *
          * To deal with that just floor() the position. This will eliminate the fraction on all cards.
          *
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index a9663d4..8289083 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -263,7 +263,7 @@
         /* To compensate for the lack of format switching with backbuffer
          * offscreen rendering, and with onscreen rendering, we modify the
          * alpha test parameters for (INV)DESTALPHA if the render target
-         * doesn't support alpha blending. A non-existent alpha channel
+         * doesn't support alpha blending. A nonexistent alpha channel
          * returns 1.0, so WINED3DBLEND_DESTALPHA becomes GL_ONE, and
          * WINED3DBLEND_INVDESTALPHA becomes GL_ZERO. */
         case WINED3DBLEND_DESTALPHA:
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 920e59d..0d81952 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -207,9 +207,9 @@
     }
 
     /* Obtaining the raster status is a widely implemented but optional
-     * feature. When this method returns OK Starcraft 2 expects the
+     * feature. When this method returns OK StarCraft 2 expects the
      * raster_status->InVBlank value to actually change over time. To prevent
-     * Starcraft 2 from running in an infinite loop at startup this method
+     * StarCraft 2 from running in an infinite loop at startup this method
      * returns INVALIDCALL. */
     return WINED3DERR_INVALIDCALL;
 }
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index 2a44cfd..9787dd3 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -905,7 +905,7 @@
 
     if (err != noErr)
     {
-        FIXME("Quicktime cannot handle media type(%i)\n",err);
+        FIXME("QuickTime cannot handle media type(%i)\n",err);
         return VFW_E_TYPE_NOT_ACCEPTED;
     }
 
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 1f1a059..e566c5d 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -1179,7 +1179,7 @@
                     line_len += len;
 
                     /* At this point we know wstr is '\0'-terminated
-                     * so we can substract 1 from the size
+                     * so we can subtract 1 from the size
                      */
                     REGPROC_export_string(line_buf, line_buf_size, &line_len, wstr, val_size1 / sizeof(WCHAR) - 1);
 
