diff --git a/src/app/components/shared/_dialogs/topic-cloud-filter/topic-cloud-filter.component.ts b/src/app/components/shared/_dialogs/topic-cloud-filter/topic-cloud-filter.component.ts
index 6663529b09371ea9618dbd1f02ac179323fcf31f..0ac869af9f8fb781e123345a4878147cdc5de081 100644
--- a/src/app/components/shared/_dialogs/topic-cloud-filter/topic-cloud-filter.component.ts
+++ b/src/app/components/shared/_dialogs/topic-cloud-filter/topic-cloud-filter.component.ts
@@ -151,7 +151,7 @@ export class TopicCloudFilterComponent implements OnInit {
       } else {
         this._adminData.keywordORfulltext = KeywordOrFulltext.both;
       }
-      this.topicCloudAdminService.setAdminData(this._adminData, false, this.user.role);
+      this.topicCloudAdminService.updateLocalAdminData(this._adminData);
 
       const params = CloudParameters.currentParameters;
       params.question = this.question;
diff --git a/src/app/services/util/tag-cloud-data.service.ts b/src/app/services/util/tag-cloud-data.service.ts
index 864adce64ab4e85370491b42d2c7e521a15c52a0..477d1240125b504f45fbfce400634b05ee5d5919 100644
--- a/src/app/services/util/tag-cloud-data.service.ts
+++ b/src/app/services/util/tag-cloud-data.service.ts
@@ -66,7 +66,6 @@ export class TagCloudDataService {
   private _isAlphabeticallySorted: boolean;
   private _dataBus: BehaviorSubject<TagCloudData>;
   private _metaDataBus: BehaviorSubject<TagCloudMetaData>;
-  private _cachedData: TagCloudData;
   private _commentSubscription = null;
   private _roomId = null;
   private _calcWeightType = TagCloudCalcWeightType.byLength;
@@ -94,11 +93,6 @@ export class TagCloudDataService {
       countPerWeight: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     };
     this._metaDataBus = new BehaviorSubject<TagCloudMetaData>(null);
-    this._cachedData = null;
-    // Subscribe to own 'service' for caching
-    this._dataBus.asObservable().subscribe(data => {
-      this._cachedData = data;
-    });
   }
 
   static buildDataFromComments(adminData: TopicCloudAdminData, comments: Comment[]): [TagCloudData, Set<number>] {
@@ -216,7 +210,7 @@ export class TagCloudDataService {
   }
 
   get currentData(): TagCloudData {
-    return this._cachedData;
+    return this._dataBus.value;
   }
 
   set weightCalcType(type: TagCloudCalcWeightType) {
diff --git a/src/app/services/util/topic-cloud-admin.service.ts b/src/app/services/util/topic-cloud-admin.service.ts
index 4b72656ab6c11495f9b9c067feec2d9774973ef0..288d2620866ddf9f63e83210bfd487f16b69657f 100644
--- a/src/app/services/util/topic-cloud-admin.service.ts
+++ b/src/app/services/util/topic-cloud-admin.service.ts
@@ -146,16 +146,28 @@ export class TopicCloudAdminService {
     this.roomService.getRoom(roomId).subscribe(room => {
       this.blacklistActive = room.blacklistIsActive;
       const adminData = TopicCloudAdminService.getDefaultAdminData;
+      const list = this.finishBlacklist(room.blacklist ? JSON.parse(room.blacklist) : [], room.blacklistIsActive, room.profanityFilter);
+      let areEqual = !!adminData.blacklist && list.length === adminData.blacklist.length;
+      for (let i = 0; i < list.length && areEqual; i++) {
+        areEqual = list[i] === adminData.blacklist[i];
+      }
       if (adminData.blacklistIsActive !== room.blacklistIsActive ||
-        adminData.profanityFilter !== room.profanityFilter) {
+        adminData.profanityFilter !== room.profanityFilter || !areEqual) {
+        this.blacklist.next(list);
+        this.blacklistIsActive.next(room.blacklistIsActive);
+        this.blacklistActive = room.blacklistIsActive;
         adminData.blacklistIsActive = room.blacklistIsActive;
         adminData.profanityFilter = room.profanityFilter;
-        this.setAdminData(adminData, false, userRole);
+        this.setAdminData(adminData, false, userRole, list);
       }
     });
   }
 
-  setAdminData(_adminData: TopicCloudAdminData, updateRoom: boolean, userRole: UserRole) {
+  updateLocalAdminData(_adminData: TopicCloudAdminData) {
+    localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData));
+  }
+
+  setAdminData(_adminData: TopicCloudAdminData, updateRoom: boolean, userRole: UserRole, blacklist: string[] = null) {
     localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData));
     if (updateRoom && userRole && userRole > UserRole.PARTICIPANT) {
       this.getRoom().subscribe(room => {
@@ -164,17 +176,18 @@ export class TopicCloudAdminService {
       });
       return;
     }
-    const subscription = this.getBlacklist().subscribe(list => {
-      _adminData.blacklist = [];
-      if (_adminData.blacklistIsActive) {
-        _adminData.blacklist = list;
-      }
-      if (_adminData.profanityFilter !== ProfanityFilter.deactivated) {
-        _adminData.blacklist = _adminData.blacklist.concat(this.profanityFilterService.getProfanityList);
-      }
+    const applyBlacklist = (list: string[]) => {
+      _adminData.blacklist = this.finishBlacklist(list, _adminData.blacklistIsActive, _adminData.profanityFilter);
       localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData));
-      _adminData.blacklistIsActive = this.blacklistActive;
       this.adminData.next(_adminData);
+    };
+    if (blacklist) {
+      applyBlacklist(blacklist);
+      return;
+    }
+    const subscription = this.getBlacklist().subscribe(list => {
+      _adminData.blacklistIsActive = this.blacklistActive;
+      applyBlacklist(list);
       subscription.unsubscribe();
     });
   }
@@ -242,4 +255,12 @@ export class TopicCloudAdminService {
         });
       });
   }
+
+  private finishBlacklist(list: string[], blacklistIsActive: boolean, profanityFilter: ProfanityFilter): string[] {
+    const blacklist = blacklistIsActive ? list : [];
+    if (profanityFilter === ProfanityFilter.deactivated) {
+      return blacklist;
+    }
+    return blacklist.concat(this.profanityFilterService.getProfanityList);
+  }
 }