diff --git a/poppler/CertificateInfo.cc b/poppler/CertificateInfo.cc
index dc78631..e10bfdd 100644
--- a/poppler/CertificateInfo.cc
+++ b/poppler/CertificateInfo.cc
@@ -5,6 +5,8 @@
 // This file is licensed under the GPLv2 or later
 //
 // Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@gmail.com>
+// Copyright 2018 Albert Astals Cid <aacid@kde.org>
+// Copyright 2018 Oliver Sander <oliver.sander@tu-dresden.de>
 //
 //========================================================================
 
@@ -13,27 +15,94 @@
 #include <string.h>
 #include <stdlib.h>
 
-X509CertificateInfo::X509CertificateInfo()
+X509CertificateInfo::PublicKeyInfo::PublicKeyInfo() :
+  publicKey(nullptr),
+  publicKeyType(OTHERKEY),
+  publicKeyStrength(0)
 {
-  memset(&issuer_info, 0, sizeof issuer_info);
-  memset(&subject_info, 0, sizeof subject_info);
-  cert_serial = nullptr;
-  cert_der = nullptr;
-  ku_extensions = KU_NONE;
-  cert_version = -1;
-  is_self_signed = false;
+}
+
+X509CertificateInfo::PublicKeyInfo::~PublicKeyInfo()
+{
+  delete publicKey;
+}
+
+X509CertificateInfo::PublicKeyInfo::PublicKeyInfo(X509CertificateInfo::PublicKeyInfo &&other)
+{
+  publicKey = other.publicKey;
+  publicKeyType = other.publicKeyType;
+  publicKeyStrength = other.publicKeyStrength;
+  other.publicKey = nullptr;
+}
+
+X509CertificateInfo::PublicKeyInfo &X509CertificateInfo::PublicKeyInfo::operator=(X509CertificateInfo::PublicKeyInfo &&other)
+{
+  delete publicKey;
+  publicKey = other.publicKey;
+  publicKeyType = other.publicKeyType;
+  publicKeyStrength = other.publicKeyStrength;
+  other.publicKey = nullptr;
+  return *this;
+}
+
+X509CertificateInfo::EntityInfo::EntityInfo() :
+  commonName(nullptr),
+  distinguishedName(nullptr),
+  email(nullptr),
+  organization(nullptr)
+{
+}
+
+X509CertificateInfo::EntityInfo::~EntityInfo()
+{
+  free(commonName);
+  free(distinguishedName);
+  free(email);
+  free(organization);
+}
+
+X509CertificateInfo::EntityInfo::EntityInfo(X509CertificateInfo::EntityInfo &&other)
+{
+  commonName = other.commonName;
+  distinguishedName = other.distinguishedName;
+  email = other.email;
+  organization = other.organization;
+  other.commonName = nullptr;
+  other.distinguishedName = nullptr;
+  other.email = nullptr;
+  other.organization = nullptr;
+}
+
+X509CertificateInfo::EntityInfo &X509CertificateInfo::EntityInfo::operator=(X509CertificateInfo::EntityInfo &&other)
+{
+  free(commonName);
+  free(distinguishedName);
+  free(email);
+  free(organization);
+  commonName = other.commonName;
+  distinguishedName = other.distinguishedName;
+  email = other.email;
+  organization = other.organization;
+  other.commonName = nullptr;
+  other.distinguishedName = nullptr;
+  other.email = nullptr;
+  other.organization = nullptr;
+  return *this;
+}
+
+X509CertificateInfo::X509CertificateInfo() :
+  cert_serial(nullptr),
+  cert_der(nullptr),
+  ku_extensions(KU_NONE),
+  cert_version(-1),
+  is_self_signed(false)
+{
 }
 
 X509CertificateInfo::~X509CertificateInfo()
 {
-  free(issuer_info.commonName);
-  free(issuer_info.distinguishedName);
-  free(issuer_info.email);
-  free(issuer_info.organization);
-  free(subject_info.commonName);
-  free(subject_info.distinguishedName);
-  free(subject_info.email);
-  free(subject_info.organization);
+  delete cert_serial;
+  delete cert_der;
 }
 
 int X509CertificateInfo::getVersion() const
@@ -41,27 +110,27 @@
   return cert_version;
 }
 
