  		}
  	}
 diff --git a/MimeKit/Cryptography/ApplicationPgpSignature.cs b/MimeKit/Cryptography/ApplicationPgpSignature.cs
-index ea81d0f..5a00f39 100644
+index 85b0f85c..4e8a6a62 100644
 --- a/MimeKit/Cryptography/ApplicationPgpSignature.cs
 +++ b/MimeKit/Cryptography/ApplicationPgpSignature.cs
-@@ -78,6 +78,12 @@ namespace MimeKit.Cryptography {
- 			ContentObject = new ContentObject (stream);
+@@ -80,6 +80,11 @@ namespace MimeKit.Cryptography {
+ 			FileName = "signature.asc";
  		}
  
 +		void CheckDisposed ()
 +		{
-+			if (IsDisposed)
-+				throw new ObjectDisposedException ("ApplicationPgpSignature");
++			CheckDisposed (nameof (ApplicationPgpSignature));
 +		}
 +
  		/// <summary>
  		/// Dispatches to the specific visit method for this MIME entity.
  		/// </summary>
-@@ -93,11 +99,16 @@ namespace MimeKit.Cryptography {
+@@ -95,11 +100,16 @@ namespace MimeKit.Cryptography {
  		/// <exception cref="System.ArgumentNullException">
  		/// <paramref name="visitor"/> is <c>null</c>.
  		/// </exception>
 +		/// <exception cref="System.ObjectDisposedException">
-+		/// The object has been disposed.
++		/// The <see cref="ApplicationPgpSignature"/> has been disposed.
 +		/// </exception>
  		public override void Accept (MimeVisitor visitor)
  		{
  			if (visitor == null)
- 				throw new ArgumentNullException ("visitor");
+ 				throw new ArgumentNullException (nameof (visitor));
  
 +			CheckDisposed ();
 +

+		/// <c>false</c> to release only the unmanaged resources.</param>
+		protected override void Dispose (bool disposing)
+		{
+			if (disposing && !IsDisposed) {
+				for (int i = 0; i < children.Count; i++)
+					children[i].Dispose ();
+			}

+							} catch {
+								alternative.Dispose ();
+								related.Dispose ();
+							}
 
 							if (resource.ContentLink != null)
 								part.ContentLocation = resource.ContentLink;
@@ -3224,8 +3283,14 @@ namespace MimeKit {
 				if (body != null)
 					mixed.Add (body);
 
