diff --git a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java
index 99fda9dbdffb07bde466d118c20ef20d94d9a9d0..c59d8869e2260d331ea0b7db6bab9a122351adbf 100644
--- a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java
+++ b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java
@@ -62,7 +62,7 @@ public interface InfoMessageFrontendManager {
 	
 	public void deleteInfoMessage(InfoMessage infoMessage);
 	
-	public void deleteInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity);
+	public void updateInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity);
 	
 	public void removeInfoMessagesAndSubscriptionContext(BusinessGroup group);
 	
diff --git a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java
index 57aab19ea577c9909099bfb87b04cced6a8d8ea2..c1413b8c37885b0a2846ad2613514d3ae13f8401 100644
--- a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java
+++ b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java
@@ -27,6 +27,7 @@ import java.util.Locale;
 import java.util.Set;
 
 import org.olat.commons.info.model.InfoMessage;
+import org.olat.commons.info.model.InfoMessageImpl;
 import org.olat.commons.info.notification.InfoSubscriptionManager;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
 import org.olat.core.id.Identity;
@@ -163,11 +164,18 @@ public class InfoMessageFrontendManagerImpl implements InfoMessageFrontendManage
 	}
 	
 	@Override
-	public void deleteInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity) {
+	public void updateInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity) {
 		List<InfoMessage> infoMessages = infoMessageManager.loadInfoMessagesOfIdentity(businessGroup, identity);
 		for (InfoMessage infoMessage : infoMessages) {
-			infoMessageManager.deleteInfoMessage(infoMessage);
-			infoSubscriptionManager.markPublisherNews(infoMessage.getOLATResourceable(), infoMessage.getResSubPath());
+			Identity author = infoMessage.getAuthor();
+			Identity modifier = infoMessage.getModifier();
+			if (author != null && author.equals(identity)) {
+				((InfoMessageImpl)infoMessage).setAuthor(null);
+				infoSubscriptionManager.markPublisherNews(infoMessage.getOLATResourceable(), infoMessage.getResSubPath());
+			} 
+			if (modifier != null && modifier.equals(identity)) {
+				infoMessage.setModifier(null);
+			}
 		}		
 	}
 	
diff --git a/src/main/java/org/olat/commons/info/manager/InfoMessageManagerImpl.java b/src/main/java/org/olat/commons/info/manager/InfoMessageManagerImpl.java
index eeccc4f8cfe8282b6cbcce2bdf557ad4b9c258ce..8e4668e3ceca0bc99f37263645670c3653d6d1b2 100644
--- a/src/main/java/org/olat/commons/info/manager/InfoMessageManagerImpl.java
+++ b/src/main/java/org/olat/commons/info/manager/InfoMessageManagerImpl.java
@@ -103,11 +103,12 @@ public class InfoMessageManagerImpl extends InfoMessageManager {
 	public List<InfoMessage> loadInfoMessagesOfIdentity(BusinessGroupRef businessGroup, IdentityRef identity) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select msg from ").append(InfoMessageImpl.class.getName()).append(" msg")
-			.append(" inner join fetch msg.author author")
-			.append(" inner join fetch author.user")
+			.append(" left join fetch msg.author author")
+			.append(" left join fetch author.user")
 			.append(" left join fetch msg.modifier modifier")
 			.append(" left join fetch modifier.user")
-			.append(" where author.key=:authorKey")
+			.append(" where (author.key=:authorKey")
+			.append(" or modifier.key=:authorKey)")
 			.append(" and msg.resId=:groupKey");
 		return dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), InfoMessage.class)
