--- a/src/index/rclmonrcv.cpp
+++ b/src/index/rclmonrcv.cpp
@@ -567,22 +567,22 @@
     code &= ~(IN_ISDIR|IN_ONESHOT);
     switch (code) {
     case IN_ACCESS: return "IN_ACCESS";
+    case IN_MODIFY: return "IN_MODIFY";
     case IN_ATTRIB: return "IN_ATTRIB";
+    case IN_CLOSE_WRITE: return "IN_CLOSE_WRITE";
+    case IN_CLOSE_NOWRITE: return "IN_CLOSE_NOWRITE";
     case IN_CLOSE: return "IN_CLOSE";
-    case IN_CLOSE_NOWRITE: return "IN_CLOSE_NOWRITE";
-    case IN_CLOSE_WRITE: return "IN_CLOSE_WRITE";
+    case IN_OPEN: return "IN_OPEN";
+    case IN_MOVED_FROM: return "IN_MOVED_FROM";
+    case IN_MOVED_TO: return "IN_MOVED_TO";
+    case IN_MOVE: return "IN_MOVE";
     case IN_CREATE: return "IN_CREATE";
     case IN_DELETE: return "IN_DELETE";
     case IN_DELETE_SELF: return "IN_DELETE_SELF";
+    case IN_MOVE_SELF: return "IN_MOVE_SELF";
+    case IN_UNMOUNT: return "IN_UNMOUNT";
+    case IN_Q_OVERFLOW: return "IN_Q_OVERFLOW";
     case IN_IGNORED: return "IN_IGNORED";
-    case IN_MODIFY: return "IN_MODIFY";
-    case IN_MOVE: return "IN_MOVE";
-    case IN_MOVED_FROM: return "IN_MOVED_FROM";
-    case IN_MOVED_TO: return "IN_MOVED_TO";
-    case IN_MOVE_SELF: return "IN_MOVE_SELF";
-    case IN_OPEN: return "IN_OPEN";
-    case IN_Q_OVERFLOW: return "IN_Q_OVERFLOW";
-    case IN_UNMOUNT: return "IN_UNMOUNT";
     default: {
 	static char msg[50];
 	sprintf(msg, "Unknown event 0x%x", code);
@@ -600,10 +600,10 @@
     uint32_t mask = IN_MODIFY | IN_CREATE
         | IN_MOVED_FROM | IN_MOVED_TO | IN_DELETE
 #ifdef RCL_USE_XATTR
-	// It seems that IN_ATTRIB is not needed to receive extattr
-	// modification events, which is a bit weird because only ctime is
-	// set. 
-	// | IN_ATTRIB
+	// IN_ATTRIB used to be not needed to receive extattr
+	// modification events, which was a bit weird because only ctime is
+	// set, and now it is...
+	| IN_ATTRIB
 #endif
 #ifdef IN_DONT_FOLLOW
 	| IN_DONT_FOLLOW
@@ -698,8 +698,8 @@
 	eraseWatchSubTree(m_idtopath, ev.m_path);
     }
 
-    // IN_ATTRIB apparently not needed, see comment above
-    if (evp->mask & (IN_MODIFY)) {
+    // IN_ATTRIB used to be not needed, but now it is
+    if (evp->mask & (IN_MODIFY|IN_ATTRIB)) {
 	ev.m_etyp = RclMonEvent::RCLEVT_MODIFY;
     } else if (evp->mask & (IN_DELETE | IN_MOVED_FROM)) {
 	ev.m_etyp = RclMonEvent::RCLEVT_DELETE;