diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/Messages.java b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/Messages.java
index c6f6bcb..8144458 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/Messages.java
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/Messages.java
@@ -41,6 +41,10 @@
 
 	public static String ReviewTableDefinition_verify;
 
+	public static String Starred;
+
+	public static String Not_Starred;
+
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/ReviewTableLabelProvider.java b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/ReviewTableLabelProvider.java
index 4bab546..5d0cc79 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/ReviewTableLabelProvider.java
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/ReviewTableLabelProvider.java
@@ -196,7 +196,11 @@
 			switch (aIndex) {
 			case 0:
 				Boolean starred = reviewSummary.isStarred();
-				return starred.toString(); // Needed for the sorter
+				if (starred) {
+					return Messages.Starred;
+				} else {
+					return Messages.Not_Starred;
+				}
 			case 1:
 				return Integer.toString(reviewSummary.get_number());
 			case 2:
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/messages.properties b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/messages.properties
index f7a7c54..94ae5d8 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/messages.properties
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/messages.properties
@@ -19,3 +19,5 @@
 ReviewTableDefinition_status=Status
 ReviewTableDefinition_updated=Updated
 ReviewTableDefinition_verify=V
+Starred=Starred review
+Not_Starred=Not starred review
\ No newline at end of file
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/RebaseProcess.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/RebaseProcess.java
index 070225f..cc7c48b 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/RebaseProcess.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/RebaseProcess.java
@@ -21,6 +21,7 @@
 import org.eclipse.egerrit.internal.model.ChangeInfo;
 import org.eclipse.egerrit.internal.model.RevisionInfo;
 import org.eclipse.egerrit.internal.ui.editors.QueryHelpers;
+import org.eclipse.egerrit.internal.ui.editors.RefreshRelatedEditors;
 import org.eclipse.egerrit.internal.ui.utils.Messages;
 import org.eclipse.jface.dialogs.InputDialog;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -81,10 +82,13 @@
 
 		try {
 			rebaseCmd.call();
+
 			//After a rebase, we reload and reset the user selected revision
 			//Note that here we are not using the model loader because we want a synchronous call so we can set the user selection
 			CompletableFuture.runAsync(() -> QueryHelpers.loadBasicInformation(gerritClient, changeInfo, false))
 					.thenRun(() -> changeInfo.setUserSelectedRevision(changeInfo.getRevision()));
+
+			new RefreshRelatedEditors(changeInfo, gerritClient).schedule();
 		} catch (EGerritException e1) {
 			if (e1.getCode() == EGerritException.SHOWABLE_MESSAGE) {
 				MessageDialog.open(MessageDialog.INFORMATION, null, Messages.RebaseProcess_failed,
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/SubmitProcess.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/SubmitProcess.java
index 1d0c46a..969572f 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/SubmitProcess.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/SubmitProcess.java
@@ -20,6 +20,7 @@
 import org.eclipse.egerrit.internal.core.rest.SubmitInput;
 import org.eclipse.egerrit.internal.model.ChangeInfo;
 import org.eclipse.egerrit.internal.ui.editors.QueryHelpers;
+import org.eclipse.egerrit.internal.ui.editors.RefreshRelatedEditors;
 import org.eclipse.egerrit.internal.ui.utils.Messages;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.SWT;
@@ -42,6 +43,8 @@
 			//Note that here we are not using the model loader because we want a synchronous call so we can set the user selection
 			CompletableFuture.runAsync(() -> QueryHelpers.loadBasicInformation(gerritClient, changeInfo, false))
 					.thenRun(() -> changeInfo.setUserSelectedRevision(changeInfo.getRevision()));
+
+			new RefreshRelatedEditors(changeInfo, gerritClient).schedule();
 		} catch (EGerritException e3) {
 			EGerritCorePlugin.logError(gerritClient.getRepository().formatGerritVersion() + e3.getMessage());
 			MessageDialog.open(MessageDialog.INFORMATION, null, Messages.SubmitProcess_failed, e3.getLocalizedMessage(),
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/GerritDifferences.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/GerritDifferences.java
index 4961b6f..136c2fe 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/GerritDifferences.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/GerritDifferences.java
@@ -17,35 +17,35 @@
 	/**
 	 * Difference constant (value 0) indicating no difference.
 	 */
-	public static final int NO_CHANGE = 0;
+	public static final int NO_CHANGE = Differencer.NO_CHANGE;
 
 	/**
 	 * Difference constant (value 1) indicating one side was added.
 	 */
-	public static final int ADDITION = 1;
+	public static final int ADDITION = 16 + Differencer.ADDITION;
 
 	/**
 	 * Difference constant (value 2) indicating one side was removed.
 	 */
-	public static final int DELETION = 2;
+	public static final int DELETION = 32 + Differencer.DELETION;
 
 	/**
 	 * Difference constant (value 3) indicating side changed.
 	 */
-	public static final int CHANGE = 3;
+	public static final int CHANGE = 64 + Differencer.CHANGE;
 
 	/**
 	 * Difference constant (value 4) indicating renaming.
 	 */
-	public static final int RENAMED = 4;
+	public static final int RENAMED = 128;
 
 	/**
 	 * Difference constant (value 5) indicating renaming.
 	 */
-	public static final int COPIED = 5;
+	public static final int COPIED = 256;
 
 	/**
 	 * Difference constant (value 6) indicating renaming.
 	 */
-	public static final int REWRITTEN = 6;
+	public static final int REWRITTEN = 512;
 }
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ChangeDetailEditor.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ChangeDetailEditor.java
index a1b811d..ab516e9 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ChangeDetailEditor.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ChangeDetailEditor.java
@@ -543,6 +543,7 @@
 
 				try {
 					abandonCmd.call();
+					new RefreshRelatedEditors(fChangeInfo, fGerritClient).schedule();
 				} catch (EGerritException e3) {
 					EGerritCorePlugin.logError(fGerritClient.getRepository().formatGerritVersion() + e3.getMessage());
 				}
@@ -568,6 +569,7 @@
 
 				try {
 					restoreCmd.call();
+					new RefreshRelatedEditors(fChangeInfo, fGerritClient).schedule();
 				} catch (EGerritException e3) {
 					EGerritCorePlugin.logError(fGerritClient.getRepository().formatGerritVersion() + e3.getMessage());
 				}
@@ -585,6 +587,7 @@
 				RebaseProcess rebaseProcess = new RebaseProcess();
 				rebaseProcess.handleRebase(rebaseButton.getShell(), fChangeInfo, fChangeInfo.getUserSelectedRevision(),
 						fGerritClient);
+
 			}
 		});
 
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/RefreshRelatedEditors.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/RefreshRelatedEditors.java
new file mode 100644
index 0000000..5444911
--- /dev/null
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/RefreshRelatedEditors.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson AB.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Ericsson - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.egerrit.internal.ui.editors;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.egerrit.internal.core.GerritClient;
+import org.eclipse.egerrit.internal.model.ChangeInfo;
+import org.eclipse.egerrit.internal.model.RelatedChangeAndCommitInfo;
+import org.eclipse.egerrit.internal.ui.editors.model.ChangeDetailEditorInput;
+import org.eclipse.egerrit.internal.ui.utils.Messages;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Class that, when run, refreshes opened related changes in Egerrit editors.
+ */
+public class RefreshRelatedEditors extends Job {
+
+	private ChangeInfo fChangeInfo;
+
+	private GerritClient fGerritClient;
+
+	public RefreshRelatedEditors(ChangeInfo changeInfo, GerritClient gerritClient) {
+		super(Messages.ChangeDetailEditor_updatingRelatedChanges);
+		fChangeInfo = changeInfo;
+		fGerritClient = gerritClient;
+	}
+
+	@Override
+	public IStatus run(IProgressMonitor monitor) {
+		/* Get list of related changes and remove current one */
+		List<String> changeIds = new ArrayList<String>();
+		for (RelatedChangeAndCommitInfo change : fChangeInfo.getRelatedChanges().getChanges()) {
+			if (change.getChange_id() != null && !change.getChange_id().equals(fChangeInfo.getChange_id())) {
+				changeIds.add(change.getChange_id());
+			}
+		}
+		if (changeIds.size() == 0) {
+			return Status.OK_STATUS;
+		}
+
+		//Obtain the list of editors opened
+		IEditorReference[][] editorRefs = new IEditorReference[1][];
+		Display.getDefault().syncExec(() -> {
+			editorRefs[0] = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();
+		});
+
+		/* Iterate over all the open editors in the workbench */
+		for (IEditorReference editorRef : editorRefs[0]) {
+			/* Check for the opened EGerrit editors */
+			IEditorPart part = editorRef.getEditor(false);
+
+			if (part instanceof ChangeDetailEditor) {
+				ChangeDetailEditorInput changeInput = (ChangeDetailEditorInput) part.getEditorInput();
+				if (!changeInput.getChange().getChange_id().equals(fChangeInfo.getChange_id())) {
+					if (changeIds.contains(changeInput.getChange().getChange_id())) {
+						QueryHelpers.loadBasicInformation(fGerritClient, changeInput.getChange(), true);
+					}
+				}
+			}
+		}
+		return Status.OK_STATUS;
+	}
+}
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/model/FilesTableModel.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/model/FilesTableModel.java
index 3f62eaa..0d52fcc 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/model/FilesTableModel.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/model/FilesTableModel.java
@@ -29,9 +29,9 @@
 // Moveable, Alignment}
 public enum FilesTableModel implements ITableModel {
 	// 			Name 			                               Width 	Resize Moveable Alignment
-	REVIEWED("", 30, true, true, SWT.LEFT), //$NON-NLS-1$
+	REVIEWED("", 35, true, true, SWT.LEFT), //$NON-NLS-1$
 	MOD_TYPE("", 30, true, true, SWT.LEFT), //$NON-NLS-1$
-	FILE_PATH(Messages.FilesTableDefinition_filePath, 540, true, true, SWT.LEFT), //
+	FILE_PATH(Messages.FilesTableDefinition_filePath, 250, true, true, SWT.LEFT), //
 	COMMENTS(Messages.FilesTableDefinition_comments, 220, true, true, SWT.LEFT), //
 	SIZE(Messages.FilesTableDefinition_size, 80, false, true, SWT.LEFT);
 
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/Messages.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/Messages.java
index 5cbf7cf..cdf1bc8 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/Messages.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/Messages.java
@@ -84,6 +84,8 @@
 
 	public static String ChangeDetailEditor_cherryPickBranch;
 
+	public static String ChangeDetailEditor_updatingRelatedChanges;
+
 	public static String CheckoutRevision_0;
 
 	public static String CheckoutRevision_1;
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/messages.properties b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/messages.properties
index d2630ec..e1fdb5a 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/messages.properties
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/messages.properties
@@ -44,6 +44,7 @@
 ChangeDetailEditor_7=Markers for patchset 
 ChangeDetailEditor_9=Reload this change from the server.
 ChangeDetailEditor_cherryPickBranch=Cherry pick change to a different branch
+ChangeDetailEditor_updatingRelatedChanges=Updating opened related changes
 CheckoutRevision_0=Checkout...
 CheckoutRevision_1=No repository found
 CheckoutRevision_12=Change " {0} " \ has previously been checked out in branch " {1} ".\n\n\
