diff --git a/build-tools/doctool/src/com/google/doctool/custom/ExampleTaglet.java b/build-tools/doctool/src/com/google/doctool/custom/ExampleTaglet.java
index 7d7db70..49c3001 100644
--- a/build-tools/doctool/src/com/google/doctool/custom/ExampleTaglet.java
+++ b/build-tools/doctool/src/com/google/doctool/custom/ExampleTaglet.java
@@ -81,6 +81,9 @@
         });
 
     String slurpSource = Booklet.slurpSource(position);
+    // The <pre> tag still requires '<' and '>' characters to be escaped
+    slurpSource = slurpSource.replace("<", "&lt;");
+    slurpSource = slurpSource.replace(">", "&gt;");
     return "<blockquote><pre>" + slurpSource + "</pre></blockquote>";
   }
 
diff --git a/samples/expenses/README-MAVEN.txt b/samples/expenses/README-MAVEN.txt
index 40e8546..cbb08be 100644
--- a/samples/expenses/README-MAVEN.txt
+++ b/samples/expenses/README-MAVEN.txt
@@ -4,9 +4,12 @@
 Eclipse. We've tested against Eclipse 3.5. Later versions will likely
 also work, earlier versions may not.
 
-Eclipse users will need to have the m2eclipse, or equivalent, pluigin
-installed. Instructions for how to install the m2eclipse plugin can
-be found here: http://m2eclipse.sonatype.org/installing-m2eclipse.html
+Eclipse users will need to install the following plugin components:
+- Google Plugin for Eclipse (instructions at http://code.google.com/eclipse/)
+- m2eclipse Core
+- Maven Integration for WTP (in m2eclipse extras)
+  Instructions for installing the maven plugins can be found here:
+  http://m2eclipse.sonatype.org/installing-m2eclipse.html
 
 Ensure Eclipse is configured to use Java 1.6 as this sample uses
 AppEngine.
diff --git a/samples/expenses/pom.xml b/samples/expenses/pom.xml
index 5b1b174..e22bf9a 100644
--- a/samples/expenses/pom.xml
+++ b/samples/expenses/pom.xml
@@ -25,11 +25,6 @@
 				<enabled>true</enabled>
 			</snapshots>
 		</repository>
-	<repository>
-            <id>maven-gae-plugin-repo</id>
-            <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
-            <name>maven-gae-plugin repository</name>
-        </repository>
         <repository>
             <id>spring-maven-release</id>
             <name>Spring Maven Release Repository</name>
@@ -155,7 +150,7 @@
 	<dependency>
             <groupId>com.google.appengine.orm</groupId>
             <artifactId>datanucleus-appengine</artifactId>
-            <version>1.0.7.final</version>
+            <version>1.0.7</version>
         </dependency>
         <!-- must be in main dependencies as well as plugin dependencies below -->
         <dependency>
@@ -416,6 +411,9 @@
             <artifactId>json</artifactId>
             <version>20090211</version>
         </dependency>
+        <!-- Uncomment appengine-local-runtime and appengine-tools-api to be able to run App Engine unit tests -->
+        <!-- With these uncommented, you must run mvn gae:unpack before importing the project into Eclipse -->
+        <!-- 
     <dependency>
             <groupId>com.google.appengine</groupId>
             <artifactId>appengine-local-runtime</artifactId>
@@ -430,6 +428,7 @@
             <scope>system</scope>
             <systemPath>${gae.home}/lib/appengine-tools-api.jar</systemPath>
         </dependency>
+         -->
     <dependency>
     	<groupId>net.sf.jsr107cache</groupId>
     	<artifactId>jsr107cache</artifactId>
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ioc/Factory.java b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ioc/Factory.java
deleted file mode 100644
index f2dfc9e..0000000
--- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ioc/Factory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * 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.gwt.sample.expenses.client.ioc;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.shared.EventBus;
-import com.google.gwt.event.shared.SimpleEventBus;
-import com.google.gwt.place.shared.PlaceController;
-import com.google.gwt.place.shared.PlaceHistoryHandler;
-import com.google.gwt.sample.expenses.client.ExpenseDetails;
-import com.google.gwt.sample.expenses.client.ExpenseTree;
-import com.google.gwt.sample.expenses.client.ExpensesApp;
-import com.google.gwt.sample.expenses.client.ExpensesShell;
-import com.google.gwt.sample.expenses.client.place.ExpensesPlaceHistoryMapper;
-import com.google.gwt.sample.expenses.client.place.ReportListPlace;
-import com.google.gwt.sample.expenses.client.place.ReportPlace;
-import com.google.gwt.sample.expenses.shared.ExpensesRequestFactory;
-
-/**
- * In charge of instantiation.
- * <p>
- * TODO: Use {@link http ://code.google.com/p/google-gin/} to generate this
- */
-public class Factory {
-
-  private final EventBus eventBus = new SimpleEventBus();
-  private final ExpensesRequestFactory requestFactory = GWT.create(ExpensesRequestFactory.class);
-  private final ExpensesPlaceHistoryMapper historyMapper = GWT.create(ExpensesPlaceHistoryMapper.class);
-  private final PlaceHistoryHandler placeHistoryHandler;
-  private final PlaceController placeController = new PlaceController(eventBus);
-
-  public Factory() {
-    requestFactory.initialize(eventBus);
-    historyMapper.setFactory(this);
-    placeHistoryHandler = new PlaceHistoryHandler(historyMapper);
-  }
-
-  public ExpensesApp getExpensesApp() {
-    return new ExpensesApp(requestFactory, eventBus, new ExpensesShell(
-        new ExpenseTree(requestFactory), new ExpenseDetails(requestFactory)),
-        placeHistoryHandler, placeController);
-  }
-
-  public ReportListPlace.Tokenizer getListTokenizer() {
-    return new ReportListPlace.Tokenizer(requestFactory);
-  }
-
-  public ReportPlace.Tokenizer getReportTokenizer() {
-    return new ReportPlace.Tokenizer(getListTokenizer(), requestFactory);
-  }
-}
diff --git a/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java b/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
index 22c1354..ad072b1 100644
--- a/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
+++ b/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
@@ -32,6 +32,9 @@
 
 import net.sourceforge.htmlunit.corejs.javascript.ScriptableObject;
 
+import org.w3c.css.sac.CSSParseException;
+import org.w3c.css.sac.ErrorHandler;
+
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.util.ArrayList;
@@ -91,6 +94,25 @@
     public void run() {
       WebClient webClient = new WebClient(browser);
       webClient.setAlertHandler(this);
+      // Adding a handler that ignores errors to work-around
+      // https://sourceforge.net/tracker/?func=detail&aid=3090806&group_id=47038&atid=448266
+      webClient.setCssErrorHandler(new ErrorHandler() {
+
+        public void error(CSSParseException exception) {
+          // ignore
+        }
+
+        public void fatalError(CSSParseException exception) {
+          treeLogger.log(TreeLogger.WARN,
+              "CSS fatal error: " + exception.getURI() + " ["
+                  + exception.getLineNumber() + ":"
+                  + exception.getColumnNumber() + "] " + exception.getMessage());
+        }
+
+        public void warning(CSSParseException exception) {
+          // ignore
+        }
+      });
       webClient.setIncorrectnessListener(this);
       webClient.setThrowExceptionOnFailingStatusCode(false);
       webClient.setThrowExceptionOnScriptError(true);
