diff --git a/briar-api/src/org/briarproject/api/blogs/BlogCommentHeader.java b/briar-api/src/org/briarproject/api/blogs/BlogCommentHeader.java
index 9ed79b910c46a399ab124f508033a86c0daa14fe..a5d2e4e9df68def851974bb3a896e03c21aefb1f 100644
--- a/briar-api/src/org/briarproject/api/blogs/BlogCommentHeader.java
+++ b/briar-api/src/org/briarproject/api/blogs/BlogCommentHeader.java
@@ -12,8 +12,8 @@ import static org.briarproject.api.blogs.MessageType.WRAPPED_COMMENT;
 
 public class BlogCommentHeader extends BlogPostHeader {
 
-	private String comment;
-	private BlogPostHeader parent;
+	private final String comment;
+	private final BlogPostHeader parent;
 
 	public BlogCommentHeader(@NotNull MessageType type,
 			@NotNull GroupId groupId, @Nullable String comment,
@@ -36,7 +36,6 @@ public class BlogCommentHeader extends BlogPostHeader {
 		return comment;
 	}
 
-	@NotNull
 	public BlogPostHeader getParent() {
 		return parent;
 	}
diff --git a/briar-api/src/org/briarproject/api/blogs/BlogConstants.java b/briar-api/src/org/briarproject/api/blogs/BlogConstants.java
index 30d46fa76d50a0ad58e2eb08ee787716db0865c0..13e450c1c77843198469dfc8746afbbf09dd64f4 100644
--- a/briar-api/src/org/briarproject/api/blogs/BlogConstants.java
+++ b/briar-api/src/org/briarproject/api/blogs/BlogConstants.java
@@ -35,6 +35,10 @@ public interface BlogConstants {
 	String KEY_COMMENT = "comment";
 	String KEY_ORIGINAL_MSG_ID = "originalMessageId";
 	String KEY_ORIGINAL_PARENT_MSG_ID = "originalParentMessageId";
-	String KEY_WRAPPED_MSG_ID = "wrappedMessageId";
+	/**
+	 * This is the ID of either a message wrapped from a different group
+	 * or of a message from the same group that therefore needed no wrapping.
+	 */
+	String KEY_PARENT_MSG_ID = "parentMessageId";
 
 }
diff --git a/briar-api/src/org/briarproject/api/blogs/BlogPostFactory.java b/briar-api/src/org/briarproject/api/blogs/BlogPostFactory.java
index 46907cadcfb0d2fb57fb3dafa9ade74e21ff85e3..7b05c0078ec5d5ba84e86412e5291020b1c196a1 100644
--- a/briar-api/src/org/briarproject/api/blogs/BlogPostFactory.java
+++ b/briar-api/src/org/briarproject/api/blogs/BlogPostFactory.java
@@ -23,20 +23,20 @@ public interface BlogPostFactory {
 			throws FormatException, GeneralSecurityException;
 
 	/** Wraps a blog post */
-	Message createWrappedPost(GroupId groupId, byte[] descriptor,
+	Message wrapPost(GroupId groupId, byte[] descriptor,
 			long timestamp, BdfList body)
 			throws FormatException;
 
 	/** Re-wraps a previously wrapped post */
-	Message createWrappedPost(GroupId groupId, BdfList body)
+	Message rewrapWrappedPost(GroupId groupId, BdfList body)
 			throws FormatException;
 
 	/** Wraps a blog comment */
-	Message createWrappedComment(GroupId groupId, byte[] descriptor,
+	Message wrapComment(GroupId groupId, byte[] descriptor,
 			long timestamp, BdfList body, MessageId currentId)
 			throws FormatException;
 
 	/** Re-wraps a previously wrapped comment */
-	Message createWrappedComment(GroupId groupId, BdfList body,
+	Message rewrapWrappedComment(GroupId groupId, BdfList body,
 			MessageId currentId) throws FormatException;
 }
diff --git a/briar-core/src/org/briarproject/blogs/BlogManagerImpl.java b/briar-core/src/org/briarproject/blogs/BlogManagerImpl.java
index fc278c556bff586eb69b35d8defe41aa3523271f..2720910e0c1f1ca77a7f3e93fc2950f582215fc3 100644
--- a/briar-core/src/org/briarproject/blogs/BlogManagerImpl.java
+++ b/briar-core/src/org/briarproject/blogs/BlogManagerImpl.java
@@ -64,7 +64,7 @@ import static org.briarproject.api.blogs.BlogConstants.KEY_READ;
 import static org.briarproject.api.blogs.BlogConstants.KEY_TIMESTAMP;
 import static org.briarproject.api.blogs.BlogConstants.KEY_TIME_RECEIVED;
 import static org.briarproject.api.blogs.BlogConstants.KEY_TYPE;
-import static org.briarproject.api.blogs.BlogConstants.KEY_WRAPPED_MSG_ID;
+import static org.briarproject.api.blogs.BlogConstants.KEY_PARENT_MSG_ID;
 import static org.briarproject.api.blogs.MessageType.COMMENT;
 import static org.briarproject.api.blogs.MessageType.POST;
 import static org.briarproject.api.blogs.MessageType.WRAPPED_COMMENT;
@@ -189,12 +189,12 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 				BdfDictionary d = clientHelper
 						.getMessageMetadataAsDictionary(txn, h.getParentId());
 				byte[] original1 = d.getRaw(KEY_ORIGINAL_MSG_ID);
-				byte[] original2 = meta.getRaw(KEY_ORIGINAL_MSG_ID);
+				byte[] original2 = meta.getRaw(KEY_ORIGINAL_PARENT_MSG_ID);
 				if (!Arrays.equals(original1, original2)) {
 					throw new FormatException();
 				}
 			}
-			// share dependencies recursively
+			// share dependencies recursively - TODO remove with #598
 			share(txn, h);
 
 			// broadcast event about new post or comment
@@ -205,7 +205,7 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 			// Check that the original message ID in the dependency's metadata
 			// matches the original parent ID of the wrapped comment
 			MessageId dependencyId =
-					new MessageId(meta.getRaw(KEY_WRAPPED_MSG_ID));
+					new MessageId(meta.getRaw(KEY_PARENT_MSG_ID));
 			BdfDictionary d = clientHelper
 					.getMessageMetadataAsDictionary(txn, dependencyId);
 			byte[] original1 = d.getRaw(KEY_ORIGINAL_MSG_ID);
@@ -305,7 +305,7 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 			GroupId groupId = p.getMessage().getGroupId();
 			MessageId postId = p.getMessage().getId();
 			BlogPostHeader h =
-					getPostHeaderFromMetadata(txn, 0, groupId, postId, meta);
+					getPostHeaderFromMetadata(txn, groupId, postId, meta);
 			BlogPostAddedEvent event =
 					new BlogPostAddedEvent(groupId, h, true);
 			txn.attach(event);
@@ -316,37 +316,33 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 
 	@Override
 	public void addLocalComment(LocalAuthor author, GroupId groupId,
-			@Nullable String comment, BlogPostHeader wHeader)
+			@Nullable String comment, BlogPostHeader pOriginalHeader)
 			throws DbException {
 
-		if (wHeader.getType() != POST && wHeader.getType() != COMMENT)
+		MessageType type = pOriginalHeader.getType();
+		if (type != POST && type != COMMENT)
 			throw new IllegalArgumentException("Comment on unknown type!");
 
 		Transaction txn = db.startTransaction(false);
 		try {
 			// Wrap post that we are commenting on
-			MessageId wMessageId = wrapMessage(txn, 0, groupId, wHeader);
+			MessageId parentId = wrapMessage(txn, groupId, pOriginalHeader);
 
-			// Get ID of original message
-			MessageId originalId = wHeader.getId();
-			if (wHeader.getType() != POST && wMessageId.equals(originalId)) {
-				// we comment on a non-post message that needs no wrapping,
-				// so get original message ID from it
-				BdfDictionary d = clientHelper
-						.getMessageMetadataAsDictionary(txn, wMessageId);
-				originalId = new MessageId(d.getRaw(KEY_ORIGINAL_MSG_ID));
-			}
+			// Get ID of new parent's original message.
+			// Assumes that pOriginalHeader is a POST or COMMENT
+			MessageId pOriginalId = pOriginalHeader.getId();
 
 			// Create actual comment
 			Message message = blogPostFactory
-					.createBlogComment(groupId, author, comment, originalId,
-							wMessageId);
+					.createBlogComment(groupId, author, comment, pOriginalId,
+							parentId);
 			BdfDictionary meta = new BdfDictionary();
 			meta.put(KEY_TYPE, COMMENT.getInt());
 			if (comment != null) meta.put(KEY_COMMENT, comment);
 			meta.put(KEY_TIMESTAMP, message.getTimestamp());
-			meta.put(KEY_ORIGINAL_MSG_ID, wHeader.getId());
-			meta.put(KEY_WRAPPED_MSG_ID, wMessageId);
+			meta.put(KEY_ORIGINAL_MSG_ID, message.getId());
+			meta.put(KEY_ORIGINAL_PARENT_MSG_ID, pOriginalId);
+			meta.put(KEY_PARENT_MSG_ID, parentId);
 			meta.put(KEY_AUTHOR, authorToBdfDictionary(author));
 
 			// Send comment
@@ -362,72 +358,75 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 		} catch (FormatException e) {
 			throw new DbException(e);
 		} catch (GeneralSecurityException e) {
-			throw new DbException(e);
+			throw new IllegalArgumentException("Invalid key of author", e);
 		} finally {
 			//noinspection ThrowFromFinallyBlock
 			db.endTransaction(txn);
 		}
 	}
 
-	private MessageId wrapMessage(Transaction txn, int level, GroupId groupId,
-			BlogPostHeader wHeader)
+	private MessageId wrapMessage(Transaction txn, GroupId groupId,
+			BlogPostHeader pOriginalHeader)
 			throws DbException, FormatException {
 
-		if (groupId.equals(wHeader.getGroupId())) {
+		if (groupId.equals(pOriginalHeader.getGroupId())) {
 			// We are trying to wrap a post that is already in our group.
 			// This is unnecessary, so just return the post's MessageId
-			return wHeader.getId();
+			return pOriginalHeader.getId();
 		}
 
-		// Get Group and Body of Message to be wrapped
-		Group wGroup = db.getGroup(txn, wHeader.getGroupId());
-		BdfList wBody = clientHelper.getMessageAsList(txn, wHeader.getId());
-		byte[] wDescriptor = wGroup.getDescriptor();
-		long wTimestamp = wHeader.getTimestamp();
+		// Get body of message to be wrapped
+		BdfList body =
+				clientHelper.getMessageAsList(txn, pOriginalHeader.getId());
+		long wTimestamp = pOriginalHeader.getTimestamp();
 		Message wMessage;
 
 		BdfDictionary meta = new BdfDictionary();
-		MessageType type = wHeader.getType();
+		MessageType type = pOriginalHeader.getType();
 		if (type == POST) {
+			Group wGroup = db.getGroup(txn, pOriginalHeader.getGroupId());
+			byte[] wDescriptor = wGroup.getDescriptor();
 			// Wrap post
 			wMessage = blogPostFactory
-					.createWrappedPost(groupId, wDescriptor, wTimestamp, wBody);
+					.wrapPost(groupId, wDescriptor, wTimestamp, body);
 			meta.put(KEY_TYPE, WRAPPED_POST.getInt());
 		} else if (type == COMMENT) {
-			BlogCommentHeader wComment = (BlogCommentHeader) wHeader;
+			Group wGroup = db.getGroup(txn, pOriginalHeader.getGroupId());
+			byte[] wDescriptor = wGroup.getDescriptor();
+			BlogCommentHeader wComment = (BlogCommentHeader) pOriginalHeader;
 			MessageId wrappedId =
-					wrapMessage(txn, ++level, groupId, wComment.getParent());
+					wrapMessage(txn, groupId, wComment.getParent());
 			// Wrap comment
 			wMessage = blogPostFactory
-					.createWrappedComment(groupId, wDescriptor, wTimestamp,
-							wBody, wrappedId);
+					.wrapComment(groupId, wDescriptor, wTimestamp,
+							body, wrappedId);
 			meta.put(KEY_TYPE, WRAPPED_COMMENT.getInt());
 			if(wComment.getComment() != null)
 				meta.put(KEY_COMMENT, wComment.getComment());
-			meta.put(KEY_WRAPPED_MSG_ID, wrappedId);
+			meta.put(KEY_PARENT_MSG_ID, wrappedId);
 		} else if (type == WRAPPED_POST) {
 			// Re-wrap wrapped post without adding another wrapping layer
-			wMessage = blogPostFactory.createWrappedPost(groupId, wBody);
+			wMessage = blogPostFactory.rewrapWrappedPost(groupId, body);
 			meta.put(KEY_TYPE, WRAPPED_POST.getInt());
 		} else if (type == WRAPPED_COMMENT) {
-			BlogCommentHeader wComment = (BlogCommentHeader) wHeader;
+			BlogCommentHeader wComment = (BlogCommentHeader) pOriginalHeader;
 			MessageId wrappedId =
-					wrapMessage(txn, ++level, groupId, wComment.getParent());
+					wrapMessage(txn, groupId, wComment.getParent());
 			// Re-wrap wrapped comment
 			wMessage = blogPostFactory
-					.createWrappedComment(groupId, wBody, wrappedId);
+					.rewrapWrappedComment(groupId, body, wrappedId);
 			meta.put(KEY_TYPE, WRAPPED_COMMENT.getInt());
 			if(wComment.getComment() != null)
 				meta.put(KEY_COMMENT, wComment.getComment());
-			meta.put(KEY_WRAPPED_MSG_ID, wrappedId);
+			meta.put(KEY_PARENT_MSG_ID, wrappedId);
 		} else {
 			throw new IllegalArgumentException(
 					"Unknown Message Type: " + type);
 		}
-		meta.put(KEY_ORIGINAL_MSG_ID, wHeader.getId());
-		meta.put(KEY_AUTHOR, authorToBdfDictionary(wHeader.getAuthor()));
-		meta.put(KEY_TIMESTAMP, wHeader.getTimestamp());
-		meta.put(KEY_TIME_RECEIVED, wHeader.getTimeReceived());
+		meta.put(KEY_ORIGINAL_MSG_ID, pOriginalHeader.getId());
+		meta.put(KEY_AUTHOR, authorToBdfDictionary(pOriginalHeader.getAuthor()));
+		meta.put(KEY_TIMESTAMP, pOriginalHeader.getTimestamp());
+		meta.put(KEY_TIME_RECEIVED, pOriginalHeader.getTimeReceived());
 
 		// Send wrapped message and store metadata
 		clientHelper.addLocalMessage(txn, wMessage, CLIENT_ID, meta, true);
@@ -553,7 +552,7 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 				new BdfEntry(KEY_TYPE, COMMENT.getInt())
 		);
 
-		// TODO this could be optimized to re-use existing headers
+		// TODO this could be optimized by looking up author status once (#625)
 
 		Collection<BlogPostHeader> headers = new ArrayList<BlogPostHeader>();
 		Transaction txn = db.startTransaction(true);
@@ -605,19 +604,13 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 	}
 
 	private BlogPostHeader getPostHeaderFromMetadata(Transaction txn,
-			GroupId groupId, MessageId id, BdfDictionary meta)
-			throws DbException, FormatException {
-		return getPostHeaderFromMetadata(txn, 0, groupId, id, meta);
-	}
-
-	private BlogPostHeader getPostHeaderFromMetadata(Transaction txn, int level,
 			GroupId groupId, MessageId id) throws DbException, FormatException {
 		BdfDictionary meta =
 				clientHelper.getMessageMetadataAsDictionary(txn, id);
-		return getPostHeaderFromMetadata(txn, level, groupId, id, meta);
+		return getPostHeaderFromMetadata(txn, groupId, id, meta);
 	}
 
-	private BlogPostHeader getPostHeaderFromMetadata(Transaction txn, int level,
+	private BlogPostHeader getPostHeaderFromMetadata(Transaction txn,
 			GroupId groupId, MessageId id, BdfDictionary meta)
 			throws DbException, FormatException {
 
@@ -637,9 +630,9 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 
 		if (type == COMMENT || type == WRAPPED_COMMENT) {
 			String comment = meta.getOptionalString(KEY_COMMENT);
-			MessageId parentId = new MessageId(meta.getRaw(KEY_WRAPPED_MSG_ID));
+			MessageId parentId = new MessageId(meta.getRaw(KEY_PARENT_MSG_ID));
 			BlogPostHeader parent =
-					getPostHeaderFromMetadata(txn, ++level, groupId, parentId);
+					getPostHeaderFromMetadata(txn, groupId, parentId);
 			return new BlogCommentHeader(type, groupId, comment, parent, id,
 					timestamp, timeReceived, author, authorStatus, read);
 		} else {
@@ -653,6 +646,8 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
 		return MessageType.valueOf(longType.intValue());
 	}
 
+	// TODO remove when implementing #589
+	@Deprecated
 	private void share(Transaction txn, BlogPostHeader h) throws DbException {
 		clientHelper.setMessageShared(txn, h.getId(), true);
 		if (h instanceof BlogCommentHeader) {
diff --git a/briar-core/src/org/briarproject/blogs/BlogPostFactoryImpl.java b/briar-core/src/org/briarproject/blogs/BlogPostFactoryImpl.java
index 5d55c2ddbd2697a80b5557f84b78041f0db58306..62e6bc0addaecdd2e868bd780d68205f54f08e36 100644
--- a/briar-core/src/org/briarproject/blogs/BlogPostFactoryImpl.java
+++ b/briar-core/src/org/briarproject/blogs/BlogPostFactoryImpl.java
@@ -3,6 +3,7 @@ package org.briarproject.blogs;
 import org.briarproject.api.FormatException;
 import org.briarproject.api.blogs.BlogPost;
 import org.briarproject.api.blogs.BlogPostFactory;
+import org.briarproject.api.blogs.MessageType;
 import org.briarproject.api.clients.ClientHelper;
 import org.briarproject.api.data.BdfList;
 import org.briarproject.api.identity.LocalAuthor;
@@ -58,28 +59,31 @@ class BlogPostFactoryImpl implements BlogPostFactory {
 
 	@Override
 	public Message createBlogComment(GroupId groupId, LocalAuthor author,
-			@Nullable String comment, MessageId originalId, MessageId wrappedId)
+			@Nullable String comment, MessageId pOriginalId, MessageId parentId)
 			throws FormatException, GeneralSecurityException {
 
 		long timestamp = clock.currentTimeMillis();
 
 		// Generate the signature
 		BdfList signed =
-				BdfList.of(groupId, timestamp, comment, originalId, wrappedId);
+				BdfList.of(groupId, timestamp, comment, pOriginalId, parentId);
 		byte[] sig = clientHelper.sign(signed, author.getPrivateKey());
 
 		// Serialise the signed message
 		BdfList message =
-				BdfList.of(COMMENT.getInt(), comment, originalId, wrappedId,
+				BdfList.of(COMMENT.getInt(), comment, pOriginalId, parentId,
 						sig);
 		return clientHelper.createMessage(groupId, timestamp, message);
 	}
 
 	@Override
-	public Message createWrappedPost(GroupId groupId, byte[] descriptor,
+	public Message wrapPost(GroupId groupId, byte[] descriptor,
 			long timestamp, BdfList body)
 			throws FormatException {
 
+		if (getType(body) != POST)
+			throw new IllegalArgumentException("Needs to wrap a POST");
+
 		// Serialise the message
 		String content = body.getString(1);
 		byte[] signature = body.getRaw(2);
@@ -91,9 +95,12 @@ class BlogPostFactoryImpl implements BlogPostFactory {
 	}
 
 	@Override
-	public Message createWrappedPost(GroupId groupId, BdfList body)
+	public Message rewrapWrappedPost(GroupId groupId, BdfList body)
 			throws FormatException {
 
+		if (getType(body) != WRAPPED_POST)
+			throw new IllegalArgumentException("Needs to wrap a WRAPPED_POST");
+
 		// Serialise the message
 		byte[] descriptor = body.getRaw(1);
 		long timestamp = body.getLong(2);
@@ -107,38 +114,48 @@ class BlogPostFactoryImpl implements BlogPostFactory {
 	}
 
 	@Override
-	public Message createWrappedComment(GroupId groupId, byte[] descriptor,
-			long timestamp, BdfList body, MessageId currentId)
+	public Message wrapComment(GroupId groupId, byte[] descriptor,
+			long timestamp, BdfList body, MessageId parentId)
 			throws FormatException {
 
+		if (getType(body) != COMMENT)
+			throw new IllegalArgumentException("Needs to wrap a COMMENT");
+
 		// Serialise the message
 		String comment = body.getOptionalString(1);
-		byte[] originalId = body.getRaw(2);
-		byte[] oldId = body.getRaw(3);
+		byte[] pOriginalId = body.getRaw(2);
+		byte[] oldParentId = body.getRaw(3);
 		byte[] signature = body.getRaw(4);
 		BdfList message =
 				BdfList.of(WRAPPED_COMMENT.getInt(), descriptor, timestamp,
-						comment, originalId, oldId, signature, currentId);
+						comment, pOriginalId, oldParentId, signature, parentId);
 		return clientHelper
 				.createMessage(groupId, clock.currentTimeMillis(), message);
 	}
 
 	@Override
-	public Message createWrappedComment(GroupId groupId, BdfList body,
-			MessageId currentId) throws FormatException {
+	public Message rewrapWrappedComment(GroupId groupId, BdfList body,
+			MessageId parentId) throws FormatException {
+
+		if (getType(body) != WRAPPED_COMMENT)
+			throw new IllegalArgumentException(
+					"Needs to wrap a WRAPPED_COMMENT");
 
 		// Serialise the message
 		byte[] descriptor = body.getRaw(1);
 		long timestamp = body.getLong(2);
 		String comment = body.getOptionalString(3);
-		byte[] originalId = body.getRaw(4);
-		byte[] oldId = body.getRaw(5);
+		byte[] pOriginalId = body.getRaw(4);
+		byte[] oldParentId = body.getRaw(5);
 		byte[] signature = body.getRaw(6);
 		BdfList message =
 				BdfList.of(WRAPPED_COMMENT.getInt(), descriptor, timestamp,
-						comment, originalId, oldId, signature, currentId);
+						comment, pOriginalId, oldParentId, signature, parentId);
 		return clientHelper
 				.createMessage(groupId, clock.currentTimeMillis(), message);
 	}
 
+	private MessageType getType(BdfList body) throws FormatException {
+		return MessageType.valueOf(body.getLong(0).intValue());
+	}
 }
diff --git a/briar-core/src/org/briarproject/blogs/BlogPostValidator.java b/briar-core/src/org/briarproject/blogs/BlogPostValidator.java
index 9014e76ba880e0cac2e21ec2923d7846b33a625f..eaab2313fe3ba592f6fc64bd6eb911a75373d446 100644
--- a/briar-core/src/org/briarproject/blogs/BlogPostValidator.java
+++ b/briar-core/src/org/briarproject/blogs/BlogPostValidator.java
@@ -33,7 +33,7 @@ import static org.briarproject.api.blogs.BlogConstants.KEY_AUTHOR_ID;
 import static org.briarproject.api.blogs.BlogConstants.KEY_AUTHOR_NAME;
 import static org.briarproject.api.blogs.BlogConstants.KEY_COMMENT;
 import static org.briarproject.api.blogs.BlogConstants.KEY_ORIGINAL_PARENT_MSG_ID;
-import static org.briarproject.api.blogs.BlogConstants.KEY_WRAPPED_MSG_ID;
+import static org.briarproject.api.blogs.BlogConstants.KEY_PARENT_MSG_ID;
 import static org.briarproject.api.blogs.BlogConstants.KEY_ORIGINAL_MSG_ID;
 import static org.briarproject.api.blogs.BlogConstants.KEY_PUBLIC_KEY;
 import static org.briarproject.api.blogs.BlogConstants.KEY_READ;
@@ -129,9 +129,9 @@ class BlogPostValidator extends BdfMessageValidator {
 
 		// parent_original_id
 		// The ID of a post or comment in this group or another group
-		byte[] originalIdBytes = body.getRaw(1);
-		checkLength(originalIdBytes, MessageId.LENGTH);
-		MessageId originalId = new MessageId(originalIdBytes);
+		byte[] pOriginalIdBytes = body.getRaw(1);
+		checkLength(pOriginalIdBytes, MessageId.LENGTH);
+		MessageId pOriginalId = new MessageId(pOriginalIdBytes);
 
 		// parent_id
 		// The ID of a post, comment, wrapped post or wrapped comment in this
@@ -145,7 +145,7 @@ class BlogPostValidator extends BdfMessageValidator {
 		byte[] sig = body.getRaw(3);
 		checkLength(sig, 0, MAX_SIGNATURE_LENGTH);
 		BdfList signed =
-				BdfList.of(g.getId(), m.getTimestamp(), comment, originalId,
+				BdfList.of(g.getId(), m.getTimestamp(), comment, pOriginalId,
 						currentId);
 		Blog b = blogFactory.parseBlog(g, ""); // description doesn't matter
 		Author a = b.getAuthor();
@@ -154,8 +154,9 @@ class BlogPostValidator extends BdfMessageValidator {
 		// Return the metadata and dependencies
 		BdfDictionary meta = new BdfDictionary();
 		if (comment != null) meta.put(KEY_COMMENT, comment);
-		meta.put(KEY_ORIGINAL_MSG_ID, originalId);
-		meta.put(KEY_WRAPPED_MSG_ID, currentId);
+		meta.put(KEY_ORIGINAL_MSG_ID, m.getId());
+		meta.put(KEY_ORIGINAL_PARENT_MSG_ID, pOriginalId);
+		meta.put(KEY_PARENT_MSG_ID, currentId);
 		meta.put(KEY_AUTHOR, authorToBdfDictionary(a));
 		Collection<MessageId> dependencies = Collections.singleton(currentId);
 		return new BdfMessageContext(meta, dependencies);
@@ -219,9 +220,9 @@ class BlogPostValidator extends BdfMessageValidator {
 
 		// c_parent_original_id
 		// Taken from the original comment
-		byte[] originalIdBytes = body.getRaw(3);
-		checkLength(originalIdBytes, MessageId.LENGTH);
-		MessageId originalId = new MessageId(originalIdBytes);
+		byte[] pOriginalIdBytes = body.getRaw(3);
+		checkLength(pOriginalIdBytes, MessageId.LENGTH);
+		MessageId pOriginalId = new MessageId(pOriginalIdBytes);
 
 		// c_parent_id
 		// Taken from the original comment
@@ -238,14 +239,14 @@ class BlogPostValidator extends BdfMessageValidator {
 		// The ID of a post, comment, wrapped post or wrapped comment in this
 		// group, which had the ID c_parent_original_id in the group
 		// where it was originally posted
-		byte[] currentIdBytes = body.getRaw(6);
-		checkLength(currentIdBytes, MessageId.LENGTH);
-		MessageId currentId = new MessageId(currentIdBytes);
+		byte[] parentIdBytes = body.getRaw(6);
+		checkLength(parentIdBytes, MessageId.LENGTH);
+		MessageId parentId = new MessageId(parentIdBytes);
 
 		// Get and Validate the Wrapped Comment
 		Group wGroup = groupFactory
 				.createGroup(BlogManagerImpl.CLIENT_ID, descriptor);
-		BdfList wBodyList =	BdfList.of(COMMENT.getInt(), comment, originalId,
+		BdfList wBodyList =	BdfList.of(COMMENT.getInt(), comment, pOriginalId,
 				oldId, signature);
 		byte[] wBody = clientHelper.toByteArray(wBodyList);
 		Message wMessage =
@@ -254,11 +255,11 @@ class BlogPostValidator extends BdfMessageValidator {
 		BdfMessageContext c = validateComment(wMessage, wGroup, wBodyList);
 
 		// Return the metadata and dependencies
-		Collection<MessageId> dependencies = Collections.singleton(currentId);
+		Collection<MessageId> dependencies = Collections.singleton(parentId);
 		BdfDictionary meta = new BdfDictionary();
 		meta.put(KEY_ORIGINAL_MSG_ID, wMessage.getId());
-		meta.put(KEY_ORIGINAL_PARENT_MSG_ID, originalId);
-		meta.put(KEY_WRAPPED_MSG_ID, currentId);
+		meta.put(KEY_ORIGINAL_PARENT_MSG_ID, pOriginalId);
+		meta.put(KEY_PARENT_MSG_ID, parentId);
 		meta.put(KEY_TIMESTAMP, wTimestamp);
 		if (comment != null) meta.put(KEY_COMMENT, comment);
 		meta.put(KEY_AUTHOR, c.getDictionary().getDictionary(KEY_AUTHOR));
diff --git a/briar-tests/src/org/briarproject/blogs/BlogPostValidatorTest.java b/briar-tests/src/org/briarproject/blogs/BlogPostValidatorTest.java
index a6fa5f73e860896ddff980a13b040561dbb5b39a..fae1f04d7b7847ac88098d69c3fcf690011faeb2 100644
--- a/briar-tests/src/org/briarproject/blogs/BlogPostValidatorTest.java
+++ b/briar-tests/src/org/briarproject/blogs/BlogPostValidatorTest.java
@@ -37,7 +37,7 @@ import static org.briarproject.api.blogs.BlogConstants.KEY_AUTHOR;
 import static org.briarproject.api.blogs.BlogConstants.KEY_AUTHOR_ID;
 import static org.briarproject.api.blogs.BlogConstants.KEY_AUTHOR_NAME;
 import static org.briarproject.api.blogs.BlogConstants.KEY_COMMENT;
-import static org.briarproject.api.blogs.BlogConstants.KEY_WRAPPED_MSG_ID;
+import static org.briarproject.api.blogs.BlogConstants.KEY_PARENT_MSG_ID;
 import static org.briarproject.api.blogs.BlogConstants.KEY_ORIGINAL_MSG_ID;
 import static org.briarproject.api.blogs.BlogConstants.KEY_PUBLIC_KEY;
 import static org.briarproject.api.blogs.BlogConstants.KEY_READ;
@@ -168,7 +168,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 		assertEquals(comment, result.getString(KEY_COMMENT));
 		assertEquals(authorDict, result.getDictionary(KEY_AUTHOR));
 		assertEquals(originalId.getBytes(), result.getRaw(KEY_ORIGINAL_MSG_ID));
-		assertEquals(currentId.getBytes(), result.getRaw(KEY_WRAPPED_MSG_ID));
+		assertEquals(currentId.getBytes(), result.getRaw(KEY_PARENT_MSG_ID));
 		assertFalse(result.getBoolean(KEY_READ));
 		context.assertIsSatisfied();
 	}
@@ -269,7 +269,7 @@ public class BlogPostValidatorTest extends BriarTestCase {
 		assertEquals(authorDict, result.getDictionary(KEY_AUTHOR));
 		assertEquals(
 				message.getId().getBytes(), result.getRaw(KEY_ORIGINAL_MSG_ID));
-		assertEquals(currentId.getBytes(), result.getRaw(KEY_WRAPPED_MSG_ID));
+		assertEquals(currentId.getBytes(), result.getRaw(KEY_PARENT_MSG_ID));
 		context.assertIsSatisfied();
 	}