diff --git a/src/main/java/com/atlassian/uwc/converters/moinmoin/MoinInfoConverter.java b/src/main/java/com/atlassian/uwc/converters/moinmoin/MoinInfoConverter.java
index e35b69b..45632ef 100644
--- a/src/main/java/com/atlassian/uwc/converters/moinmoin/MoinInfoConverter.java
+++ b/src/main/java/com/atlassian/uwc/converters/moinmoin/MoinInfoConverter.java
@@ -1,16 +1,15 @@
 package com.atlassian.uwc.converters.moinmoin;
 
+import java.io.File;
+import java.nio.charset.Charset;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import com.atlassian.uwc.ui.FileUtils;
 import org.apache.log4j.Logger;
 
 import com.atlassian.uwc.converters.BaseConverter;
@@ -20,12 +19,14 @@
 
 	final Logger log = Logger.getLogger(this.getClass());
 	
-	final Pattern date = Pattern.compile("\\{timestamp:([^}]*)\\}", Pattern.MULTILINE);
-	final Pattern username = Pattern.compile("\\{userid:([^}]*)\\}", Pattern.MULTILINE);
+	final Pattern date = Pattern.compile("\\{timestamp:([^}]*)\\}\\n", Pattern.MULTILINE);
+	final Pattern username = Pattern.compile("\\{userid:([^}]*)\\}\\n", Pattern.MULTILINE);
 	// Use reluctant quantifier for '.' in the revcomment, to be able to handle revcomments with curly braces inside
 	final Pattern revInfoPattern = Pattern.compile("\\{revcomment:(.*?)\\}\\n", Pattern.MULTILINE);
+	// Pattern for parsing the origauthor (injected by the MoinmoinExporter), so it can be added to the page metadata
+	final Pattern origAuthorPattern = Pattern.compile("\\{origauthor:([^}]*)\\}\\n", Pattern.MULTILINE);
 	final Pattern catPattern = Pattern.compile("\\[{2}CategoryRoot\\/([^\\]]*)\\]{2}", Pattern.MULTILINE);
-	
+
 	public MoinInfoConverter() {
 		log.debug("Loaded MoinInfoConverter" + this.toString());
 	}
@@ -38,6 +39,7 @@
 		String username = getUser(input);
 		Date timestamp = getDate(input);
 		String revInfo = getRevinfo(input);
+		String origAuthor = getOrigAuthor(input);
 		String converted = cleanUserDate(input);
 		
 		addKeywords(input, page);
@@ -46,8 +48,9 @@
 				
 		if (username != null) page.setAuthor(username);
 		if (timestamp != null) page.setTimestamp(timestamp);
-		
-		// if (revInfo != null) page.set..... //XXX not possible to set the log here 
+		if (revInfo != null) page.setVersionComment(revInfo);
+		if (origAuthor != null) page.setOrigAuthor(origAuthor);
+
 		page.setConvertedText(converted);
 		log.debug("Adding User and Date metadata - Complete");
 	}
@@ -73,7 +76,15 @@
 		return null;
 	}
 
-	
+	private String getOrigAuthor(String input) {
+		Matcher origAuthorFinder = origAuthorPattern.matcher(input);
+		if (origAuthorFinder.find()){
+			return origAuthorFinder.group(1);
+		}
+		return null;
+	}
+
+
 	protected String getUser(String input) {
 		Matcher userFinder = username.matcher(input);
 		if (userFinder.find()) {
@@ -112,8 +123,11 @@
 		if(x.find()){
 			input = x.replaceFirst("");
 		}
+		Matcher origAuthorFinder = origAuthorPattern.matcher(input);
+		if (origAuthorFinder.find()) {
+			input = origAuthorFinder.replaceFirst("");
+		}
 		return input;
 	}
 
-	
 }
