diff --git a/it-selenium/pom.xml b/it-selenium/pom.xml
index d5052cd..f4f28d2 100644
--- a/it-selenium/pom.xml
+++ b/it-selenium/pom.xml
@@ -33,7 +33,8 @@
     <packaging>war</packaging>
 
     <properties>
-        <selenium.version>2.39.0</selenium.version>
+        <selenium.version>2.47.1</selenium.version>
+        <javamail.version>1.4.7</javamail.version>
     </properties>
 
     <!-- Process to run Selenium tests (actually no tests right now, just a skeleton)
@@ -184,6 +185,11 @@
                         <artifactId>derbyclient</artifactId>
                         <version>${derby.version}</version>
                     </dependency>
+                    <dependency>
+                        <groupId>javax.mail</groupId>
+                        <artifactId>mail</artifactId>
+                        <version>${javamail.version}</version>
+                    </dependency>
                 </dependencies>
             </plugin>
         </plugins>
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/AbstractRollerPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/AbstractRollerPage.java
index 2e17128..5bd89a9 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/AbstractRollerPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/AbstractRollerPage.java
@@ -21,6 +21,7 @@
 import org.openqa.selenium.NoSuchElementException;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.Select;
 
 /**
  * Abstract class holding functionality common to Selenium Page Objects
@@ -73,4 +74,9 @@
     protected String getTextById(String fieldId) {
         return driver.findElement(By.id(fieldId)).getText();
     }
+
+    protected void selectOptionByVisibleText(String selectId, String visibleText) {
+        Select select = new Select(driver.findElement(By.id(selectId)));
+        select.selectByVisibleText(visibleText);
+    }
 }
\ No newline at end of file
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/InitialLoginTestIT.java b/it-selenium/src/test/java/org/apache/roller/selenium/InitialLoginTestIT.java
index a8069bd..2c5f019 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/InitialLoginTestIT.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/InitialLoginTestIT.java
@@ -35,6 +35,7 @@
 import org.apache.roller.selenium.editor.EntryEditPage;
 import org.apache.roller.selenium.view.BlogHomePage;
 import org.apache.roller.selenium.view.SingleBlogEntryPage;
+import org.openqa.selenium.firefox.FirefoxProfile;
 
 public class InitialLoginTestIT {
     private WebDriver driver;
@@ -44,7 +45,9 @@
 
     @Before
     public void setUp() throws Exception {
-        driver = new FirefoxDriver();
+        FirefoxProfile profile = new FirefoxProfile();
+        profile.setPreference("intl.accept_languages", "en_US");
+        driver = new FirefoxDriver(profile);
         baseUrl = "http://localhost:8080/roller/";
         driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
     }
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/core/CreateWeblogPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/core/CreateWeblogPage.java
index 971130d..1c0a75a 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/core/CreateWeblogPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/core/CreateWeblogPage.java
@@ -44,6 +44,7 @@
         setName(name);
         setHandle(handle);
         setEmail(email);
+        setLocale("English");
         return createWeblog();
     }
 
@@ -63,4 +64,8 @@
         setFieldValue("createWeblog_bean_emailAddress", value);
     }
 
+    public void setLocale(String value) {
+        selectOptionByVisibleText("createWeblog_bean_locale", value);
+    }
+
 }
diff --git a/it-selenium/src/test/java/org/apache/roller/selenium/editor/AbstractEntryPage.java b/it-selenium/src/test/java/org/apache/roller/selenium/editor/AbstractEntryPage.java
index 552c5ee..2f566da 100644
--- a/it-selenium/src/test/java/org/apache/roller/selenium/editor/AbstractEntryPage.java
+++ b/it-selenium/src/test/java/org/apache/roller/selenium/editor/AbstractEntryPage.java
@@ -32,7 +32,7 @@
     }
 
     public void setText(String value) {
-        setFieldValue("entry_bean_text", value);
+        setFieldValue("edit_content", value);
     }
 
     public void setSummary(String value) {
@@ -40,7 +40,7 @@
     }
 
     public EntryEditPage postBlogEntry() {
-        clickById("entry_2");
+        clickById("entry_%{#mainAction}!publish");
         return new EntryEditPage(driver);
     }
 }
