diff --git a/src/main/java/com/google/gwtexpui/safehtml/client/RegexFindReplace.java b/src/main/java/com/google/gwtexpui/safehtml/client/RegexFindReplace.java
new file mode 100644
index 0000000..fe272d4
--- /dev/null
+++ b/src/main/java/com/google/gwtexpui/safehtml/client/RegexFindReplace.java
@@ -0,0 +1,42 @@
+// Copyright (C) 2009 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gwtexpui.safehtml.client;
+
+/** A Find/Replace pair used against the SafeHtml block of text */
+public class RegexFindReplace {
+  private String find;
+  private String replace;
+
+  protected RegexFindReplace() {
+  }
+
+  public RegexFindReplace(final String find, final String replace) {
+    this.find = find;
+    this.replace = replace;
+  }
+
+  public String find() {
+    return find;
+  }
+
+  public String replace() {
+    return replace;
+  }
+
+  @Override
+  public String toString() {
+    return "find = " + find + ", replace = " + replace;
+  }
+}
diff --git a/src/main/java/com/google/gwtexpui/safehtml/client/SafeHtml.java b/src/main/java/com/google/gwtexpui/safehtml/client/SafeHtml.java
index b19ad6c..4be11de 100644
--- a/src/main/java/com/google/gwtexpui/safehtml/client/SafeHtml.java
+++ b/src/main/java/com/google/gwtexpui/safehtml/client/SafeHtml.java
@@ -22,6 +22,8 @@
 import com.google.gwt.user.client.ui.InlineHTML;
 import com.google.gwt.user.client.ui.Widget;
 
+import java.util.List;
+
 /** Immutable string safely placed as HTML without further escaping. */
 public abstract class SafeHtml {
   /** @return the existing HTML property of a widget. */
@@ -173,6 +175,21 @@
     return new SafeHtmlString(asString().replaceAll(regex, repl));
   }
 
+  /**
+   * Go through the {@link RegexFindReplace} list, calling {@link #replaceAll()}
+   * on the HTML string for every find/replace pair in the list.
+   */
+  public SafeHtml replaceAll(final List<RegexFindReplace> findReplaceList) {
+    if (findReplaceList == null) {
+      return this;
+    }
+    String html = this.asString();
+    for (RegexFindReplace findReplace : findReplaceList) {
+      html = html.replaceAll(findReplace.find(), findReplace.replace());
+    }
+    return new SafeHtmlString(html);
+  }
+
   /** @return a GWT block display widget displaying this HTML. */
   public Widget toBlockWidget() {
     return new HTML(asString());
