diff --git a/src/trapping/cfrfme.cpp b/src/trapping/cfrfme.cpp
index bca965182a61640511044fdada3e1e6aebadafc2..caade0f5c0467e95f0e4e2bb040fac6b9ffbc04c 100644
--- a/src/trapping/cfrfme.cpp
+++ b/src/trapping/cfrfme.cpp
@@ -18,6 +18,7 @@
  *
  * C++ implementation of FRFME functions.
  */
+#include <chrono>
 #include <cstdio>
 #include <exception>
 #include <fstream>
@@ -71,6 +72,11 @@ void frfme(string data_file, string output_path) {
 #ifdef USE_NVTX
   nvtxRangePush("Running frfme()");
 #endif
+  chrono::time_point<chrono::high_resolution_clock> t_start = chrono::high_resolution_clock::now();
+  chrono::duration<double> elapsed;
+  char buffer[256];
+  string message = "INIT";
+  Logger logger(LOG_INFO);
   string tfrfme_name = output_path + "/c_TFRFME.hd5";
   TFRFME *tfrfme = NULL;
   Swap1 *tt1 = NULL;
@@ -143,10 +149,12 @@ void frfme(string data_file, string output_path) {
 	nlmmt = tt2->nlmmt;
 	nrvc = tt2->nrvc;
       } else {
-	printf("ERROR: could not open TEMPTAPE2 file.\n");
+	message = "ERROR: could not open TEMPTAPE2 file.\n";
+	logger.err(message);
       }
     } else {
-      printf("ERROR: could not open TFRFME file.\n");
+      message = "ERROR: could not open TFRFME file.\n";
+      logger.err(message);
     }
     nks = nkv - 1;
 #ifdef USE_NVTX
@@ -272,13 +280,16 @@ void frfme(string data_file, string output_path) {
 	// Array initialization
 	long swap1_size, swap2_size, tfrfme_size;
 	double size_mb;
-	printf("INFO: calculating memory requirements\n");
+	message = "INFO: calculating memory requirements...\n";
+	logger.log(message);
 	swap1_size = Swap1::get_size(lm, nkv);
 	size_mb = 1.0 * swap1_size / 1024.0 / 1024.0;
 	printf("Swap 1: %.2lg MB\n", size_mb);
 	swap2_size = Swap2::get_size(nkv);
 	size_mb = 1.0 * swap2_size / 1024.0 / 1024.0;
-	printf("Swap 2: %.2lg MB\n", size_mb);
+	sprintf(buffer, "Swap 2: %.2lg MB\n", size_mb);
+	message = string(buffer);
+	logger.log(message);
 	tt2 = new Swap2(nkv);
 	vkv = tt2->get_vector();
 	vkzm = tt2->get_matrix();
@@ -301,9 +312,13 @@ void frfme(string data_file, string output_path) {
 	int nzshpo = nzsh + 1;
 	tfrfme_size = TFRFME::get_size(lm, nkv, nxv, nyv, nzv);
 	size_mb = 1.0 * tfrfme_size / 1024.0 / 1024.0;
-	printf("TFRFME: %.2lg MB\n", size_mb);
+	sprintf(buffer, "TFRFME: %.2lg MB\n", size_mb);
+	message = string(buffer);
+	logger.log(message);
 	size_mb = 1.0 * (swap1_size + swap2_size + tfrfme_size) / 1024.0 / 1024.0;
-	printf("TOTAL: %.2lg MB\n", size_mb);
+	sprintf(buffer, "TOTAL: %.2lg MB\n", size_mb);
+	message = string(buffer);
+	logger.log(message);
 	tfrfme = new TFRFME(lmode, lm, nkv, nxv, nyv, nzv);
 	double *_xv = tfrfme->get_x();
 	double *_yv = tfrfme->get_y();
@@ -383,10 +398,12 @@ void frfme(string data_file, string output_path) {
 	    dcomplex *wk_local = new dcomplex[nlmmt]();
 	    for (int wi = 0; wi < nkv; wi++) w[wi] = vec_w + wi * nkv;
 	    int wk_index = 0;
+	    int nkvs = nkv * nkv;
 	    for (int jy50 = 0; jy50 < nkv; jy50++) {
 	      for (int jx50 = 0; jx50 < nkv; jx50++) {
 		for (int wi = 0; wi < nlmmt; wi++) wk_local[wi] = tt1->wk[wk_index++];
 		w[jx50][jy50] = wk_local[j80 - 1];
+		// w[jx50][jy50] = tt1->wk[jy50 * nkvs + jx50 * nkv + j80 - 1];
 	      } // jx50
 	    } // jy50 loop
 	    int ixyz = 0;
@@ -443,10 +460,12 @@ void frfme(string data_file, string output_path) {
 	  nvtxRangePop();
 #endif
 	} else { // Should never happen.
-	  printf("ERROR: could not open TFRFME file for output.\n");
+	  message = "ERROR: could not open TFRFME file for output.\n";
+	  logger.err(message);
 	}
       } else {
-	printf("ERROR: could not open TEDF file.\n");
+	message = "ERROR: could not open TEDF file.\n";
+	logger.err(message);
       }
     } else { // label 98
       string output_name = output_path + "/c_OFRFME";
@@ -470,7 +489,9 @@ void frfme(string data_file, string output_path) {
 #ifdef USE_NVTX
   nvtxRangePop();
 #endif
-  printf("FRFME: Done.\n");
+  elapsed = chrono::high_resolution_clock::now() - t_start;
+  message = "INFO: FRFME took " + to_string(elapsed.count()) + "s.\n";
+  logger.log(message);
 #ifdef USE_NVTX
   nvtxRangePop();
 #endif
diff --git a/src/trapping/clffft.cpp b/src/trapping/clffft.cpp
index 8424002545a32af8bad23fe1252e5195e06c8add..39d4a3a3760c4d43b1d5ece1f0d4032312e82730 100644
--- a/src/trapping/clffft.cpp
+++ b/src/trapping/clffft.cpp
@@ -18,6 +18,7 @@
  *
  * \brief C++ implementation of LFFFT functions.
  */
+#include <chrono>
 #include <cstdio>
 #include <exception>
 #include <fstream>
@@ -71,10 +72,15 @@ void lffft(string data_file, string output_path) {
 #ifdef USE_NVTX
   nvtxRangePush("Running lffft()");
 #endif
+  chrono::time_point<chrono::high_resolution_clock> t_start = chrono::high_resolution_clock::now();
+  chrono::duration<double> elapsed;
   const dcomplex uim = 0.0 + 1.0 * I;
   const double sq2i = 1.0 / sqrt(2.0);
   const dcomplex sq2iti = sq2i * uim;
 
+  char buffer[256];
+  string message = "INIT";
+  Logger logger(LOG_INFO);
   fstream tlfff, tlfft;
   double ****zpv = NULL;
   dcomplex *ac = NULL, *ws = NULL, *wsl = NULL;
@@ -480,7 +486,9 @@ void lffft(string data_file, string output_path) {
   delete cil;
   delete ccr;
   delete[] file_lines;
-  printf("LFFT: Done.\n");
+  elapsed = chrono::high_resolution_clock::now() - t_start;
+  message = "INFO: LFFT took " + to_string(elapsed.count()) + "s.\n";
+  logger.log(message);
 #ifdef USE_NVTX
   nvtxRangePop();
 #endif