diff --git a/DiffractionGratings/grating3D.geo b/DiffractionGratings/grating3D.geo
index bdcd8db4c8f6923e67929e32dff5e9fa331432b0..fc23f8366c2460cb7ba6580c90ec4daafd366dde 100644
--- a/DiffractionGratings/grating3D.geo
+++ b/DiffractionGratings/grating3D.geo
@@ -205,15 +205,15 @@ pts_LAYER_L1() = PointsOf{ Physical Volume{7}; };
 pts_PMLTOP()   = PointsOf{ Physical Volume{8}; };
 pts_ROD()      = PointsOf{ Physical Volume{9}; };
 
-Characteristic Length{:}              = PML_lc/10;
-// Characteristic Length{:}              = PML_lc;
-// Characteristic Length{pts_LAYER_L1()} = L1_lc/refine_mesh_L1;
-// Characteristic Length{pts_LAYER_L2()} = L2_lc/refine_mesh_L2;
-// Characteristic Length{pts_LAYER_L6()} = L6_lc/refine_mesh_L6;
-// Characteristic Length{pts_LAYER_L5()} = L5_lc/refine_mesh_L5;
-// Characteristic Length{pts_LAYER_L4()} = L4_lc/refine_mesh_L4;
-// Characteristic Length{pts_LAYER_L3()} = L3_lc/refine_mesh_L3;
-// Characteristic Length{pts_ROD()}      = scat_lc;
+// Characteristic Length{:}              = PML_lc/5;
+Characteristic Length{:}              = PML_lc;
+Characteristic Length{pts_LAYER_L1()} = L1_lc/refine_mesh_L1;
+Characteristic Length{pts_LAYER_L2()} = L2_lc/refine_mesh_L2;
+Characteristic Length{pts_LAYER_L6()} = L6_lc/refine_mesh_L6;
+Characteristic Length{pts_LAYER_L5()} = L5_lc/refine_mesh_L5;
+Characteristic Length{pts_LAYER_L4()} = L4_lc/refine_mesh_L4;
+Characteristic Length{pts_LAYER_L3()} = L3_lc/refine_mesh_L3;
+Characteristic Length{pts_ROD()}      = scat_lc;
 If (tag_geom==3) // Split torus weird otherwise
   Mesh.Algorithm = 6;
 EndIf
