diff --git a/mailhandler_d8.info.yml b/mailhandler_d8.info.yml
index 6ce641c..c318ac2 100644
--- a/mailhandler_d8.info.yml
+++ b/mailhandler_d8.info.yml
@@ -7,3 +7,4 @@ core: 8.x
 dependencies:
   - inmail
   - node
+  - user
diff --git a/src/MailhandlerAnalyzerResult.php b/src/MailhandlerAnalyzerResult.php
index d64a4da..aba94f6 100644
--- a/src/MailhandlerAnalyzerResult.php
+++ b/src/MailhandlerAnalyzerResult.php
@@ -2,9 +2,6 @@
 
 namespace Drupal\mailhandler_d8;
 
-use Drupal\inmail\AnalyzerResultInterface;
-use Drupal\user\UserInterface;
-
 /**
  * Contains Mailhandler analyzer results.
  *
@@ -13,7 +10,7 @@ use Drupal\user\UserInterface;
  *
  * @ingroup analyzer
  */
-class MailhandlerAnalyzerResult implements AnalyzerResultInterface {
+class MailhandlerAnalyzerResult extends MailhandlerAnalyzerResultBase {
 
   /**
    * Identifies this class in relation to other analyzer results.
@@ -25,102 +22,6 @@ class MailhandlerAnalyzerResult implements AnalyzerResultInterface {
   const TOPIC = 'mailhandler';
 
   /**
-   * The sender.
-   *
-   * @var string
-   */
-  protected $sender;
-
-  /**
-   * The user
-   *
-   * @var \Drupal\user\UserInterface
-   */
-  protected $user;
-
-  /**
-   * Returns a function closure that in turn returns a new class instance.
-   *
-   * @return callable
-   *   A factory closure that returns a new MailhandlerAnalyzerResult object
-   *   when called.
-   */
-  public static function createFactory() {
-    return function() {
-      return new static();
-    };
-  }
-
-  /**
-   * Sets the sender mail address.
-   *
-   * @param string $sender
-   *   The address of the sender.
-   */
-  public function setSender($sender) {
-    if (!isset($this->sender)) {
-      $this->sender = $sender;
-    }
-  }
-
-  /**
-   * Returns the sender of the message.
-   *
-   * @return string|null
-   *   The address of the sender, or NULL if it is found.
-   */
-  public function getSender() {
-    return $this->sender;
-  }
-
-  /**
-   * Sets a user.
-   *
-   * @param \Drupal\user\UserInterface $user
-   *   The user.
-   */
-  public function setUser(UserInterface $user) {
-    if (!isset($this->user)) {
-      $this->user = $user;
-    }
-  }
-
-  /**
-   * Returns a user object.
-   *
-   * @return \Drupal\user\UserInterface
-   *   The user object.
-   */
-  public function getUser() {
-    return $this->user;
-  }
-
-  /**
-   * Tells the status of user authentication.
-   *
-   * @return bool
-   *   TRUE if user is authenticated. Otherwise, FALSE;
-   */
-  public function isUserAuthenticated() {
-    return $this->user ? $this->user->isAuthenticated() : FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function summarize() {
-    $summary = [];
-    if ($this->getSender()) {
-      $summary['sender'] = $this->getSender();
-    }
-    if ($this->getUser()) {
-      $summary['user'] = $this->getUser()->getDisplayName();
-    }
-
-    return $summary;
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function label() {
diff --git a/src/MailhandlerAnalyzerResult.php b/src/MailhandlerAnalyzerResultBase.php
similarity index 55%
copy from src/MailhandlerAnalyzerResult.php
copy to src/MailhandlerAnalyzerResultBase.php
index d64a4da..6b23706 100644
--- a/src/MailhandlerAnalyzerResult.php
+++ b/src/MailhandlerAnalyzerResultBase.php
@@ -3,26 +3,13 @@
 namespace Drupal\mailhandler_d8;
 
 use Drupal\inmail\AnalyzerResultInterface;
-use Drupal\user\UserInterface;
 
 /**
- * Contains Mailhandler analyzer results.
- *
- * The setter methods only have effect the first time they are called, so values
- * are only writable once.
+ * Represents a base for MailhandlerResult objects.
  *
  * @ingroup analyzer
  */
-class MailhandlerAnalyzerResult implements AnalyzerResultInterface {
-
-  /**
-   * Identifies this class in relation to other analyzer results.
-   *
-   * Use this as the $topic argument for ProcessorResultInterface methods.
-   *
-   * @see \Drupal\inmail\ProcessorResultInterface
-   */
-  const TOPIC = 'mailhandler';
+abstract class MailhandlerAnalyzerResultBase implements AnalyzerResultInterface, MailhandlerAnalyzerResultInterface {
 
   /**
    * The sender.
@@ -39,6 +26,13 @@ class MailhandlerAnalyzerResult implements AnalyzerResultInterface {
   protected $user;
 
   /**
+   * The analyzed body of the message.
+   *
+   * @var string
+   */
+  protected $body;
+
+  /**
    * Returns a function closure that in turn returns a new class instance.
    *
    * @return callable
@@ -52,10 +46,7 @@ class MailhandlerAnalyzerResult implements AnalyzerResultInterface {
   }
 
   /**
-   * Sets the sender mail address.
-   *
-   * @param string $sender
-   *   The address of the sender.
+   * {@inheritdoc}
    */
   public function setSender($sender) {
     if (!isset($this->sender)) {
@@ -64,42 +55,30 @@ class MailhandlerAnalyzerResult implements AnalyzerResultInterface {
   }
 
   /**
-   * Returns the sender of the message.
-   *
-   * @return string|null
-   *   The address of the sender, or NULL if it is found.
+   * {@inheritdoc}
    */
   public function getSender() {
     return $this->sender;
   }
 
   /**
-   * Sets a user.
-   *
-   * @param \Drupal\user\UserInterface $user
-   *   The user.
+   * {@inheritdoc}
    */
-  public function setUser(UserInterface $user) {
+  public function setUser($user) {
     if (!isset($this->user)) {
       $this->user = $user;
     }
   }
 
   /**
-   * Returns a user object.
-   *
-   * @return \Drupal\user\UserInterface
-   *   The user object.
+   * {@inheritdoc}
    */
   public function getUser() {
     return $this->user;
   }
 
   /**
-   * Tells the status of user authentication.
-   *
-   * @return bool
-   *   TRUE if user is authenticated. Otherwise, FALSE;
+   * {@inheritdoc}
    */
   public function isUserAuthenticated() {
     return $this->user ? $this->user->isAuthenticated() : FALSE;
@@ -123,8 +102,15 @@ class MailhandlerAnalyzerResult implements AnalyzerResultInterface {
   /**
    * {@inheritdoc}
    */
-  public function label() {
-    return t('Mailhandler');
+  public function getBody() {
+    return $this->body;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBody($body) {
+    $this->body = $body;
   }
 
 }
diff --git a/src/MailhandlerAnalyzerResultInterface.php b/src/MailhandlerAnalyzerResultInterface.php
new file mode 100644
index 0000000..0f756c3
--- /dev/null
+++ b/src/MailhandlerAnalyzerResultInterface.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Drupal\mailhandler_d8;
+
+/**
+ * An analyzer result collects analysis reports within a certain topic.
+ *
+ * Every inheriting class should provide setters and getters for properties
+ * within the topic that it covers.
+ *
+ * @ingroup analyzer
+ */
+interface MailhandlerAnalyzerResultInterface {
+
+  /**
+   * Sets the sender mail address.
+   *
+   * @param string $sender
+   *   The address of the sender.
+   */
+  public function setSender($sender);
+
+  /**
+   * Returns the sender of the message.
+   *
+   * @return string|null
+   *   The address of the sender, or NULL if it is found.
+   */
+  public function getSender();
+
+  /**
+   * Sets a user.
+   *
+   * @param \Drupal\user\UserInterface|null $user
+   *   The user.
+   */
+  public function setUser($user);
+
+  /**
+   * Returns a user object.
+   *
+   * @return \Drupal\user\UserInterface
+   *   The user object.
+   */
+  public function getUser();
+
+  /**
+   * Tells the status of user authentication.
+   *
+   * @return bool
+   *   TRUE if user is authenticated. Otherwise, FALSE;
+   */
+  public function isUserAuthenticated();
+
+  /**
+   * Returns the analyzed body of the message.
+   *
+   * @return string
+   *   The analyzed body of the message.
+   */
+  public function getBody();
+
+  /**
+   * Sets the analyzed message body.
+   *
+   * @param string $body
+   *   The analyzed message body.
+   */
+  public function setBody($body);
+
+}
diff --git a/src/MailhandlerAnalyzerResultSigned.php b/src/MailhandlerAnalyzerResultSigned.php
new file mode 100644
index 0000000..2b7f7bd
--- /dev/null
+++ b/src/MailhandlerAnalyzerResultSigned.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace Drupal\mailhandler_d8;
+
+/**
+ * Contains Mailhandler analyzer results for signed messages.
+ *
+ * @ingroup analyzer
+ */
+class MailhandlerAnalyzerResultSigned extends MailhandlerAnalyzerResultBase {
+
+  /**
+   * Identifies this class in relation to other analyzer results.
+   *
+   * Use this as the $topic argument for ProcessorResultInterface methods.
+   *
+   * @see \Drupal\inmail\ProcessorResultInterface
+   */
+  const TOPIC = 'mailhandler_signed';
+
+  /**
+   * The PGP signature.
+   *
+   * In case the PGP type is "inline", the signature is FALSE.
+   *
+   * @var string|bool
+   */
+  protected $signature;
+
+  /**
+   * The signed text.
+   *
+   * @var string
+   */
+  protected $signedText;
+
+  /**
+   * The PGP type.
+   *
+   * Represents the type of the message. Could be "inline" (message text is
+   * signed and embedded as a plain text into message body)
+   * or "mime" (message is sent as PGP/MIME type).
+   *
+   * @var string
+   */
+  protected $pgpType;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function label() {
+    return t('Signed analyzer result');
+  }
+
+  /**
+   * Returns the PGP signature.
+   *
+   * @return string|bool
+   *   The PGP signature or FALSE if PGP type is "inline".
+   */
+  public function getSignature() {
+    return $this->signature;
+  }
+
+  /**
+   * Sets the PGP signature.
+   *
+   * @param string $signature
+   *   The PGP signature.
+   */
+  public function setSignature($signature) {
+    $this->signature = $signature;
+  }
+
+  /**
+   * Returns the signed text.
+   *
+   * @return string
+   *   The signed text.
+   */
+  public function getSignedText() {
+    return $this->signedText;
+  }
+
+  /**
+   * Sets the signed text.
+   *
+   * @param string $signed_text
+   *   The signed text.
+   */
+  public function setSignedText($signed_text) {
+    $this->signedText = $signed_text;
+  }
+
+  /**
+   * Returns the PGP type.
+   *
+   * @return string
+   *   The PGP type.
+   */
+  public function getPgpType() {
+    return $this->pgpType;
+  }
+
+  /**
+   * Sets the PGP type.
+   *
+   * @param string $pgp_type
+   *   The PGP type.
+   */
+  public function setPgpType($pgp_type) {
+    $this->pgpType = $pgp_type;
+  }
+
+}
