diff --git a/plugins/tracker/db/install.sql b/plugins/tracker/db/install.sql
index 3994f7ab93..0c01800bf1 100644
--- a/plugins/tracker/db/install.sql
+++ b/plugins/tracker/db/install.sql
@@ -287,6 +287,7 @@ CREATE TABLE tracker_changeset_comment(
     body TEXT NOT NULL,
     body_format varchar(16) NOT NULL default 'text',
     old_artifact_history_id INT(11) NULL,
+    use_comment_permissions tinyint(1) NOT NULL default '0',
     INDEX changeset_idx(changeset_id)
 ) ENGINE=InnoDB;
 
diff --git a/plugins/tracker/include/Tracker/Artifact/Tracker_Artifact_Changeset.class.php b/plugins/tracker/include/Tracker/Artifact/Tracker_Artifact_Changeset.class.php
index b173c75386..23c0328658 100644
--- a/plugins/tracker/include/Tracker/Artifact/Tracker_Artifact_Changeset.class.php
+++ b/plugins/tracker/include/Tracker/Artifact/Tracker_Artifact_Changeset.class.php
@@ -505,8 +505,12 @@ class Tracker_Artifact_Changeset extends Tracker_Artifact_Followup_Item {
         if (isset($this->latest_comment)) {
             return $this->latest_comment;
         }
+        $user = $this->getUserManager()->getCurrentUser();
+        $is_admin = $this->artifact->getTracker()->userIsAdmin($user);
+        $this_project_id = $this->artifact->getTracker()->getProject()->getGroupId();
+        $ugroups = $user->getUgroups($this_project_id, array());
 
-        if ($row = $this->getCommentDao()->searchLastVersion($this->id)->getRow()) {
+        if ($row = $this->getCommentDao()->searchLastVersion($this->id, $ugroups, $is_admin)->getRow()) {
             $this->latest_comment = new Tracker_Artifact_Changeset_Comment($row['id'],
                                                     $this,
                                                     $row['comment_type_id'],
diff --git a/plugins/tracker/include/Tracker/Artifact/Tracker_Artifact_ChangesetFactory.class.php b/plugins/tracker/include/Tracker/Artifact/Tracker_Artifact_ChangesetFactory.class.php
index 7a8ef5f02d..c2f915e5cb 100644
--- a/plugins/tracker/include/Tracker/Artifact/Tracker_Artifact_ChangesetFactory.class.php
+++ b/plugins/tracker/include/Tracker/Artifact/Tracker_Artifact_ChangesetFactory.class.php
@@ -145,8 +145,10 @@ class Tracker_Artifact_ChangesetFactory {
      */
     public function getFullChangesetsForArtifact(Tracker_Artifact $artifact, PFUser $user)
     {
+        $this_project_id        = $artifact->getTracker()->getProject()->getGroupId();
+        $ugroups                = $user->getUgroups($this_project_id, array());
         $changeset_values_cache = $this->changeset_value_dao->searchByArtifactId($artifact->getId());
-        $comments_cache         = $this->changeset_comment_dao->searchLastVersionForArtifact($artifact->getId());
+        $comments_cache         = $this->changeset_comment_dao->searchLastVersionForArtifact($artifact->getId(), $ugroups, $artifact->getTracker()->userIsAdmin($user));
 
         $changesets         = $this->getChangesetsForArtifact($artifact);
         $previous_changeset = null;
diff --git a/plugins/tracker/include/Tracker/Artifact/dao/Tracker_Artifact_Changeset_CommentDao.class.php b/plugins/tracker/include/Tracker/Artifact/dao/Tracker_Artifact_Changeset_CommentDao.class.php
index a40d15ad26..7cc761bcb1 100644
--- a/plugins/tracker/include/Tracker/Artifact/dao/Tracker_Artifact_Changeset_CommentDao.class.php
+++ b/plugins/tracker/include/Tracker/Artifact/dao/Tracker_Artifact_Changeset_CommentDao.class.php
@@ -25,25 +25,44 @@ class Tracker_Artifact_Changeset_CommentDao extends DataAccessObject {
         $this->table_name = 'tracker_changeset_comment';
     }
 
-    public function searchLastVersion($changeset_id) {
+    public function searchLastVersion($changeset_id, array $ugroups, $user_is_admin) {
         $changeset_id = $this->da->escapeInt($changeset_id);
-        $sql = "SELECT * FROM $this->table_name
-                WHERE changeset_id = $changeset_id
-                ORDER BY id DESC
+        $sql = "SELECT *";
+        $from = " FROM $this->table_name";
+        $where = " WHERE changeset_id = $changeset_id";
+        $order = " ORDER BY id DESC
                 LIMIT 1";
+
+        if (!$user_is_admin) {
+                $ugroups = $this->da->escapeIntImplode($ugroups);
+                $from   .= " LEFT JOIN permissions ON (permissions.object_id = CAST(tracker_changeset_comment.id AS CHAR CHARACTER SET utf8) AND permissions.permission_type = 'PLUGIN_TRACKER_ARTIFACT_COMMENT_ACCESS')";
+                $where  .= " AND (tracker_changeset_comment.use_comment_permissions = 0 OR  (permissions.ugroup_id IN (". $ugroups.")))";
+        }
+        $sql .= $from.$where.$order;
+
         return $this->retrieve($sql);
     }
 
-    public function searchLastVersionForArtifact($artifact_id)
+    public function searchLastVersionForArtifact($artifact_id, array $ugroups, $user_is_admin)
     {
         $artifact_id = $this->da->escapeInt($artifact_id);
-        $sql = "SELECT comment_v1.*
-                FROM tracker_changeset AS changeset
+        $sql = "SELECT comment_v1.*";
+        $from = " FROM tracker_changeset AS changeset
                   LEFT JOIN tracker_changeset_comment AS comment_v1 ON (comment_v1.changeset_id = changeset.id)
-                  LEFT JOIN tracker_changeset_comment AS comment_v2 ON (comment_v2.changeset_id = changeset.id AND comment_v1.id < comment_v2.id)
-                WHERE changeset.artifact_id = $artifact_id
+                  LEFT JOIN tracker_changeset_comment AS comment_v2 ON (comment_v2.changeset_id = changeset.id AND comment_v1.id < comment_v2.id)";
+
+        $where = " WHERE changeset.artifact_id = $artifact_id
                 AND comment_v2.id IS NULL
                 AND comment_v1.id IS NOT NULL";
+
+        if (!$user_is_admin) {
+                $ugroups = $this->da->escapeIntImplode($ugroups);
+                $from   .= "LEFT JOIN permissions ON (permissions.object_id = CAST(comment_v1.id AS CHAR CHARACTER SET utf8) AND permissions.permission_type = 'PLUGIN_TRACKER_ARTIFACT_COMMENT_ACCESS')";
+                $where  .= " AND (comment_v1.use_comment_permissions = 0 OR (permissions.ugroup_id IN (". $ugroups.")))";
+        }
+
+        $sql .= $from.$where;
+
         $result = array();
         foreach ($this->retrieve($sql) as $row) {
             $result[$row['changeset_id']] = $row;