diff --git a/releases.moxie b/releases.moxie
index dfad650..b34ea3b 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -16,6 +16,7 @@
 	 - Do not queue emails with no recipients (issue 201)
 	 - Disable view and blame links for deleted blobs (issue 216)
 	 - Fixed 1.2.x regression with individually symlinked repositories (issue 217)
+	 - Fixed UTF-8 encoding errors in email notifications (issue 218)
 	 - Fixed NPE in 1.2.1 Federation Client (issue 219)
 	 - Fixed extracting Groovy scripts on Express installs (issue 220)
 	 - Ensure Redmine url is properly formatted (issue 223)
@@ -53,6 +54,9 @@
 	- Yukihiko Sawanobori
     - github/akquinet
     - github/dapengme
+	
+	dependencyChanges:
+	- JGit 2.3.1.201302201838-r
 }
 
 #
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index 65dc559..83769d3 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -54,6 +54,8 @@
 
 import javax.mail.Message;
 import javax.mail.MessagingException;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMultipart;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
@@ -2580,17 +2582,8 @@
 		}
 
 		// send an email, if possible
-		try {
-			Message message = mailExecutor.createMessageForAdministrators();
-			if (message != null) {
-				message.setSubject("Federation proposal from " + proposal.url);
-				message.setText("Please review the proposal @ " + gitblitUrl + "/proposal/"
-						+ proposal.token);
-				mailExecutor.queue(message);
-			}
-		} catch (Throwable t) {
-			logger.error("Failed to notify administrators of proposal", t);
-		}
+		sendMailToAdministrators("Federation proposal from " + proposal.url,
+				"Please review the proposal @ " + gitblitUrl + "/proposal/" + proposal.token);
 		return true;
 	}
 
@@ -2877,16 +2870,8 @@
 	 * @param message
 	 */
 	public void sendMailToAdministrators(String subject, String message) {
-		try {
-			Message mail = mailExecutor.createMessageForAdministrators();
-			if (mail != null) {
-				mail.setSubject(subject);
-				mail.setText(message);
-				mailExecutor.queue(mail);
-			}
-		} catch (MessagingException e) {
-			logger.error("Messaging error", e);
-		}
+		List<String> toAddresses = settings.getStrings(Keys.mail.adminAddresses);
+		sendMail(subject, message, toAddresses);
 	}
 
 	/**
@@ -2916,7 +2901,16 @@
 			Message mail = mailExecutor.createMessage(toAddresses);
 			if (mail != null) {
 				mail.setSubject(subject);
-				mail.setText(message);
+				
+				MimeBodyPart messagePart = new MimeBodyPart();				
+				messagePart.setText(message, "utf-8");
+				messagePart.setHeader("Content-Type", "text/plain; charset=\"utf-8\"");
+				messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
+				
+				MimeMultipart multiPart = new MimeMultipart();
+				multiPart.addBodyPart(messagePart);
+				mail.setContent(multiPart);
+				
 				mailExecutor.queue(mail);
 			}
 		} catch (MessagingException e) {
@@ -2951,7 +2945,16 @@
 			Message mail = mailExecutor.createMessage(toAddresses);
 			if (mail != null) {
 				mail.setSubject(subject);
-				mail.setContent(message, "text/html");
+				
+				MimeBodyPart messagePart = new MimeBodyPart();				
+				messagePart.setText(message, "utf-8");
+				messagePart.setHeader("Content-Type", "text/html; charset=\"utf-8\"");
+				messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
+				
+				MimeMultipart multiPart = new MimeMultipart();
+				multiPart.addBodyPart(messagePart);
+				mail.setContent(multiPart);
+
 				mailExecutor.queue(mail);
 			}
 		} catch (MessagingException e) {
diff --git a/src/main/java/com/gitblit/MailExecutor.java b/src/main/java/com/gitblit/MailExecutor.java
index 9001e83..54ff8b8 100644
--- a/src/main/java/com/gitblit/MailExecutor.java
+++ b/src/main/java/com/gitblit/MailExecutor.java
@@ -110,19 +110,6 @@
 		return session != null;
 	}
 
-	/**
-	 * Creates a message for the administrators.
-	 * 
-	 * @returna message
-	 */
-	public Message createMessageForAdministrators() {
-		List<String> toAddresses = settings.getStrings(Keys.mail.adminAddresses);
-		if (toAddresses.size() == 0) {
-			logger.warn("Can not notify administrators because no email addresses are defined!");
-			return null;
-		}
-		return createMessage(toAddresses);
-	}
 
 	/**
 	 * Create a message.
diff --git a/src/test/java/com/gitblit/tests/MailTest.java b/src/test/java/com/gitblit/tests/MailTest.java
index 05d55a2..4feedb0 100644
--- a/src/test/java/com/gitblit/tests/MailTest.java
+++ b/src/test/java/com/gitblit/tests/MailTest.java
@@ -22,6 +22,7 @@
 import org.junit.Test;
 
 import com.gitblit.FileSettings;
+import com.gitblit.Keys;
 import com.gitblit.MailExecutor;
 
 public class MailTest {
@@ -30,9 +31,9 @@
 	public void testSendMail() throws Exception {
 		FileSettings settings = new FileSettings("mailtest.properties");
 		MailExecutor mail = new MailExecutor(settings);
-		Message message = mail.createMessageForAdministrators();
+		Message message = mail.createMessage(settings.getStrings(Keys.mail.adminAddresses));
 		message.setSubject("Test");
-		message.setText("this is a test");
+		message.setText("﻿Lägger till andra stycket i ny fil. UTF-8 encoded");
 		mail.queue(message);
 		mail.run();
 
