diff --git a/src/imm/immnd/ImmModel.cc b/src/imm/immnd/ImmModel.cc
index 80fdf84fb..f11096509 100644
--- a/src/imm/immnd/ImmModel.cc
+++ b/src/imm/immnd/ImmModel.cc
@@ -20173,6 +20173,21 @@ void ImmModel::isolateThisNode(unsigned int thisNode, bool isAtCoord) {
    */
 }
 
+// [Lennart]
+// The following functions should be contained in a new file.
+// This file is already way too big and the functions are not really related
+// to the ImmModel logic.
+//
+// Each function also needs a note telling what the function is doing since
+// this is not obvious, code must be analyzed.
+// Another way is to give the function a more explaining name so it becomes
+// obvious. Also name functions according to Google style guide
+// Examples:
+// getInfoForObjCreate() rename to GetObjectCreateClassName()
+// getInfoForObjModify() rename to GetModifiedObjectName()
+//
+// Make returned strings more informative and remove "junk" info. See
+// comments in getInfoForObjCreate() function below as an example.
 
 /**********************************************************************
  * An enhancement from ticket #2898 to get more info from events
@@ -20184,8 +20199,11 @@ static std::string getInfoForObjCreate(const ImmsvOmCcbObjectCreate *req)
   std::string className((const char*)req->className.buf, sz);
 
   if (className.empty()) {
+    // [Lennart] alternative text "No class name"
     additionalInfo.append("No info");
   } else {
+    // [Lennart] Remove append("Create obj of class ") to make output consistent
+    // with output from the following functions
     additionalInfo.append("Create obj of class ").append(className);
   }
 
@@ -20318,6 +20336,25 @@ static std::string getInfoForSafeReadLock(const ImmsvOmSearchInit *req)
   return additionalInfo;
 }
 
+// [Lennart] Here is a more obvious example of how the code must be analyzed
+// in order to understand what it is doing and how it is used.
+// It is not obvious what evt data is and actually the name is misleading since
+// the function does not actually return any evt data.
+// It is not obvious that char* evt_data is an out parameter and that it is
+// filled in with a C string
+
+// [Lennart] Why not change this function to return a std::string instead and
+// move syslog_recent_fevs() to the new file I suggested in a previous comment
+// syslog_recent_fevs() shall of course still be a C function but that is no
+// problem since it has no in or out parameters
+// Also create a public C function for filling in information in latest_fevs
+// so that no global latest_fevs variable is needed and handled in several
+// places. The latest_fevs variable should be
+// std::vector<std:string> latest_fevs and not be visible outside the new file.
+// Note: all this handling could be encapsulated in a C++ class that is not
+// exposed in the .h file. Only C functions for adding data to the latest_fevs
+// store and for doing the logging has to be public.
+
 void immModel_getEvtData(IMMND_CB *cb, IMMND_EVT *evt, char* evt_data)
 {
   std::string additionalInfo = "";
diff --git a/src/imm/immnd/immnd_evt.c b/src/imm/immnd/immnd_evt.c
index db9403669..02bfba055 100644
--- a/src/imm/immnd/immnd_evt.c
+++ b/src/imm/immnd/immnd_evt.c
@@ -39,6 +39,15 @@
 #define IMMND_SEARCH_BUNDLE_SIZE ((MDS_DIRECT_BUF_MAXSIZE / 100) * 90)
 #define IMMND_MAX_SEARCH_RESULT (IMMND_SEARCH_BUNDLE_SIZE / 300)
 
+// [Lennart] Move this part to a separate file (the same file that contains the
+// new functions in ImmModel.cc) and change to use a vector of strings instead
+// of this char array. Instead of updating latest_fevs directly a function for
+// doing this should be used. The logic for keeping only the 5 latest and make
+// sure they are in correct order (from newest to oldest?) for printing shall
+// also be in that function.
+// Only the latest_fevs update function and the logging function  should be
+// public available using a .h file
+// See more comments in ImmModel.cc
 #define MAX_INDEX_FEVS_MSG 5
 #define MAX_LENGTH_FEVS_MSG 256
 
@@ -52,6 +61,7 @@ static void syslog_recent_fevs()
     LOG_NO("Recent fevs: %s", latest_fevs[i]);
   }
 }
+// [Lennart] End of part to move
 
 static SaAisErrorT immnd_fevs_local_checks(IMMND_CB *cb, IMMSV_FEVS *fevsReq,
 					   const IMMSV_SEND_INFO *sinfo);
@@ -10848,6 +10858,8 @@ static uint32_t immnd_evt_proc_fevs_rcv(IMMND_CB *cb, IMMND_EVT *evt,
 			LOG_ER("PROBLEM %u WITH msg no:%llu", err, msgNo);
 		}
 	}
+	// [Lennart] Replace this with an self explaining function call
+	// See other comments
 	memset(latest_fevs[index], 0, MAX_LENGTH_FEVS_MSG);
 	snprintf(latest_fevs[index], MAX_LENGTH_FEVS_MSG,
 	    "<%llu>[%s]", msgNo, evt_data);