@@ -120,8 +121,8 @@ public class InfoMessageManagerImpl extends InfoMessageManager {
 	public InfoMessage loadInfoMessageByKey(Long key) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select msg from ").append(InfoMessageImpl.class.getName()).append(" msg")
-			.append(" inner join fetch msg.author author")
-			.append(" inner join fetch author.user")
+			.append(" left join fetch msg.author author")
+			.append(" left join fetch author.user")
 			.append(" left join fetch msg.modifier modifier")
 			.append(" left join fetch modifier.user")
 			.append(" where msg.key=:key");
@@ -175,8 +176,8 @@ public class InfoMessageManagerImpl extends InfoMessageManager {
 		sb.append(" from ").append(InfoMessageImpl.class.getName()).append(" msg");
 		
 		if (!count) {
-			sb.append(" inner join fetch msg.author author")
-			.append(" inner join fetch author.user")
+			sb.append(" left join fetch msg.author author")
+			.append(" left join fetch author.user")
 			.append(" left join fetch msg.modifier modifier")
 			.append(" left join fetch modifier.user");
 		}
diff --git a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java
index 5e976126033db22359da5ce89bc42ca8b10ed609..8cf468566d443dd2c97806c874710b267dc2d7ff 100644
--- a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java
+++ b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java
@@ -87,8 +87,8 @@ public class InfoMessageImpl implements InfoMessage, CreateInfo, Persistable {
 	@Column(name="businesspath", nullable=true, insertable=true, updatable=false)
 	private String businessPath;
 	
-	@ManyToOne(targetEntity=IdentityImpl.class, fetch=FetchType.LAZY, optional=false)
-	@JoinColumn(name="fk_author_id", nullable=false, insertable=true, updatable=false)
+	@ManyToOne(targetEntity=IdentityImpl.class, fetch=FetchType.LAZY, optional=true)
+	@JoinColumn(name="fk_author_id", nullable=true, insertable=true, updatable=true)
 	private Identity author;
 	@ManyToOne(targetEntity=IdentityImpl.class, fetch=FetchType.LAZY, optional=true)
 	@JoinColumn(name="fk_modifier_id", nullable=true, insertable=true, updatable=true)
diff --git a/src/main/java/org/olat/commons/info/ui/InfoDisplayController.java b/src/main/java/org/olat/commons/info/ui/InfoDisplayController.java
index 16d73dc4c2c5f6efbadd509d12a7520438b21705..244835969f4b59c9c416263c5ac01ddb18f10127 100644
--- a/src/main/java/org/olat/commons/info/ui/InfoDisplayController.java
+++ b/src/main/java/org/olat/commons/info/ui/InfoDisplayController.java
@@ -270,7 +270,12 @@ public class InfoDisplayController extends FormBasicController {
 
 		String authorName = userManager.getUserDisplayName(info.getAuthor());
 		String creationDate = formatter.formatDateAndTime(info.getCreationDate());
-		String infos = translate("display.info", new String[]{StringHelper.escapeHtml(authorName), creationDate});
+		String infos;
+		if (authorName.isEmpty()) {
+			infos = translate("display.info.noauthor", new String[]{creationDate});
+		} else {
+			infos = translate("display.info", new String[]{StringHelper.escapeHtml(authorName), creationDate});
+		}		
 
 		return new InfoMessageForDisplay(info.getKey(), info.getTitle(), message, infos, modifier);
 	}
diff --git a/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_de.properties
index 4a5661612768824a8cc20e005c3c05ea81d61247..e2bdfad10a7129d6c2b87a38aaa836c2aa28d55d 100644
--- a/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_de.properties
@@ -5,6 +5,7 @@ new_message=Neue Mitteilung erstellen
 create_message=Mitteilung erstellen
 input.toolong=Leider ist Ihr gerade eingegebener Text mit {1} Zeichen zu lang. Bitte beschr\u00E4nken Sie sich auf maximal {0} Zeichen.
 display.info=Publiziert von {0} am {1}
+display.info.noauthor=Publiziert am {0}
 display.modifier=ge\u00E4ndert von {0} am {1}
 display.new_messages=Aktuelle Mitteilungen anzeigen
 display.old_messages=\u00C4ltere Mitteilungen anzeigen
diff --git a/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_en.properties
index 9a78b7e5f7ff2064f0dee3350fbc2187f6fcad59..59c8bee1e71063c38ae7f6f74d0452dbe904c6aa 100644
--- a/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/commons/info/ui/_i18n/LocalStrings_en.properties
@@ -3,6 +3,7 @@ already.deleted=This message has been deleted in the meantime by another user.
 already.edited=This message is being edited by user {0}. Please try again later.
 create_message=Create message
 display.info=Published by {0} on {1}
+display.info.noauthor=Published on {0}
 display.modifier=modified by {0} on {1}
 display.new_messages=Show new messages
 display.no_messages=There are no new messages
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
index e177c724e0f287f4c355d5e625c5e2afd191e90a..db310cfa666fd4eda5c9cc5d97bd3ebdb785b788 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
@@ -1035,7 +1035,7 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD
 
 	private void removeParticipant(Identity ureqIdentity, Identity identity, BusinessGroup group, MailPackage mailing,
 			List<BusinessGroupModifiedEvent.Deferred> events) {
-		infoMessageManager.deleteInfoMessagesOfIdentity(group, identity);
+		infoMessageManager.updateInfoMessagesOfIdentity(group, identity);
 		boolean removed = businessGroupRelationDAO.removeRole(identity, group, GroupRoles.participant.name());
 		if(removed) {
 			// notify currently active users of this business group
diff --git a/src/test/java/org/olat/commons/info/InfoMessageFrontendManagerTest.java b/src/test/java/org/olat/commons/info/InfoMessageFrontendManagerTest.java
index 7c68049f898e804f21f00e8b639ce2595c286957..f1fb12220c02a4818be6b92a074e7967d892a063 100644
--- a/src/test/java/org/olat/commons/info/InfoMessageFrontendManagerTest.java
+++ b/src/test/java/org/olat/commons/info/InfoMessageFrontendManagerTest.java
@@ -190,7 +190,7 @@ public class InfoMessageFrontendManagerTest extends OlatTestCase {
 
 		dbInstance.commitAndCloseSession();
 
-		infoManager.deleteInfoMessagesOfIdentity(businessGroup, id1);
+		infoManager.updateInfoMessagesOfIdentity(businessGroup, id1);
 		dbInstance.commitAndCloseSession();
 
 		// load messages after deletion