-GooString *X509CertificateInfo::getSerialNumber() const
+const GooString &X509CertificateInfo::getSerialNumber() const
 {
-  return cert_serial;
+  return *cert_serial;
 }
 
-X509CertificateInfo::EntityInfo X509CertificateInfo::getIssuerInfo() const
+const X509CertificateInfo::EntityInfo &X509CertificateInfo::getIssuerInfo() const
 {
   return issuer_info;
 }
 
-X509CertificateInfo::Validity X509CertificateInfo::getValidity() const
+const X509CertificateInfo::Validity &X509CertificateInfo::getValidity() const
 {
   return cert_validity;
 }
 
-X509CertificateInfo::EntityInfo X509CertificateInfo::getSubjectInfo() const
+const X509CertificateInfo::EntityInfo &X509CertificateInfo::getSubjectInfo() const
 {
   return subject_info;
 }
 
-X509CertificateInfo::PublicKeyInfo X509CertificateInfo::getPublicKeyInfo() const
+const X509CertificateInfo::PublicKeyInfo &X509CertificateInfo::getPublicKeyInfo() const
 {
   return public_key_info;
 }
@@ -71,9 +140,9 @@
   return ku_extensions;
 }
 
-GooString *X509CertificateInfo::getCertificateDER() const
+const GooString &X509CertificateInfo::getCertificateDER() const
 {
-  return cert_der;
+  return *cert_der;
 }
 
 bool X509CertificateInfo::getIsSelfSigned() const
@@ -88,12 +157,13 @@
 
 void X509CertificateInfo::setSerialNumber(GooString *serialNumber)
 {
+  delete cert_serial;
   cert_serial = serialNumber;
 }
 
-void X509CertificateInfo::setIssuerInfo(EntityInfo issuerInfo)
+void X509CertificateInfo::setIssuerInfo(EntityInfo &&issuerInfo)
 {
-  issuer_info = issuerInfo;
+  issuer_info = std::move(issuerInfo);
 }
 
 void X509CertificateInfo::setValidity(Validity validity)
@@ -101,14 +171,14 @@
   cert_validity = validity;
 }
 
-void X509CertificateInfo::setSubjectInfo(EntityInfo subjectInfo)
+void X509CertificateInfo::setSubjectInfo(EntityInfo &&subjectInfo)
 {
-  subject_info = subjectInfo;
+  subject_info = std::move(subjectInfo);
 }
 
-void X509CertificateInfo::setPublicKeyInfo(PublicKeyInfo pkInfo)
+void X509CertificateInfo::setPublicKeyInfo(PublicKeyInfo &&pkInfo)
 {
-  public_key_info = pkInfo;
+  public_key_info = std::move(pkInfo);
 }
 
 void X509CertificateInfo::setKeyUsageExtensions(unsigned int keyUsages)
@@ -118,6 +188,7 @@
 
 void X509CertificateInfo::setCertificateDER(GooString *certDer)
 {
+  delete cert_der;
   cert_der = certDer;
 }
 
diff --git a/poppler/CertificateInfo.h b/poppler/CertificateInfo.h
index b01fcf5..2fed918 100644
--- a/poppler/CertificateInfo.h
+++ b/poppler/CertificateInfo.h
@@ -6,6 +6,7 @@
 //
 // Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@gmail.com>
 // Copyright 2018 Albert Astals Cid <aacid@kde.org>
+// Copyright 2018 Oliver Sander <oliver.sander@tu-dresden.de>
 //
 //========================================================================
 
@@ -42,12 +43,30 @@
   ~X509CertificateInfo();
 
   struct PublicKeyInfo {
+    PublicKeyInfo();
+    ~PublicKeyInfo();
+
+    PublicKeyInfo(PublicKeyInfo &&);
+    PublicKeyInfo &operator=(PublicKeyInfo &&);
+
+    PublicKeyInfo(const PublicKeyInfo &) = delete;
+    PublicKeyInfo &operator=(const PublicKeyInfo &) = delete;
+
     GooString *publicKey;
     PublicKeyType publicKeyType;
     unsigned int publicKeyStrength; // in bits
   };
 
   struct EntityInfo {
+    EntityInfo();
+    ~EntityInfo();
+
+    EntityInfo(EntityInfo &&);
+    EntityInfo &operator=(EntityInfo &&);
+
+    EntityInfo(const EntityInfo &) = delete;
+    EntityInfo &operator=(const EntityInfo &) = delete;
+
     char *commonName;
     char *distinguishedName;
     char *email;
@@ -55,28 +74,30 @@
   };
 
    struct Validity {
+    Validity() : notBefore(0), notAfter(0) {}
+
     time_t notBefore;
     time_t notAfter;
   };
 
   /* GETTERS */
   int getVersion() const;
