diff --git a/src/Classic/AbsBeamline/VariableRFCavityFringeField.cpp b/src/Classic/AbsBeamline/VariableRFCavityFringeField.cpp
index 2a1e8901d096acb3b23e12024857d77e2ebe37de..c6e461f9ca745af943becf3fa3025d32765edd11 100644
--- a/src/Classic/AbsBeamline/VariableRFCavityFringeField.cpp
+++ b/src/Classic/AbsBeamline/VariableRFCavityFringeField.cpp
@@ -116,24 +116,31 @@ bool VariableRFCavityFringeField::apply(const Vector_t &R, const Vector_t &P, co
     E = Vector_t(0., 0., 0.);
     B = Vector_t(0., 0., 0.);
     // even power of y
+    //std::cerr << "EVEN POWER OF Y maxOrder: " << maxOrder_m << std::endl;
     for (size_t n = 0; n <= maxOrder_m ; n += 2) { // power of y
         double fCoeff = 0.;
         size_t index = n/2;
-        for (size_t i = 0; i < f_m[index].size(); i += 2) { // derivative of f
+        //std::cerr << "Size i: " << index << " f_m[i]: " << f_m[index].size() 
+        //          << " endfield: " << endField.size() << std::endl;
+        for (size_t i = 0; i < f_m[index].size() && i < endField.size(); i += 2) { // derivative of f
             fCoeff += f_m[index][i]*endField[i]*omegaPower[n-i];
         }
         E[2] += E_sin_t*y_power[n]*fCoeff;
     }
     // odd power of y
+    //std::cerr << "ODD POWER OF Y maxOrder: " << maxOrder_m << std::endl;
     for (size_t n = 1; n <= maxOrder_m; n += 2) {
         double gCoeff = 0.;
         double hCoeff = 0.;
         size_t index = (n-1)/2;
-        //std::cerr << "n: " << n << std::endl;
-        for (size_t j = 0; j < g_m[index].size(); ++j) {
+        //std::cerr << "Size i: " << index << " g_m[i]: " << g_m[index].size() << " endfield: " << endField.size() << std::endl;
+        for (size_t j = 0; j < g_m[index].size() && j < endField.size(); ++j) {
+            //std::cerr << "g_m        " << j << " " << g_m[index][j] << std::endl;
+            //std::cerr << "endfield   " << j << " " << endField[j] << std::endl;
+            //std::cerr << "omegaPower " << j << " " << omegaPower[n-j] << std::endl;
             gCoeff += g_m[index][j]*endField[j]*omegaPower[n-j];
         }
-        for (size_t j = 0; j < h_m[index].size(); ++j) {
+        for (size_t j = 0; j < h_m[index].size() && j < endField.size(); ++j) {
             hCoeff += h_m[index][j]*endField[j]*omegaPower[n-j];
             //std::cerr << "j: " << j << " " << hCoeff << " ";
         }
diff --git a/src/Elements/OpalVariableRFCavityFringeField.cpp b/src/Elements/OpalVariableRFCavityFringeField.cpp
index 893cc427007dda0b50995ef7b72f0c5608b65d79..dc170a1a02f4414badc233d54969fc0576244be0 100644
--- a/src/Elements/OpalVariableRFCavityFringeField.cpp
+++ b/src/Elements/OpalVariableRFCavityFringeField.cpp
@@ -163,7 +163,7 @@ void OpalVariableRFCavityFringeField::update() {
     double endLength = Attributes::getReal(itsAttr[END_LENGTH])*1e3;
     endfieldmodel::Tanh* tanh = new endfieldmodel::Tanh(centreLength/2.,
                                                         endLength,
-                                                        (maxOrder+1)/2);
+                                                        maxOrder+1);
     std::shared_ptr<endfieldmodel::EndFieldModel> end(tanh);
     cavity->setEndField(end);
 
diff --git a/tests/classic_src/AbsBeamline/VariableRFCavityFringeFieldTest.cpp b/tests/classic_src/AbsBeamline/VariableRFCavityFringeFieldTest.cpp
index dfe39613346052946e5f8f2306dca27f5714e1d0..c2e8268f1b6946a0b2c1c1d91b34e5e98b25a415 100644
--- a/tests/classic_src/AbsBeamline/VariableRFCavityFringeFieldTest.cpp
+++ b/tests/classic_src/AbsBeamline/VariableRFCavityFringeFieldTest.cpp
@@ -42,7 +42,7 @@ public:
         cav1 = VariableRFCavityFringeField("bob");
         // centre, end, max_order
         shared = std::shared_ptr<endfieldmodel::EndFieldModel>
-                                      (new endfieldmodel::Tanh(250., 50., 10));
+                                      (new endfieldmodel::Tanh(250., 50., 21));
         cav1.setCavityCentre(0.500);
         cav1.setEndField(shared);
         PolynomialTimeDependence* time =
@@ -314,7 +314,7 @@ 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 < 8; ++i) {
+    for (size_t i = 0; i < 10; ++i) {
         cav2.setMaxOrder(i);
         cav2.apply(R, centroid, t, E, B);
         Vector_t result1 = testMaxwell3(cav2, R, t, 0.01, 0.0001);
@@ -323,7 +323,7 @@ TEST_F(VariableRFCavityFringeFieldTest, TestMaxwell) {
         std::cerr << i << " ** " << B << " " << E << " " << div[0] << " "
                   << div[1] << " " << result1 << " " << result2 << std::endl;
 
-        if (i > 0 and i < 5) {
+        if (i > 0) {
             EXPECT_LT(div[0], 1e-3);
             EXPECT_LT(div[1], 1e-3);
             EXPECT_LT(euclidean_norm(result1), 1e-3);
@@ -331,3 +331,16 @@ TEST_F(VariableRFCavityFringeFieldTest, TestMaxwell) {
         }
     }
 }
+
+TEST_F(VariableRFCavityFringeFieldTest, TestOrder) {
+    Vector_t centroid(0., 0., 0.);
+    Vector_t B(0., 0., 0.);
+    Vector_t E(0., 0., 0.);
+    Vector_t R(0., 0., 500.);
+    double t = 0.;
+    for (size_t i = 0; i < 20; ++i) {
+        std::cerr << "Max Order " << i << std::endl;
+        cav2.setMaxOrder(i);
+        cav2.apply(R, centroid, t, E, B);
+    }
+}