diff --git a/org.eclipse.egerrit.core.tests/src/org/eclipse/egerrit/core/command/tests/PublishChangeEditCommandTest.java b/org.eclipse.egerrit.core.tests/src/org/eclipse/egerrit/core/command/tests/PublishChangeEditCommandTest.java
deleted file mode 100644
index 93667ba..0000000
--- a/org.eclipse.egerrit.core.tests/src/org/eclipse/egerrit/core/command/tests/PublishChangeEditCommandTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 Ericsson
- *
- * 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.core.command.tests;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import java.net.URI;
-
-import org.apache.http.HttpHost;
-import org.apache.http.client.ClientProtocolException;
-import org.eclipse.egerrit.core.GerritClient;
-import org.eclipse.egerrit.core.GerritCredentials;
-import org.eclipse.egerrit.core.GerritFactory;
-import org.eclipse.egerrit.core.GerritRepository;
-import org.eclipse.egerrit.core.command.ChangeCommitMsgCommand;
-import org.eclipse.egerrit.core.command.PublishChangeEditCommand;
-import org.eclipse.egerrit.core.exception.EGerritException;
-import org.eclipse.egerrit.core.rest.ChangeEditMessageInput;
-import org.eclipse.egerrit.core.tests.Common;
-import org.eclipse.egerrit.core.tests.support.GitAccess;
-import org.eclipse.jgit.api.Git;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Test suite for {@link org.eclipse.egerrit.core.command.PublishChangeEditCommand}
- *
- * @since 1.0
- */
-@SuppressWarnings("nls")
-public class PublishChangeEditCommandTest {
-
-	// ------------------------------------------------------------------------
-	// Constants
-	// ------------------------------------------------------------------------
-
-	private final String SCHEME = Common.SCHEME;
-
-	private final String HOST = Common.HOST;
-
-	private final int PORT = Common.PORT;
-
-	private final String PATH = Common.PATH;
-
-	private final String PROXY_HOST = Common.PROXY_HOST;
-
-	private final int PROXY_PORT = Common.PROXY_PORT;
-
-	private final String USER = Common.USER;
-
-	private final String PASSWORD = Common.PASSWORD;
-
-	// ------------------------------------------------------------------------
-	// Helper methods
-	// ------------------------------------------------------------------------
-
-	private GerritRepository fRepository;
-
-	private GerritClient fGerrit;
-
-	@Before
-	public void setUp() throws Exception {
-		fRepository = new GerritRepository(SCHEME, HOST, PORT, PATH);
-		if (PROXY_HOST != null) {
-			fRepository.setProxy(new HttpHost(PROXY_HOST, PROXY_PORT));
-		}
-		fRepository.setCredentials(new GerritCredentials(USER, PASSWORD));
-		fRepository.getCredentials().setHttpCredentials(USER, PASSWORD);
-
-		fGerrit = GerritFactory.create(fRepository);
-
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	// ------------------------------------------------------------------------
-	// Test cases
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Test method for
-	 * {@link org.eclipse.egerrit.core.command.PublishChangeEditCommand#PublishChangeEditCommand(org.eclipse.egerrit.core.GerritRepository)}
-	 */
-	@Test
-	public void testPublishChangeEditCommand() {
-		// Run test
-		PublishChangeEditCommand command = fGerrit.publishChangeEdit("");
-
-		// Verify result
-		assertEquals("Wrong repository", fRepository, command.getRepository());
-		assertEquals("Wrong return type", String.class, command.getReturnType());
-	}
-
-	/**
-	 * Test method for {@link org.eclipse.egerrit.core.command.PublishChangeEditCommand#formatRequest()}
-	 */
-	@Test
-	public void testFormatRequest() {
-		String EXPECTED_RESULT = null;
-
-		// Run test
-		PublishChangeEditCommand command = fGerrit.publishChangeEdit("");
-		command.setId("");
-		URI uri = command.formatRequest().getURI();
-
-		// Verify result
-		assertEquals("Wrong scheme", SCHEME, uri.getScheme());
-		assertEquals("Wrong host", HOST, uri.getHost());
-		assertEquals("Wrong port", PORT, uri.getPort());
-
-		assertEquals("Wrong path", fGerrit.getRepository().getPath() + "/a/changes//edit:publish", uri.getPath());
-		assertEquals("Wrong query", EXPECTED_RESULT, uri.getQuery());
-	}
-
-	// ------------------------------------------------------------------------
-	// Test an actual request
-	// ------------------------------------------------------------------------
-
-	/**
-	 * Test method for {@link org.eclipse.egerrit.core.command.PublishChangeEditCommand#call()}.
-	 */
-	@Test
-	public void testCall() {
-		String change_id = null;
-		String commit_id = null;
-		try {
-			GitAccess gAccess = new GitAccess();
-			Git git = gAccess.getGitProject();
-
-			gAccess.addFile("EGerritTestReviewFile.java", "Hello reviewers community !\n This is the second line \n");
-			gAccess.pushFile();
-
-			change_id = gAccess.getChangeId();
-			commit_id = gAccess.getCommitId();
-
-		} catch (Exception e1) {
-			fail(e1.getMessage());
-		}
-
-		// Run test
-
-		ChangeCommitMsgCommand editMessageCmd = fGerrit.editMessage(Common.TEST_PROJECT + "~master~" + change_id);
-		ChangeEditMessageInput changeEditMessageInput = new ChangeEditMessageInput();
-		changeEditMessageInput.setMessage("A new message to be saved ...");
-
-		editMessageCmd.setChangeEditMessageInput(changeEditMessageInput);
-
-		String editMessageCmdResult = null;
-		try {
-			editMessageCmdResult = editMessageCmd.call();
-		} catch (EGerritException e) {
-			fail(e.getMessage());
-		} catch (ClientProtocolException e) {
-			fail(e.getMessage());
-		}
-
-		PublishChangeEditCommand publishChangeEditCmd = fGerrit.publishChangeEdit(Common.TEST_PROJECT + "~master~"
-				+ change_id);
-
-		String publishChangeEditCmdResult = null;
-		try {
-			publishChangeEditCmdResult = publishChangeEditCmd.call();
-
-		} catch (EGerritException e) {
-			fail(e.getMessage());
-		} catch (ClientProtocolException e) {
-			fail(e.getMessage());
-		}
-
-		// Verify result
-		assert (true);
-
-	}
-}
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/ui/internal/tabs/MessageTabView.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/ui/internal/tabs/MessageTabView.java
index 4fd528e..a0699d6 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/ui/internal/tabs/MessageTabView.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/ui/internal/tabs/MessageTabView.java
@@ -337,7 +337,7 @@
 
 	/**
 	 * @param fMessageBuffer
-	 *            the fMessageBuffer to set
+	 *            the message to set to save a buffer
 	 */
 	public void setfMessageBuffer(String fMessageBuffer) {
 		this.fMessageBuffer = fMessageBuffer;