-  GooString *getSerialNumber() const;
-  EntityInfo getIssuerInfo() const;
-  Validity getValidity() const;
-  EntityInfo getSubjectInfo() const;
-  PublicKeyInfo getPublicKeyInfo() const;
+  const GooString &getSerialNumber() const;
+  const EntityInfo &getIssuerInfo() const;
+  const Validity &getValidity() const;
+  const EntityInfo &getSubjectInfo() const;
+  const PublicKeyInfo &getPublicKeyInfo() const;
   unsigned int getKeyUsageExtensions() const;
-  GooString *getCertificateDER() const;
+  const GooString &getCertificateDER() const;
   bool getIsSelfSigned() const;
 
   /* SETTERS */
   void setVersion(int);
   void setSerialNumber(GooString *);
-  void setIssuerInfo(EntityInfo);
+  void setIssuerInfo(EntityInfo &&);
   void setValidity(Validity);
-  void setSubjectInfo(EntityInfo);
-  void setPublicKeyInfo(PublicKeyInfo);
+  void setSubjectInfo(EntityInfo &&);
+  void setPublicKeyInfo(PublicKeyInfo &&);
   void setKeyUsageExtensions(unsigned int);
   void setCertificateDER(GooString *);
   void setIsSelfSigned(bool);
diff --git a/poppler/Form.cc b/poppler/Form.cc
index 51caa4d..77a5207 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -1271,7 +1271,7 @@
         GooString* tok = new GooString(da, i, j - i);
         if (searchTok && !tok->cmp(searchTok))
           idx = daToks->getLength();
-	daToks->push_back(tok);
+        daToks->push_back(tok);
         i = j;
       }
     }
diff --git a/poppler/SignatureHandler.cc b/poppler/SignatureHandler.cc
index 87ca859..9c739d0 100644
--- a/poppler/SignatureHandler.cc
+++ b/poppler/SignatureHandler.cc
@@ -11,6 +11,7 @@
 // Copyright 2017 Sebastian Rasmussen <sebras@gmail.com>
 // Copyright 2017 Hans-Ulrich Jüttner <huj@froreich-bioscientia.de>
 // Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@protonmail.com>
+// Copyright 2018 Oliver Sander <oliver.sander@tu-dresden.de>
 //
 //========================================================================
 
@@ -81,39 +82,47 @@
   return static_cast<time_t>(sTime/1000000);
 }
 
-void SignatureHandler::getEntityInfo(X509CertificateInfo::EntityInfo *info, CERTName *entityName)
+X509CertificateInfo::EntityInfo SignatureHandler::getEntityInfo(CERTName *entityName) const
 {
-  if (!info || !entityName)
-    return;
+  X509CertificateInfo::EntityInfo info;
 
-  memset(info, 0, sizeof *info);
+  if (!entityName)
+    return info;
 
   char *dn = CERT_NameToAscii(entityName);
   if (dn) {
-      info->distinguishedName = copyString(dn);
+      info.distinguishedName = copyString(dn);
       PORT_Free(dn);
   }
 
   char *cn = CERT_GetCommonName(entityName);
   if (cn) {
-    info->commonName = copyString(cn);
+    info.commonName = copyString(cn);
     PORT_Free(cn);
   }
 
   char *email = CERT_GetCertEmailAddress(entityName);
   if (email) {
-    info->email = copyString(email);
+    info.email = copyString(email);
     PORT_Free(email);
   }
 
   char *org = CERT_GetOrgName(entityName);
   if (org) {
-    info->organization = copyString(org);
+    info.organization = copyString(org);
     PORT_Free(org);
   }
+
+  return info;
 }
 
