diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
index 7759b7b..d925f96 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
@@ -1560,8 +1560,7 @@
         }
         diffElem.threads = this.changeComments.getThreadsBySideForFile(
           file,
-          this.patchRange,
-          this.projectConfig
+          this.patchRange
         );
         const promises: Array<Promise<unknown>> = [diffElem.reload()];
         if (this._loggedIn && !this.diffPrefs.manual_review) {
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts
index ef5be9fd..d89bb24 100644
--- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts
+++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts
@@ -28,7 +28,6 @@
 import {customElement, property} from '@polymer/decorators';
 import {
   CommentBasics,
-  ConfigInfo,
   ParentPatchSetNum,
   PatchRange,
   PatchSetNum,
@@ -60,13 +59,6 @@
 };
 
 export interface TwoSidesComments {
-  // TODO(TS): remove meta - it is not used anywhere
-  meta: {
-    changeNum: NumericChangeId;
-    path: string;
-    patchRange: PatchRange;
-    projectConfig?: ConfigInfo;
-  };
   left: UIComment[];
   right: UIComment[];
 }
@@ -78,8 +70,6 @@
 
   private readonly _drafts: {[path: string]: UIDraft[]};
 
-  private readonly _changeNum: NumericChangeId;
-
   /**
    * Construct a change comments object, which can be data-bound to child
    * elements of that which uses the gr-comment-api.
@@ -87,14 +77,11 @@
   constructor(
     comments: {[path: string]: UIHuman[]} | undefined,
     robotComments: {[path: string]: UIRobot[]} | undefined,
-    drafts: {[path: string]: UIDraft[]} | undefined,
-    changeNum: NumericChangeId
+    drafts: {[path: string]: UIDraft[]} | undefined
   ) {
     this._comments = this._addPath(comments);
     this._robotComments = this._addPath(robotComments);
     this._drafts = this._addPath(drafts);
-    // TODO(TS): remove changeNum param - it is not used anywhere
-    this._changeNum = changeNum;
   }
 
   /**
@@ -328,13 +315,10 @@
 
   getThreadsBySideForPath(
     path: string,
-    patchRange: PatchRange,
-    projectConfig?: ConfigInfo
+    patchRange: PatchRange
   ): CommentThread[] {
     return createCommentThreads(
-      this._addCommentSide(
-        this.getCommentsBySideForPath(path, patchRange, projectConfig)
-      )
+      this._addCommentSide(this.getCommentsBySideForPath(path, patchRange))
     );
   }
 
@@ -350,8 +334,7 @@
    */
   getCommentsBySideForPath(
     path: string,
-    patchRange: PatchRange,
-    projectConfig?: ConfigInfo
+    patchRange: PatchRange
   ): TwoSidesComments {
     let comments: Comment[] = [];
     let drafts: DraftInfo[] = [];
@@ -385,12 +368,6 @@
     );
 
     return {
-      meta: {
-        changeNum: this._changeNum,
-        path,
-        patchRange,
-        projectConfig,
-      },
       left: baseComments,
       right: revisionComments,
     };
@@ -398,13 +375,10 @@
 
   getThreadsBySideForFile(
     file: PatchSetFile,
-    patchRange: PatchRange,
-    projectConfig?: ConfigInfo
+    patchRange: PatchRange
   ): CommentThread[] {
     return createCommentThreads(
-      this._addCommentSide(
-        this.getCommentsBySideForFile(file, patchRange, projectConfig)
-      )
+      this._addCommentSide(this.getCommentsBySideForFile(file, patchRange))
     );
   }
 
@@ -422,19 +396,13 @@
    */
   getCommentsBySideForFile(
     file: PatchSetFile,
-    patchRange: PatchRange,
-    projectConfig?: ConfigInfo
+    patchRange: PatchRange
   ): TwoSidesComments {
-    const comments = this.getCommentsBySideForPath(
-      file.path,
-      patchRange,
-      projectConfig
-    );
+    const comments = this.getCommentsBySideForPath(file.path, patchRange);
     if (file.basePath) {
       const commentsForBasePath = this.getCommentsBySideForPath(
         file.basePath,
-        patchRange,
-        projectConfig
+        patchRange
       );
       // merge in the left and right
       comments.left = comments.left.concat(commentsForBasePath.left);
@@ -643,8 +611,7 @@
         // PathToCommentsInfoMap given its PathToRobotCommentsInfoMap
         // returned from the second promise
         robotComments as PathToRobotCommentsInfoMap,
-        drafts,
-        changeNum
+        drafts
       );
       return this._changeComments;
     });
@@ -664,8 +631,7 @@
       this._changeComments = new ChangeComments(
         oldChangeComments.comments,
         (oldChangeComments.robotComments as unknown) as PathToRobotCommentsInfoMap,
-        drafts,
-        changeNum
+        drafts
       );
       return this._changeComments;
     });
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.js b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.js
index d21af73..c2c1c72 100644
--- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.js
@@ -352,7 +352,6 @@
         let path = 'file/one';
         let comments = element._changeComments.getCommentsBySideForPath(path,
             patchRange);
-        assert.equal(comments.meta.changeNum, 1234);
         assert.equal(comments.left.length, 0);
         assert.equal(comments.right.length, 0);
 
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
index 5a6113c..984b05a 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
@@ -1078,8 +1078,7 @@
         if (this._changeComments && this._path && this._patchRange) {
           this.$.diffHost.threads = this._changeComments.getThreadsBySideForPath(
             this._path,
-            this._patchRange,
-            this._projectConfig
+            this._patchRange
           );
         }
         portedCommentsPromise.then(() => {
@@ -1571,8 +1570,7 @@
     if (file && file.old_path) {
       this.$.diffHost.threads = this._changeComments.getThreadsBySideForFile(
         {path, basePath: file.old_path},
-        patchRange,
-        projectConfig
+        patchRange
       );
     }
   }
