;;; Code:
 
-(defconst mime-library-version-string "FLIM 1.6.0 - \"Ogura\"")
+(defconst mime-library-version-string "FLIM 1.6.1 - \"Iseda\"")
 
 
 ;;; @ variables
 (defsubst mime-entity-parsed-header (entity)       (aref entity 11))
 
 (defsubst mime-entity-set-original-header (entity header)
-  (aset entity 9 header))
+  (aset entity  9 header))
+(defsubst mime-entity-set-children (entity children)
+  (aset entity 10 children))
 (defsubst mime-entity-set-parsed-header (entity header)
   (aset entity 11 header))
 
 
 ;;; @ message parser
 ;;;
 
-(defun mime-parse-multipart (header-start header-end body-start body-end
-                                         content-type content-disposition
-                                         encoding node-id)
+(defun mime-parse-multipart (entity)
   (goto-char (point-min))
-  (let* ((dash-boundary
-         (concat "--"
-                 (std11-strip-quoted-string
-                  (mime-content-type-parameter content-type "boundary"))))
+  (let* ((content-type (mime-entity-content-type entity))
+        (dash-boundary
+         (concat "--" (mime-content-type-parameter content-type "boundary")))
         (delimiter       (concat "\n" (regexp-quote dash-boundary)))
         (close-delimiter (concat delimiter "--[ \t]*$"))
         (rsep (concat delimiter "[ \t]*\n"))
              (make-mime-content-type 'message 'rfc822)
            (make-mime-content-type 'text 'plain)
            ))
+        (header-end (mime-entity-header-end entity))
+        (body-end (mime-entity-body-end entity))
+        (node-id (mime-entity-node-id entity))
         cb ce ret ncb children (i 0))
     (save-restriction
       (goto-char body-end)
        )
       (setq children (cons ret children))
       )
-    (make-mime-entity (current-buffer)
-                     header-start header-end body-start body-end
-                     node-id content-type content-disposition encoding
-                     (nreverse children))
-    ))
+    (mime-entity-set-children entity (nreverse children))
+    entity))
+
+(defun mime-parse-encapsulated (entity)
+  (mime-entity-set-children
+   entity
+   (save-restriction
+     (narrow-to-region (mime-entity-body-start entity)
+                      (mime-entity-body-end entity))
+     (list (mime-parse-message
+           nil nil (cons 0 (mime-entity-node-id entity))))
+     ))
+  entity)
 
 ;;;###autoload
 (defun mime-parse-message (&optional default-ctl default-encoding node-id)
        body-start
        (body-end (point-max))
        content-type content-disposition encoding
-       primary-type)
+       primary-type
+       entity)
     (goto-char header-start)
     (if (re-search-forward "^$" nil t)
        (setq header-end (match-end 0)
                         default-encoding))
            primary-type (mime-content-type-primary-type content-type))
       )
+    (setq entity
+         (make-mime-entity (current-buffer)
+                           header-start header-end body-start body-end
+                           node-id
+                           content-type content-disposition encoding nil))
     (cond ((eq primary-type 'multipart)
-          (mime-parse-multipart header-start header-end
-                                body-start body-end
-                                content-type content-disposition encoding
-                                node-id)
+          (mime-parse-multipart entity)
           )
          ((and (eq primary-type 'message)
                (memq (mime-content-type-subtype content-type)
                      '(rfc822 news external-body)
                      ))
-           (make-mime-entity (current-buffer)
-                            header-start header-end body-start body-end
-                            node-id
-                            content-type content-disposition encoding
-                            (save-restriction
-                              (narrow-to-region body-start body-end)
-                              (list (mime-parse-message
-                                     nil nil (cons 0 node-id)))
-                              ))
+          (mime-parse-encapsulated entity)
           )
-         (t 
-           (make-mime-entity (current-buffer)
-                            header-start header-end body-start body-end
-                            node-id
-                            content-type content-disposition encoding nil)
-          ))
-    ))
+         (t entity))))
 
 
 ;;; @ for buffer