diff --git a/src/encrypted-content.cpp b/src/encrypted-content.cpp
index f9738bd..20c9886 100644
--- a/src/encrypted-content.cpp
+++ b/src/encrypted-content.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2018, Regents of the University of California
+/*
+ * Copyright (c) 2014-2020, Regents of the University of California
  *
  * NAC library is free software: you can redistribute it and/or modify it under the
  * terms of the GNU Lesser General Public License as published by the Free Software
@@ -137,19 +137,19 @@
 {
   size_t totalLength = 0;
 
-  if (!m_keyLocator.empty()) {
+  if (hasKeyLocator()) {
     totalLength += m_keyLocator.wireEncode(block);
   }
 
-  if (!m_payloadKey.empty()) {
+  if (hasPayloadKey()) {
     totalLength += block.prependBlock(m_payloadKey);
   }
 
-  if (!m_iv.empty()) {
+  if (hasIv()) {
     totalLength += block.prependBlock(m_iv);
   }
 
-  if (!m_payload.empty()) {
+  if (m_payload.isValid()) {
     totalLength += block.prependBlock(m_payload);
   }
   else {
@@ -223,7 +223,7 @@
 bool
 EncryptedContent::operator==(const EncryptedContent& rhs) const
 {
-  return (wireEncode() == rhs.wireEncode());
+  return wireEncode() == rhs.wireEncode();
 }
 
 } // namespace nac
diff --git a/src/encrypted-content.hpp b/src/encrypted-content.hpp
index 90118d4..0f014c7 100644
--- a/src/encrypted-content.hpp
+++ b/src/encrypted-content.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2018, Regents of the University of California
+/*
+ * Copyright (c) 2014-2020, Regents of the University of California
  *
  * NAC library is free software: you can redistribute it and/or modify it under the
  * terms of the GNU Lesser General Public License as published by the Free Software
@@ -70,9 +70,9 @@
   setPayload(ConstBufferPtr payload);
 
   bool
-  hasIv() const
+  hasIv() const noexcept
   {
-    return !m_iv.empty();
+    return m_iv.isValid();
   }
 
   const Block&
@@ -91,9 +91,9 @@
   setIv(ConstBufferPtr iv);
 
   bool
-  hasPayloadKey() const
+  hasPayloadKey() const noexcept
   {
-    return !m_payloadKey.empty();
+    return m_payloadKey.isValid();
   }
 
   const Block&
diff --git a/tests/identity-management-fixture.cpp b/tests/identity-management-fixture.cpp
index 847bb6b..385aade 100644
--- a/tests/identity-management-fixture.cpp
+++ b/tests/identity-management-fixture.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2020, Regents of the University of California
  *
  * NAC library is free software: you can redistribute it and/or modify it under the
@@ -78,7 +78,7 @@
 
   security::AdditionalDescription description;
   description.set("type", "sub-certificate");
-  info.appendTypeSpecificTlv(description.wireEncode());
+  info.addCustomTlv(description.wireEncode());
 
   m_keyChain.sign(request, signingByIdentity(issuer).setSignatureInfo(info));
   m_keyChain.setDefaultCertificate(subIdentity.getDefaultKey(), request);
