diff --git a/src/security/signing-info.cpp b/src/security/signing-info.cpp
index 57cf046..f8a7892 100644
--- a/src/security/signing-info.cpp
+++ b/src/security/signing-info.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -74,37 +74,43 @@
   }
 }
 
-void
+SigningInfo&
 SigningInfo::setSigningIdentity(const Name& identity)
 {
   m_type = SIGNER_TYPE_ID;
   m_name = identity;
+  return *this;
 }
-void
+
+SigningInfo&
 SigningInfo::setSigningKeyName(const Name& keyName)
 {
   m_type = SIGNER_TYPE_KEY;
   m_name = keyName;
+  return *this;
 }
 
-void
+SigningInfo&
 SigningInfo::setSigningCertName(const Name& certificateName)
 {
   m_type = SIGNER_TYPE_CERT;
   m_name = certificateName;
+  return *this;
 }
 
-void
+SigningInfo&
 SigningInfo::setSha256Signing()
 {
   m_type = SIGNER_TYPE_SHA256;
   m_name.clear();
+  return *this;
 }
 
-void
+SigningInfo&
 SigningInfo::setSignatureInfo(const SignatureInfo& signatureInfo)
 {
   m_info = signatureInfo;
+  return *this;
 }
 
 std::ostream&
diff --git a/src/security/signing-info.hpp b/src/security/signing-info.hpp
index aaa2770..375d9e8 100644
--- a/src/security/signing-info.hpp
+++ b/src/security/signing-info.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -93,28 +93,28 @@
    * @brief Set signer as an identity with name @p identity
    * @post Change the signerType to SIGNER_TYPE_ID
    */
-  void
+  SigningInfo&
   setSigningIdentity(const Name& identity);
 
   /**
    * @brief Set signer as a key with name @p keyName
    * @post Change the signerType to SIGNER_TYPE_KEY
    */
-  void
+  SigningInfo&
   setSigningKeyName(const Name& keyName);
 
   /**
    * @brief Set signer as a certificate with name @p certificateName
    * @post Change the signerType to SIGNER_TYPE_CERT
    */
-  void
+  SigningInfo&
   setSigningCertName(const Name& certificateName);
 
   /**
    * @brief Set Sha256 as the signing method
    * @post Reset signerName, also change the signerType to SIGNER_TYPE_SHA256
    */
-  void
+  SigningInfo&
   setSha256Signing();
 
   /**
@@ -138,10 +138,11 @@
   /**
    * @brief Set the digest algorithm for public key operations
    */
-  void
+  SigningInfo&
   setDigestAlgorithm(const DigestAlgorithm& algorithm)
   {
     m_digestAlgorithm = algorithm;
+    return *this;
   }
 
   /**
@@ -156,7 +157,7 @@
   /**
    * @brief Set a semi-prepared SignatureInfo;
    */
-  void
+  SigningInfo&
   setSignatureInfo(const SignatureInfo& signatureInfo);
 
   /**
diff --git a/tests/unit-tests/security/signing-info.t.cpp b/tests/unit-tests/security/signing-info.t.cpp
index e7e1447..6613fea 100644
--- a/tests/unit-tests/security/signing-info.t.cpp
+++ b/tests/unit-tests/security/signing-info.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -152,6 +152,19 @@
                     "id:/localhost/identity/digest-sha256");
 }
 
+BOOST_AUTO_TEST_CASE(Chaining)
+{
+  SigningInfo info = SigningInfo()
+    .setSigningIdentity("/identity")
+    .setSigningKeyName("/key/name")
+    .setSigningCertName("/cert/name")
+    .setSha256Signing()
+    .setDigestAlgorithm(DigestAlgorithm::SHA256)
+    .setSignatureInfo(SignatureInfo());
+
+  BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(info), "id:/localhost/identity/digest-sha256");
+}
+
 BOOST_AUTO_TEST_SUITE_END() // TestSigningInfo
 BOOST_AUTO_TEST_SUITE_END() // Security
 
