diff --git a/include/class.mailparse.php b/include/class.mailparse.php
index 3e412675a3ada7ff0d319b15f2e8a89f4b9cade9..ba8d217612d2f5905c9936832859fae5c82820e9 100644
--- a/include/class.mailparse.php
+++ b/include/class.mailparse.php
@@ -27,18 +27,29 @@ class Mail_Parse {
 
     var $struct;
 
-    function Mail_parse($mimeMessage,$includeBodies=true,$decodeHeaders=TRUE,$decodeBodies=TRUE){
+    var $charset ='UTF-8'; //Default charset.
 
-        $this->mime_message=$mimeMessage;
-        $this->include_bodies=$includeBodies;
-        $this->decode_headers=$decodeHeaders;
-        $this->decode_bodies=$decodeBodies;
+    function Mail_parse($mimeMessage, $charset=null){
+
+        $this->mime_message = $mimeMessage;
+
+        if($charset)
+            $this->charset = $charset;
+
+        $this->include_bodies = true;
+        $this->decode_headers = true;
+        $this->decode_bodies = true;
+
+        //Desired charset
+        if($charset)
+            $this->charset = $charset;
     }
 
     function decode() {
 
         $params = array('crlf'          => "\r\n",
-                        'input'         =>$this->mime_message,
+                        'charset'       => $this->charset,
+                        'input'         => $this->mime_message,
                         'include_bodies'=> $this->include_bodies,
                         'decode_headers'=> $this->decode_headers,
                         'decode_bodies' => $this->decode_bodies);
@@ -146,12 +157,18 @@ class Mail_Parse {
         return $body;
     }
 
-    function getPart($struct,$ctypepart) {
+    function getPart($struct, $ctypepart) {
 
         if($struct && !$struct->parts) {
             $ctype = @strtolower($struct->ctype_primary.'/'.$struct->ctype_secondary);
-            if($ctype && strcasecmp($ctype,$ctypepart)==0)
-                return $struct->body;
+            if($ctype && strcasecmp($ctype,$ctypepart)==0) {
+                $content = $struct->body;
+                //Encode to desired encoding - ONLY if charset is known??
+                if(isset($struct->ctype_parameters['charset']) && strcasecmp($struct->ctype_parameters['charset'], $this->charset))
+                    $content = Format::encode($content, $struct->ctype_parameters['charset'], $this->charset);
+
+                return $content;
+            }
         }
 
         $data='';
@@ -295,8 +312,8 @@ class EmailDataParser {
             }
         }
 
-        $data['subject'] = Format::utf8encode($parser->getSubject());
-        $data['message'] = Format::utf8encode(Format::stripEmptyLines($parser->getBody()));
+        $data['subject'] = $parser->getSubject();
+        $data['message'] = Format::stripEmptyLines($parser->getBody());
         $data['header'] = $parser->getHeader();
         $data['mid'] = $parser->getMessageId();
         $data['priorityId'] = $parser->getPriority();