diff --git a/DiffractionGratings/grating3D.pro b/DiffractionGratings/grating3D.pro
index 0851ba93cfe877a441b19acc67f7ce82fa751ea5..10d6a25e9dd75cc2b2ea40d0fc2b6b941c1d473f 100644
--- a/DiffractionGratings/grating3D.pro
+++ b/DiffractionGratings/grating3D.pro
@@ -150,13 +150,13 @@ Function{
   rp[] = (CompZ[k1[]]*epsr2[]-CompZ[k2[]]*epsr1[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]);
   tp[] =                   (2.*CompZ[k1[]]*epsr2[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]);
 
-  Vecs[] = Vector[Sin[phi0],-Cos[phi0],0];
-  AmplEis[] =       Vecs[];
-  AmplErs[] = rs[]*Vecs[];
-  AmplEts[] = ts[]*Vecs[];
-  AmplHis[] = Sqrt[ep0*epsr1[]/mu0]      *Vecs[];
-  AmplHrs[] = Sqrt[ep0*epsr1[]/mu0]*rp[]*Vecs[];
-  AmplHts[] = Sqrt[ep0*epsr1[]/mu0]*tp[]*Vecs[];
+  spol[]    = Vector[Sin[phi0],-Cos[phi0],0];
+  AmplEis[] =      spol[];
+  AmplErs[] = rs[]*spol[];
+  AmplEts[] = ts[]*spol[];
+  AmplHis[] = Sqrt[ep0*epsr1[]/mu0]      *spol[];
+  AmplHrs[] = Sqrt[ep0*epsr1[]/mu0]*rp[]*spol[];
+  AmplHts[] = Sqrt[ep0*epsr1[]/mu0]*tp[]*spol[];
 
   Eis[]     = AmplEis[] * Exp[I[]*k1[] *XYZ[]];
   Ers[]     = AmplErs[] * Exp[I[]*k1r[]*XYZ[]];
@@ -167,44 +167,13 @@ Function{
   Eip[]     = -1/(om0*ep0*epsr1[]) * k1[]  /\ His[];
   Erp[]     = -1/(om0*ep0*epsr1[]) * k1r[] /\ Hrs[];
   Etp[]     = -1/(om0*ep0*epsr2[]) * k2[]  /\ Hts[];
-  Hip[]     =  1/(om0*mu0*mur[])   * k1[]  /\ Ei[];
-  Hrp[]     =  1/(om0*mu0*mur[])   * k1r[] /\ Er[];
-  Htp[]     =  1/(om0*mu0*mur[])   * k2[]  /\ Et[];
-
-  E1sa[Omega_super]  = Eis[]+Ers[];
-  E1sa[Omega_subs]   = Ets[];
-  E1pa[Omega_super]  = Eip[]+Erp[];
-  E1pa[Omega_subs]   = Etp[];
-  H1sa[Omega_super]  = His[]+Hrs[];
-  H1sa[Omega_subs]   = Hts[];
-  H1pa[Omega_super]  = Hip[]+Hrp[];
-  H1pa[Omega_subs]   = Htp[];
-
-  E1[] = Cos[psi0]*E1p[]-Sin[psi0]*E1s[];
-  H1[] = Cos[psi0]*H1p[]-Sin[psi0]*H1s[];
-  
-  // k1s[]  = (Abs[theta0]>1e-12) ?      k1[]/\zhat[] / Norm[    k1[]/\zhat[]] : Vector[-Sin[phi0], Cos[phi0], 0.] ;
-  // k2s[]  = (Abs[theta0]>1e-12) ?  Re[k2[]]/\zhat[] / Norm[ Re[k2[]]/\zhat[]] : Vector[-Sin[phi0], Cos[phi0], 0.] ;
-  // k1rs[] = (Abs[theta0]>1e-12) ?     k1r[]/\zhat[] / Norm[    k1r[]/\zhat[]] : Vector[-Sin[phi0], Cos[phi0], 0.] ;
-  // k1p[]  = (Abs[theta0]>1e-12) ?      k1[]/\k1s[]  / Norm[     k1[]/\k1s[]]  : Vector[ Cos[phi0], Sin[phi0], 0.] ;
-  // k2p[]  = (Abs[theta0]>1e-12) ?  Re[k2[]]/\k2s[]  / Norm[ Re[k2[]]/\k2s[]]  : Vector[ Cos[phi0], Sin[phi0], 0.] ;
-  // k1rp[] = (Abs[theta0]>1e-12) ?     k1r[]/\k1rs[] / Norm[    k1r[]/\k1rs[]] : Vector[-Cos[phi0],-Sin[phi0], 0.] ;
-
-  // rs[] = (CompZ[k1[]]-CompZ[k2[]])/(CompZ[k1[]]+CompZ[k2[]]);
-  // ts[] =           2.*CompZ[k1[]] /(CompZ[k1[]]+CompZ[k2[]]);
-  // rp[] = (CompZ[k1[]]*epsr2[]-CompZ[k2[]]*epsr1[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]);
-  // tp[] =                  (2.*CompZ[k1[]]*epsr2[])/(CompZ[k1[]]*epsr2[]+CompZ[k2[]]*epsr1[]) * Sqrt[epsr1[]/epsr2[]];
-
-  // AmplEi[] =      Cos[psi0]* k1p[] +      Sin[psi0]* k1s[];
-  // AmplEr[] = rp[]*Cos[psi0]*k1rp[] + rs[]*Sin[psi0]*k1rs[];
-  // AmplEt[] = tp[]*Cos[psi0]* k2p[] + ts[]*Sin[psi0]* k2s[];
-  
-  // Ei[]     = Ae*AmplEi[] * Exp[I[]*k1[]*XYZ[]];
-  // Et[]     = Ae*AmplEt[] * Exp[I[]*k2[]*XYZ[]];
-  // Er[]     = Ae*AmplEr[] * Exp[I[]*k1r[]*XYZ[]];
-  Hi[]     =  1/(om0*mu0*mur[]) * k1[]  /\ Ei[];
-  Hr[]     =  1/(om0*mu0*mur[]) * k1r[] /\ Er[];
-  Ht[]     =  1/(om0*mu0*mur[]) * k2[]  /\ Et[];
+
+  Ei[] = Ae*(Cos[psi0]*Eip[]-Sin[psi0]*Eis[]);
+  Er[] = Ae*(Cos[psi0]*Erp[]-Sin[psi0]*Ers[]);
+  Et[] = Ae*(Cos[psi0]*Etp[]-Sin[psi0]*Ets[]);
+  Hi[] =  1/(om0*mu0*mur[]) * k1[]  /\ Ei[];
+  Hr[] =  1/(om0*mu0*mur[]) * k1r[] /\ Er[];
+  Ht[] =  1/(om0*mu0*mur[]) * k2[]  /\ Et[];
 
   E1[Omega_super]  = Ei[]+Er[];
   E1[Omega_subs]   = Et[];