diff --git a/Rendering/Core/vtkTextMapper.cxx b/Rendering/Core/vtkTextMapper.cxx
index bb5b2b7fe7b5bd79600a753ed1492775d23c89a4..a16ce004d31932d84a56c788b067d51ebc5479d1 100644
--- a/Rendering/Core/vtkTextMapper.cxx
+++ b/Rendering/Core/vtkTextMapper.cxx
@@ -441,21 +441,17 @@ void vtkTextMapper::UpdateQuad(vtkActor2D *actor, int dpi)
     int dims[3];
     this->Image->GetDimensions(dims);
 
-    // Add a fudge factor to the texture coordinates to prevent the top
-    // row of pixels from being truncated on some systems. The coordinates
-    // are calculated to be centered on a texel and trim the padding from the
-    // image. (padding is often added to create textures that have power-of-two
-    // dimensions)
+    // The coordinates are calculated to be centered on a texel and
+    // trim the padding from the image. (padding is often added to
+    // create textures that have power-of-two dimensions)
     float tw = static_cast<float>(this->TextDims[0]);
     float th = static_cast<float>(this->TextDims[1]);
     float iw = static_cast<float>(dims[0]);
     float ih = static_cast<float>(dims[1]);
-    float tcXMin = 1.f / (2.f * iw);
-    float tcYMin = 1.f / (2.f * ih);
-    float tcXMax = std::min(1.0f,
-                            (((2.f * tw - 1.f) / (2.f)) + 0.000001f) / iw);
-    float tcYMax = std::min(1.0f,
-                            (((2.f * th - 1.f) / (2.f)) + 0.000001f) / ih);
+    float tcXMin = 0;
+    float tcYMin = 0;
+    float tcXMax = static_cast<float>(tw) / iw;
+    float tcYMax = static_cast<float>(th) / ih;
     if (vtkFloatArray *tc =
         vtkArrayDownCast<vtkFloatArray>(
           this->PolyData->GetPointData()->GetTCoords()))
diff --git a/Rendering/FreeType/vtkFreeTypeTools.cxx b/Rendering/FreeType/vtkFreeTypeTools.cxx
index 4d2bc7d16e9de98f564882b9dc97a37906f744ca..5e944d3944972840391fcb4e396f469314599693 100644
--- a/Rendering/FreeType/vtkFreeTypeTools.cxx
+++ b/Rendering/FreeType/vtkFreeTypeTools.cxx
@@ -1357,6 +1357,7 @@ bool vtkFreeTypeTools::RenderStringInternal(vtkTextProperty *tprop,
       ptr[3] = 255;
       }
     }
+
   return true;
 }
 
@@ -1509,8 +1510,12 @@ bool vtkFreeTypeTools::CalculateBoundingBox(const T& str,
   // The rotated padding on the text's vertical and horizontal axes:
   vtkVector2i hPad(pad, 0);
   vtkVector2i vPad(0, pad);
+  vtkVector2i hOne(1, 0);
+  vtkVector2i vOne(0, 1);
   rotateVector2i(hPad, s, c);
   rotateVector2i(vPad, s, c);
+  rotateVector2i(hOne, s, c);
+  rotateVector2i(vOne, s, c);
 
   // Calculate the bottom left corner of the data rect. Start at anchor point
   // (0, 0) and subtract out justification. Account for background/frame padding to
@@ -1522,7 +1527,7 @@ bool vtkFreeTypeTools::CalculateBoundingBox(const T& str,
       metaData.BL = metaData.BL - (metaData.dx * 0.5);
       break;
     case VTK_TEXT_RIGHT:
-      metaData.BL = metaData.BL - metaData.dx + hPad;
+      metaData.BL = metaData.BL - metaData.dx + hPad + hOne;
       break;
     case VTK_TEXT_LEFT:
       metaData.BL = metaData.BL - hPad;
@@ -1541,7 +1546,7 @@ bool vtkFreeTypeTools::CalculateBoundingBox(const T& str,
       metaData.BL = metaData.BL - vPad;
       break;
     case VTK_TEXT_TOP:
-      metaData.BL = metaData.BL - metaData.dy + vPad;
+      metaData.BL = metaData.BL - metaData.dy + vPad + vOne;
       break;
     default:
       vtkErrorMacro(<< "Bad vertical alignment flag: "
@@ -1550,9 +1555,9 @@ bool vtkFreeTypeTools::CalculateBoundingBox(const T& str,
     }
 
   // Compute the other corners of the data:
-  metaData.TL = metaData.BL + metaData.dy;
-  metaData.TR = metaData.TL + metaData.dx;
-  metaData.BR = metaData.BL + metaData.dx;
+  metaData.TL = metaData.BL + metaData.dy - vOne;
+  metaData.TR = metaData.TL + metaData.dx - hOne;
+  metaData.BR = metaData.BL + metaData.dx - hOne;
 
   // First baseline offset from top-left corner.
   vtkVector2i penOffset(pad, -pad);