diff --git a/src/Classic/AbsBeamline/VariableRFCavityFringeField.cpp b/src/Classic/AbsBeamline/VariableRFCavityFringeField.cpp
index c5c6712a10a5d8c7c0affa2a0663ba03a4789a94..a1791b6fe12de32acf8356592fe52fec8d483b0d 100644
--- a/src/Classic/AbsBeamline/VariableRFCavityFringeField.cpp
+++ b/src/Classic/AbsBeamline/VariableRFCavityFringeField.cpp
@@ -141,7 +141,7 @@ bool VariableRFCavityFringeField::apply(const Vector_t &R, const Vector_t &P, co
         B[0] += B_cos_t*y_power[n]*hCoeff;
         //std::cerr << "APPLY B " << n << " " << B[0] << " " << hCoeff << std::endl;
     }
-    B *= 1e4; //B natural units are kT; convert to kGauss
+    B *= 1e1; //B converted to kGauss
     return false;
 }
 
@@ -191,10 +191,10 @@ void VariableRFCavityFringeField::initialiseCoefficients() {
         std::vector<double> f_np2 = std::vector<double>(f_n.size()+2, 0.); // f_{n+2}
         double n_const = 1./(n+1.)/(n+2.);
         for (size_t j = 0; j < f_n.size(); ++j) {
-            f_np2[j] += f_n[j]*n_const/c_l/c_l;
+            f_np2[j] -= f_n[j]*n_const/c_l/c_l;
         }
         for (size_t j = 0; j < f_n.size(); ++j) {
-            f_np2[j+2] += f_n[j]*n_const;
+            f_np2[j+2] -= f_n[j]*n_const;
         }
         f_m.push_back(f_np2);
     }
@@ -225,8 +225,6 @@ void VariableRFCavityFringeField::printCoefficients(std::ostream& out) const {
     out << std::endl;
 }
 