-X509CertificateInfo *SignatureHandler::getCertificateInfo()
+static GooString *SECItemToGooString(const SECItem &secItem)
+{
+  // TODO do we need to handle secItem.type;
+  return new GooString((const char *)secItem.data, secItem.len);
+}
+
+X509CertificateInfo *SignatureHandler::getCertificateInfo() const
 {
   if (!CMSSignerInfo)
     return nullptr;
@@ -123,16 +132,12 @@
     return nullptr;
 
   X509CertificateInfo *certInfo = new X509CertificateInfo;
-  if (!certInfo)
-    return nullptr;
 
   certInfo->setVersion(DER_GetInteger(&cert->version) + 1);
   certInfo->setSerialNumber(SECItemToGooString(cert->serialNumber));
 
   //issuer info
-  X509CertificateInfo::EntityInfo issuerInfo;
-  getEntityInfo(&issuerInfo, &cert->issuer);
-  certInfo->setIssuerInfo(issuerInfo);
+  certInfo->setIssuerInfo(getEntityInfo(&cert->issuer));
 
   //validity
   PRTime notBefore, notAfter;
@@ -143,9 +148,7 @@
   certInfo->setValidity(certValidity);
 
   //subject info
-  X509CertificateInfo::EntityInfo subjectInfo;
-  getEntityInfo(&subjectInfo, &cert->subject);
-  certInfo->setSubjectInfo(subjectInfo);
+  certInfo->setSubjectInfo(getEntityInfo(&cert->subject));
 
   //public key info
   X509CertificateInfo::PublicKeyInfo pkInfo;
@@ -170,7 +173,7 @@
       break;
   }
   pkInfo.publicKeyStrength = SECKEY_PublicKeyStrengthInBits(pk);
-  certInfo->setPublicKeyInfo(pkInfo);
+  certInfo->setPublicKeyInfo(std::move(pkInfo));
 
   certInfo->setKeyUsageExtensions(cert->keyUsage);
   certInfo->setCertificateDER(SECItemToGooString(cert->derCert));
@@ -473,8 +476,3 @@
       return CERTIFICATE_GENERIC_ERROR;
   }
 }
-
-GooString *SignatureHandler::SECItemToGooString(SECItem secItem)
-{
-  return new GooString((const char *)secItem.data, secItem.len);
-}
diff --git a/poppler/SignatureHandler.h b/poppler/SignatureHandler.h
index 5c47d24..8302a28 100644
--- a/poppler/SignatureHandler.h
+++ b/poppler/SignatureHandler.h
@@ -8,6 +8,8 @@
 // Copyright 2015 André Esser <bepandre@hotmail.com>
 // Copyright 2015, 2017 Albert Astals Cid <aacid@kde.org>
 // Copyright 2017 Hans-Ulrich Jüttner <huj@froreich-bioscientia.de>
+// Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@protonmail.com>
+// Copyright 2018 Oliver Sander <oliver.sander@tu-dresden.de>
 //
 //========================================================================
 
@@ -45,14 +47,12 @@
   NSSCMSVerificationStatus validateSignature();
   // Use -1 as validation_time for now
   SECErrorCodes validateCertificate(time_t validation_time);
-  X509CertificateInfo *getCertificateInfo();
+  X509CertificateInfo *getCertificateInfo() const;
 
   //Translate NSS error codes
   static SignatureValidationStatus NSS_SigTranslate(NSSCMSVerificationStatus nss_code);
   static CertificateValidationStatus NSS_CertTranslate(SECErrorCodes nss_code);
 
-  static GooString *SECItemToGooString(SECItem secItem);
-
 private:
   SignatureHandler(const SignatureHandler &);
   SignatureHandler& operator=(const SignatureHandler &);
@@ -65,7 +65,7 @@
   NSSCMSSignedData *CMS_SignedDataCreate(NSSCMSMessage * cms_msg);
   NSSCMSSignerInfo *CMS_SignerInfoCreate(NSSCMSSignedData * cms_sig_data);
   HASHContext * initHashContext();
-  void getEntityInfo(X509CertificateInfo::EntityInfo *info, CERTName *entityName);
+  X509CertificateInfo::EntityInfo getEntityInfo(CERTName *entityName) const;
 
   unsigned int hash_length;
   SECItem CMSitem;
diff --git a/poppler/SignatureInfo.cc b/poppler/SignatureInfo.cc
index 3be9160..7352285 100644
--- a/poppler/SignatureInfo.cc
+++ b/poppler/SignatureInfo.cc
@@ -9,6 +9,7 @@
 // Copyright 2017 Hans-Ulrich Jüttner <huj@froreich-bioscientia.de>
 // Copyright 2017, 2018 Albert Astals Cid <aacid@kde.org>
 // Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@protonmail.com>
