diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentController.java
index 014265aa40d8b1f39e424f5673690c1dc2b162d3..2617a3c3f8df33777cc5dabd9b693ee7e81ef069 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentController.java
@@ -35,6 +35,15 @@ public class CommentController extends BaseController {
 		return commentController.getCommentList(token, projectId, columns, "", "", removed);
 	}
 
+	@RequestMapping(value = "/projects/{projectId}/comments/{commentId}/", method = { RequestMethod.DELETE }, produces = { MediaType.APPLICATION_JSON_VALUE })
+	public Map<String, Object> removeComment(//
+			@CookieValue(value = Configuration.AUTH_TOKEN) String token, //
+			@PathVariable(value = "projectId") String projectId, //
+			@PathVariable(value = "commentId") String commentId //
+	) throws SecurityException, QueryException {
+		return commentController.removeComment(token, projectId, commentId);
+	}
+
 	@RequestMapping(value = "/projects/{projectId}/comments/models/{modelId}/bioEntities/reactions/{reactionId}", method = { RequestMethod.GET },
 			produces = { MediaType.APPLICATION_JSON_VALUE })
 	public List<Map<String, Object>> getCommentsByReaction(//
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentRestImpl.java
index 35da482c29358b56aa08828e6b70a813509507fa..a56a720513b5efbb56731c791d8d7c286fb97f81 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/comments/CommentRestImpl.java
@@ -51,7 +51,7 @@ public class CommentRestImpl extends BaseRestImpl {
 		AuthenticationToken authenticationToken = getUserService().getToken(token);
 		Project project = getProjectService().getProjectByProjectId(projectId, authenticationToken);
 		if (project == null) {
-			throw new QueryException("Project with given id doesn't exist");
+			throw new ObjectNotFoundException("Project with given id doesn't exist");
 		}
 		boolean isAdmin = getUserService().userHasPrivilege(authenticationToken, PrivilegeType.EDIT_COMMENTS_PROJECT, project);
 		Set<String> columnsSet = createCommentColumnSet(columns, isAdmin);
@@ -323,4 +323,19 @@ public class CommentRestImpl extends BaseRestImpl {
 		return preparedComment(comment, createCommentColumnSet("", isAdmin), isAdmin);
 	}
 
+	public Map<String, Object> removeComment(String token, String projectId, String commentId) throws SecurityException, QueryException {
+		AuthenticationToken authenticationToken = getUserService().getToken(token);
+		Project project = getProjectService().getProjectByProjectId(projectId, authenticationToken);
+		if (project == null) {
+			throw new ObjectNotFoundException("Project with given id doesn't exist");
+		}
+		Comment comment = commentService.getCommentById(commentId);
+		if (comment == null || comment.getModelData().getProject().getId() != project.getId()) {
+			throw new ObjectNotFoundException("Comment with given id doesn't exist");
+		}
+
+		commentService.deleteComment(comment, authenticationToken);
+		return okStatus();
+	}
+
 }
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/CommentService.java b/service/src/main/java/lcsb/mapviewer/services/impl/CommentService.java
index 46de1b259c024f63105f07dff3ce1b045fb1c9c6..c27eea82cec7b868ef6610e70de715e82a9d7fd6 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/CommentService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/CommentService.java
@@ -422,4 +422,26 @@ public class CommentService implements ICommentService {
 		return comments;
 	}
 
+	@Override
+	public void deleteComment(Comment comment, AuthenticationToken token) throws UserAccessException {
+		Project project = comment.getModelData().getProject();
+		boolean editComments = userService.userHasPrivilege(token, PrivilegeType.EDIT_COMMENTS_PROJECT, project);
+		if (editComments || userService.getUserByToken(token).equals(comment.getUser())) {
+			comment.setDeleted(true);
+			commentDao.update(comment);
+		} else {
+			throw new UserAccessException("You have no privileges to remove the comment");
+		}
+	}
+
+	@Override
+	public Comment getCommentById(String commentId) {
+		int id = -1;
+		try {
+			id = Integer.parseInt(commentId);
+		} catch (NumberFormatException e) {
+		}
+		return commentDao.getById(id);
+	}
+
 }
diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java
index b9fc7aa6965326acb6f769b26979250ded6a1163..06d32a16cc550af0da85dea6377d1931bda5ba79 100644
--- a/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java
@@ -59,6 +59,8 @@ public interface ICommentService {
 	 *          why user wants to remove the comment
 	 */
 	void deleteComment(User loggedUser, String commentId, String reason);
+	
+	void deleteComment(Comment comment, AuthenticationToken token) throws UserAccessException;
 
 	/**
 	 * Method returns all comments for a given map.
@@ -115,4 +117,6 @@ public interface ICommentService {
 	 */
 	List<ElementIdentifierDetails> getElementInformationForResult(ElementIdentifier element, Model model);
 
+	Comment getCommentById(String commentId);
+
 }