-
-
 void VariableRFCavityFringeField::setEndField(
                             std::shared_ptr<endfieldmodel::EndFieldModel> end) {
     endField_m = end;
diff --git a/tests/classic_src/AbsBeamline/VariableRFCavityFringeFieldTest.cpp b/tests/classic_src/AbsBeamline/VariableRFCavityFringeFieldTest.cpp
index b23f5c586f731f4565d6b8af2c60190cbbcf53f8..650b8fe674bf154d12b7db89cea93ac1c59eac65 100644
--- a/tests/classic_src/AbsBeamline/VariableRFCavityFringeFieldTest.cpp
+++ b/tests/classic_src/AbsBeamline/VariableRFCavityFringeFieldTest.cpp
@@ -39,8 +39,6 @@
 class VariableRFCavityFringeFieldTest : public ::testing::Test { 
 public:
     VariableRFCavityFringeFieldTest() {
-        // OpalTestUtilities::SilenceTest silencer;
-
         cav1 = VariableRFCavityFringeField("bob");
         // centre, end, max_order
         shared = std::shared_ptr<endfieldmodel::EndFieldModel>
@@ -72,10 +70,10 @@ public:
     VariableRFCavityFringeField cav1;
     VariableRFCavityFringeField cav2;
     std::shared_ptr<endfieldmodel::EndFieldModel> shared;
+    OpalTestUtilities::SilenceTest silencer;
 };
 
 TEST_F(VariableRFCavityFringeFieldTest, TestConstructor) {
-    OpalTestUtilities::SilenceTest silencer;
     VariableRFCavityFringeField cav("bob");
     EXPECT_FLOAT_EQ(cav.getCavityCentre(), 0.);
     endfieldmodel::EndFieldModel* null = NULL;
@@ -83,7 +81,6 @@ TEST_F(VariableRFCavityFringeFieldTest, TestConstructor) {
 }
 
 TEST_F(VariableRFCavityFringeFieldTest, TestSetGet) {
-    OpalTestUtilities::SilenceTest silencer;
     EXPECT_FLOAT_EQ(cav1.getCavityCentre(), 0.5); // mm
     EXPECT_FLOAT_EQ(cav1.getWidth(), 0.2); // metres
     EXPECT_EQ(&(*(cav1.getEndField())), &(*shared));
@@ -207,7 +204,7 @@ Vector_t testMaxwell4(VariableRFCavityFringeField& cav, Vector_t pos, double t,
         dBdx[1] - dBdy[0]
     );
     double c_l = Physics::c*1e-6; // 3e8 m/s = 300 mm/ns
-    Vector_t result = dEdt - curlB*1e-4*c_l*c_l;
+    Vector_t result = dEdt - curlB*1e-1*c_l*c_l;
 
     if (verbose) {
         std::cerr << "dBdx           " << dBdx*1e-3 << std::endl;
@@ -236,7 +233,7 @@ Vector_t testMaxwell3(VariableRFCavityFringeField& cav, Vector_t pos, double t,
         dEdz[0] - dEdx[2],
         dEdx[1] - dEdy[0]
     );
-    Vector_t result = dBdt*1e-4 - curlE;
+    Vector_t result = dBdt*1e-1 + curlE;
 
     if (verbose) {
         std::cerr << "maxwell3 at R: " << pos << " t: " << t << " with dx: " 
@@ -271,8 +268,10 @@ std::vector<double> testMaxwell1and2(VariableRFCavityFringeField& cav, Vector_t
     if (verbose) {
         std::cerr << "maxwell1+2 at R: " << pos << " t: " << t << " with dx: " 
                   << deltaPos << std::endl;
-        std::cerr << "  dEidi          " << dEdx[0] << " " << dEdy[1] << " " << dEdz[2] << std::endl;
-        std::cerr << "  dBidi          " << dBdx[0] << " " << dBdy[1] << " " << dBdz[2] << std::endl;
+        std::cerr << "  dEidi          "
+                  << dEdx[0] << " " << dEdy[1] << " " << dEdz[2] << std::endl;
+        std::cerr << "  dBidi          "
+                  << dBdx[0] << " " << dBdy[1] << " " << dBdz[2] << std::endl;
         std::cerr << "  divE           " << divE << std::endl;
         std::cerr << "  divB           " << divB << std::endl;
     }
@@ -280,6 +279,28 @@ std::vector<double> testMaxwell1and2(VariableRFCavityFringeField& cav, Vector_t
     return result;
 }
 
+
+TEST_F(VariableRFCavityFringeFieldTest, TestField) {
+    Vector_t centroid(0., 0., 0.);
+    double t = 0.;
+    cav2.setMaxOrder(4);
+    std::cerr << "\nOff midplane, 45 degree phase, in fringe field" << std::endl;
+    std::cerr << "order B        E   max1   max2   maxwell3    maxwell4" << std::endl;
+    t = 0.125;
+    for (double s = 0; s < 1000.; s += 10.) {
+        Vector_t B0(0., 0., 0.);
+        Vector_t E0(0., 0., 0.);
+        Vector_t B10(0., 0., 0.);
+        Vector_t E10(0., 0., 0.);
+        Vector_t R(0., 0., 0.);
+        R = Vector_t(0., 0., s);
+        cav2.apply(R, centroid, t, E0, B0);
+        R = Vector_t(0., 10., s);
+        cav2.apply(R, centroid, t, E10, B10);
+        std::cerr << s << " " << E0 << " " << E10 << " " << B10 << std::endl;
+    }
+}
+
 TEST_F(VariableRFCavityFringeFieldTest, TestMaxwell) {
     //double pi = Physics::pi;
     Vector_t centroid(0., 0., 0.);
@@ -291,14 +312,20 @@ TEST_F(VariableRFCavityFringeFieldTest, TestMaxwell) {
     std::cerr << "order B        E   max1   max2   maxwell3    maxwell4" << std::endl;
     R = Vector_t(0., 1., 750.);
     t = 0.125;
-    for (size_t i = 0; i < 5; ++i) {
+    for (size_t i = 0; i < 8; ++i) {
         cav2.setMaxOrder(i);
         cav2.apply(R, centroid, t, E, B);
         Vector_t result1 = testMaxwell3(cav2, R, t, 0.01, 0.0001);
         Vector_t result2 = testMaxwell4(cav2, R, t, 0.01, 0.0001);
         std::vector<double> div = testMaxwell1and2(cav2, R, t, 0.01);
-        std::cerr << i << " ** " << B << " " << E << " " << div[0] << " " << div[1] << " " << result1 << " " << result2 << std::endl;
+        std::cerr << i << " ** " << B << " " << E << " " << div[0] << " "
+                  << div[1] << " " << result1 << " " << result2 << std::endl;
 
-      
+        if (i > 0 and i < 5) {
+            EXPECT_LT(div[0], 1e-3);
+            EXPECT_LT(div[1], 1e-3);
+            EXPECT_LT(euclidean_norm(result1), 1e-3);
+            EXPECT_LT(euclidean_norm(result2), 1e-3);
+        }
     }
 }
diff --git a/tests/opal_src/Elements/CMakeLists.txt b/tests/opal_src/Elements/CMakeLists.txt
index 876719a6aff366d13da5c2bda40c2cc7e12106c5..33f0be8f4aaaa6bf79233619703f757ae250bdbd 100644
--- a/tests/opal_src/Elements/CMakeLists.txt
+++ b/tests/opal_src/Elements/CMakeLists.txt
@@ -2,6 +2,7 @@ set (_SRCS
     OpalOffsetTest.cpp
     OpalPolynomialTimeDependenceTest.cpp
     OpalVariableRFCavityTest.cpp
+    OpalVariableRFCavityFringeFieldTest.cpp
 )
 
 include_directories (
diff --git a/tests/opal_src/Elements/OpalVariableRFCavityFringeFieldTest.cpp b/tests/opal_src/Elements/OpalVariableRFCavityFringeFieldTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ad37bef536f304e0703cab763f3049e3e4042978
--- /dev/null
+++ b/tests/opal_src/Elements/OpalVariableRFCavityFringeFieldTest.cpp
@@ -0,0 +1,48 @@
+/*
+ *  Copyright (c) 2014, Chris Rogers
+ *  All rights reserved.
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *  1. Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright notice,
+ *     this list of conditions and the following disclaimer in the documentation
+ *     and/or other materials provided with the distribution.
+ *  3. Neither the name of STFC nor the names of its contributors may be used to
+ *     endorse or promote products derived from this software without specific
+ *     prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *  POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "gtest/gtest.h"
+
+#include "Elements/OpalVariableRFCavityFringeField.h"
+
+#include "opal_test_utilities/SilenceTest.h"
+
+TEST(OpalVariableRFCavityFringeFieldTest, TestConstructorDestructor) {
+    OpalTestUtilities::SilenceTest silencer;
+
+    OpalVariableRFCavityFringeField cav1;
+    EXPECT_EQ((&cav1)->getOpalName(), "VARIABLE_RF_CAVITY_FRINGE_FIELD");
+    OpalVariableRFCavityFringeField cav2("name", &cav1);
+    EXPECT_EQ((&cav2)->getOpalName(), "name");
+    OpalVariableRFCavityFringeField* cav3 = cav2.clone();
+    EXPECT_EQ(cav3->getOpalName(), "name");
+    OpalVariableRFCavityFringeField* cav4 = cav2.clone("other_name");
+    EXPECT_EQ(cav4->getOpalName(), "other_name");
+
+    delete cav4;
+    delete cav3;
+}