+// Copyright 2018 Oliver Sander <oliver.sander@tu-dresden.de>
 //
 //========================================================================
 
@@ -107,7 +108,7 @@
   return signing_time;
 }
 
-X509CertificateInfo *SignatureInfo::getCertificateInfo()
+const X509CertificateInfo *SignatureInfo::getCertificateInfo() const
 {
   return cert_info;
 }
@@ -160,5 +161,6 @@
 
 void SignatureInfo::setCertificateInfo(X509CertificateInfo *certInfo)
 {
+  delete cert_info;
   cert_info = certInfo;
 }
diff --git a/poppler/SignatureInfo.h b/poppler/SignatureInfo.h
index de79062..f270899 100644
--- a/poppler/SignatureInfo.h
+++ b/poppler/SignatureInfo.h
@@ -9,6 +9,7 @@
 // Copyright 2015, 2017, 2018 Albert Astals Cid <aacid@kde.org>
 // Copyright 2017 Hans-Ulrich Jüttner <huj@froreich-bioscientia.de>
 // Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@protonmail.com>
+// Copyright 2018 Oliver Sander <oliver.sander@tu-dresden.de>
 //
 //========================================================================
 
@@ -57,7 +58,7 @@
   int getHashAlgorithm(); // Returns a NSS3 HASH_HashType or -1 if compiled without NSS3
   time_t getSigningTime();
   bool isSubfilterSupported() { return sig_subfilter_supported; }
-  X509CertificateInfo *getCertificateInfo();
+  const X509CertificateInfo *getCertificateInfo() const;
 
   /* SETTERS */
   void setSignatureValStatus(enum SignatureValidationStatus );
diff --git a/qt5/src/poppler-form.cc b/qt5/src/poppler-form.cc
index 3794c9f..b5d1bb2 100644
--- a/qt5/src/poppler-form.cc
+++ b/qt5/src/poppler-form.cc
@@ -8,6 +8,7 @@
  * Copyright (C) 2018, Andre Heinecke <aheinecke@intevation.de>
  * Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by the LiMux project of the city of Munich
  * Copyright (C) 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@protonmail.com>
+ * Copyright (C) 2018 Oliver Sander <oliver.sander@tu-dresden.de>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -522,13 +523,20 @@
   bool is_null;
 };
 
+CertificateInfo::CertificateInfo()
+  : d_ptr( nullptr )
+{
+}
+
 CertificateInfo::CertificateInfo(CertificateInfoPrivate* priv)
-  : d_ptr(priv)
-{}
+  : d_ptr( priv )
+{
+}
 
 CertificateInfo::CertificateInfo(const CertificateInfo &other)
-  : d_ptr( other.d_ptr )
-{}
+ : d_ptr( other.d_ptr )
+{
+}
 
 CertificateInfo::~CertificateInfo() = default;
 
@@ -675,7 +683,7 @@
 public:
 	SignatureValidationInfo::SignatureStatus signature_status;
 	SignatureValidationInfo::CertificateStatus certificate_status;
-	QSharedPointer<CertificateInfo> cert_info;
+	CertificateInfo cert_info;
 
 	QByteArray signature;
 	QString signer_name;
@@ -807,7 +815,7 @@
 CertificateInfo SignatureValidationInfo::certificateInfo() const
 {
   Q_D(const SignatureValidationInfo);
-  return *(d->cert_info.data());
+  return d->cert_info;
 }
 
 SignatureValidationInfo &SignatureValidationInfo::operator=(const SignatureValidationInfo &other)
@@ -933,7 +941,7 @@
   delete checkedSignature;
 
   // set certificate info
-  X509CertificateInfo* ci = si->getCertificateInfo();
+  const X509CertificateInfo *ci = si->getCertificateInfo();
   CertificateInfoPrivate* certPriv = new CertificateInfoPrivate;
   certPriv->is_null = true;
   if (ci)
@@ -941,16 +949,16 @@
     certPriv->version = ci->getVersion();
     certPriv->ku_extensions = ci->getKeyUsageExtensions();
 
