diff --git a/src/trapping/cfrfme.cpp b/src/trapping/cfrfme.cpp
index f7ccbaff69065bc3f1512d9c85bb99b0dbd201bb..5901be17f7a617910bc6b3e4413a5bc8eaa879cb 100644
--- a/src/trapping/cfrfme.cpp
+++ b/src/trapping/cfrfme.cpp
@@ -77,7 +77,6 @@ void frfme(string data_file, string output_path) {
   Swap2 *tt2 = NULL;
   char namef[7];
   char more;
-  dcomplex **w = NULL;
   dcomplex *wk = NULL;
   const dcomplex cc0 = 0.0 + 0.0 * I;
   const dcomplex uim = 0.0 + 1.0 * I;
@@ -375,22 +374,17 @@ void frfme(string data_file, string output_path) {
 #ifdef USE_NVTX
 	  nvtxRangePop();
 #endif
+	  dcomplex *vec_w = new dcomplex[nkv * nkv]();
+	  dcomplex **w = new dcomplex*[nkv];
+	  for (int wi = 0; wi < nkv; wi++) w[wi] = vec_w + wi * nkv;
 #ifdef USE_NVTX
 	  nvtxRangePush("j80 loop");
 #endif
 	  for (int j80 = jlmf; j80 <= jlml; j80++) {
-	    dcomplex *tt1_wk = tt1->get_vector();
 	    int wk_index = 0;
-	    // w matrix
-	    if (w != NULL) {
-	      for (int wi = nkv - 1; wi > -1; wi--) delete[] w[wi];
-	      delete[] w;
-	    }
-	    w = new dcomplex*[nkv];
-	    for (int wi = 0; wi < nkv; wi++) w[wi] = new dcomplex[nkv]();
 	    for (int jy50 = 0; jy50 < nkv; jy50++) {
 	      for (int jx50 = 0; jx50 < nkv; jx50++) {
-		for (int wi = 0; wi < nlmmt; wi++) wk[wi] = tt1_wk[wk_index++];
+		for (int wi = 0; wi < nlmmt; wi++) wk[wi] = tt1->vec_wk[wk_index++];
 		w[jx50][jy50] = wk[j80 - 1];
 	      } // jx50
 	    } // jy50 loop
@@ -426,6 +420,8 @@ void frfme(string data_file, string output_path) {
 	      } // iy70 loop
 	    } // iz75 loop
 	  } // j80 loop
+	  delete[] vec_w;
+	  delete[] w;
 #ifdef USE_NVTX
 	  nvtxRangePop();
 #endif
@@ -467,10 +463,6 @@ void frfme(string data_file, string output_path) {
   if (tfrfme != NULL) delete tfrfme;
   delete[] file_lines;
   if (tt2 != NULL) delete tt2;
-  if (w != NULL) {
-    for (int wi = nkv - 1; wi > -1; wi--) delete[] w[wi];
-    delete[] w;
-  }
   if (wk != NULL) delete[] wk;
   if (tt1 != NULL) delete tt1;
 #ifdef USE_NVTX