-    GooString *certSerial = ci->getSerialNumber();
-    certPriv->serial_number = QByteArray(certSerial->c_str(), certSerial->getLength());
+    const GooString &certSerial = ci->getSerialNumber();
+    certPriv->serial_number = QByteArray(certSerial.c_str(), certSerial.getLength());
 
-    X509CertificateInfo::EntityInfo issuerInfo = ci->getIssuerInfo();
+    const X509CertificateInfo::EntityInfo &issuerInfo = ci->getIssuerInfo();
     certPriv->issuer_info.common_name = issuerInfo.commonName;
     certPriv->issuer_info.distinguished_name = issuerInfo.distinguishedName;
     certPriv->issuer_info.email_address = issuerInfo.email;
     certPriv->issuer_info.org_name = issuerInfo.organization;
 
-    X509CertificateInfo::EntityInfo subjectInfo = ci->getSubjectInfo();
+    const X509CertificateInfo::EntityInfo &subjectInfo = ci->getSubjectInfo();
     certPriv->subject_info.common_name = subjectInfo.commonName;
     certPriv->subject_info.distinguished_name = subjectInfo.distinguishedName;
     certPriv->subject_info.email_address = subjectInfo.email;
@@ -960,17 +968,17 @@
     certPriv->validity_start = QDateTime::fromTime_t(certValidity.notBefore, Qt::UTC);
     certPriv->validity_end = QDateTime::fromTime_t(certValidity.notAfter, Qt::UTC);
 
-    X509CertificateInfo::PublicKeyInfo pkInfo = ci->getPublicKeyInfo();
+    const X509CertificateInfo::PublicKeyInfo &pkInfo = ci->getPublicKeyInfo();
     certPriv->public_key = QByteArray(pkInfo.publicKey->c_str(), pkInfo.publicKey->getLength());
     certPriv->public_key_type = static_cast<int>(pkInfo.publicKeyType);
     certPriv->public_key_strength = pkInfo.publicKeyStrength;
 
-    GooString *certDer = ci->getCertificateDER();
-    certPriv->certificate_der = QByteArray(certDer->c_str(), certDer->getLength());
+    const GooString &certDer = ci->getCertificateDER();
+    certPriv->certificate_der = QByteArray(certDer.c_str(), certDer.getLength());
 
     certPriv->is_null = false;
   }
-  priv->cert_info = QSharedPointer<CertificateInfo>(new CertificateInfo(certPriv));
+  priv->cert_info = CertificateInfo(certPriv);
 
   return SignatureValidationInfo(priv);
 }
diff --git a/qt5/src/poppler-form.h b/qt5/src/poppler-form.h
index b389e5b..2c97383 100644
--- a/qt5/src/poppler-form.h
+++ b/qt5/src/poppler-form.h
@@ -7,6 +7,7 @@
  * Copyright (C) 2017, Tobias C. Berner <tcberner@freebsd.org>
  * Copyright (C) 2018, Andre Heinecke <aheinecke@intevation.de>
  * Copyright (C) 2018, Chinmoy Ranjan Pradhan <chinmoyrp65@protonmail.com>
+ * Copyright (C) 2018, Oliver Sander <oliver.sander@tu-dresden.de>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -451,6 +452,7 @@
           Organization,
         };
 
+        CertificateInfo();
         CertificateInfo(CertificateInfoPrivate *priv);
         ~CertificateInfo();
 
@@ -522,7 +524,7 @@
         CertificateInfo(const CertificateInfo &other);
         CertificateInfo &operator=(const CertificateInfo &other);
 
-        private:
+    private:
         Q_DECLARE_PRIVATE(CertificateInfo)
 
         QSharedPointer<CertificateInfoPrivate> d_ptr;
@@ -643,17 +645,16 @@
 
 	/**
 	  Checks whether the signature authenticates the total document
-          except for the signature itself.
-          \since 0.58
+	  except for the signature itself.
+	  \since 0.58
 	 */
         bool signsTotalDocument() const;
 
-        /**
-          The signer certificate info
-
-          \since 0.73
-         */
-        CertificateInfo certificateInfo() const;
+	/**
+	  The signer certificate info.
+	  \since 0.73
+	*/
+	CertificateInfo certificateInfo() const;
 
 	SignatureValidationInfo(const SignatureValidationInfo &other);
 	SignatureValidationInfo &operator=(const SignatureValidationInfo &other);
