  	}
  }
 diff --git a/MimeKit/MultipartAlternative.cs b/MimeKit/MultipartAlternative.cs
-index 15cc761..15e8f00 100644
+index dfa90a14..cb88409d 100644
 --- a/MimeKit/MultipartAlternative.cs
 +++ b/MimeKit/MultipartAlternative.cs
-@@ -82,6 +82,12 @@ namespace MimeKit {
+@@ -82,6 +82,11 @@ namespace MimeKit {
  		{
  		}
  
 +		void CheckDisposed ()
 +		{
-+			if (IsDisposed)
-+				throw new ObjectDisposedException ("MultipartAlternative");
++			CheckDisposed (nameof (MultipartAlternative));
 +		}
 +
  		/// <summary>
  		/// Get the text of the text/plain alternative.
  		/// </summary>
-@@ -89,6 +95,9 @@ namespace MimeKit {
+@@ -89,6 +94,9 @@ namespace MimeKit {
  		/// Gets the text of the text/plain alternative, if it exists.
  		/// </remarks>
  		/// <value>The text if a text/plain alternative exists; otherwise, <c>null</c>.</value>
 +		/// <exception cref="System.ObjectDisposedException">
-+		/// The object has been disposed.
++		/// The <see cref="MultipartAlternative"/> has been disposed.
 +		/// </exception>
  		public string TextBody {
- 			get { return GetTextBody (TextFormat.Text); }
- 		}
-@@ -100,6 +109,9 @@ namespace MimeKit {
+ 			get { return GetTextBody (TextFormat.Plain); }
+ 		}
+@@ -100,6 +108,9 @@ namespace MimeKit {
  		/// Gets the HTML-formatted text of the text/html alternative, if it exists.
  		/// </remarks>
  		/// <value>The HTML if a text/html alternative exists; otherwise, <c>null</c>.</value>
 +		/// <exception cref="System.ObjectDisposedException">
-+		/// The object has been disposed.
++		/// The <see cref="MultipartAlternative"/> has been disposed.
 +		/// </exception>
  		public string HtmlBody {
  			get { return GetTextBody (TextFormat.Html); }
  		}
-@@ -119,11 +131,16 @@ namespace MimeKit {
+@@ -119,11 +130,16 @@ namespace MimeKit {
  		/// <exception cref="System.ArgumentNullException">
  		/// <paramref name="visitor"/> is <c>null</c>.
  		/// </exception>
 +		/// <exception cref="System.ObjectDisposedException">
-+		/// The object has been disposed.
++		/// The <see cref="MultipartAlternative"/> has been disposed.
 +		/// </exception>
  		public override void Accept (MimeVisitor visitor)
  		{
  			if (visitor == null)
- 				throw new ArgumentNullException ("visitor");
+ 				throw new ArgumentNullException (nameof (visitor));
  
 +			CheckDisposed ();
 +
  			visitor.VisitMultipartAlternative (this);
  		}
  
-@@ -150,8 +167,13 @@ namespace MimeKit {
+@@ -149,8 +165,13 @@ namespace MimeKit {
  		/// </remarks>
  		/// <returns>The text body in the desired format if it exists; otherwise, <c>null</c>.</returns>
  		/// <param name="format">The desired text format.</param>
 +		/// <exception cref="System.ObjectDisposedException">
-+		/// The object has been disposed.
++		/// The <see cref="MultipartAlternative"/> has been disposed.
 +		/// </exception>
  		public string GetTextBody (TextFormat format)
  		{

+using System;
 using System.IO;
 using System.Threading;
 
@@ -34,7 +35,7 @@ namespace MimeKit {
     /// <remarks>
     /// Implemented by <see cref="ContentObject"/>.
     /// </remarks>
-	public interface IContentObject
+	public interface IContentObject : IDisposable
 	{
 		/// <summary>
 		/// Gets the content encoding.
diff --git a/MimeKit/MessageDeliveryStatus.cs b/MimeKit/MessageDeliveryStatus.cs
index d3fbfae..800ec0a 100644
--- a/MimeKit/MessageDeliveryStatus.cs
+++ b/MimeKit/MessageDeliveryStatus.cs
@@ -64,6 +64,12 @@ namespace MimeKit {
 		{
 		}
 
+		void CheckDisposed ()
+		{
+			if (IsDisposed)
+				throw new ObjectDisposedException ("MessageDeliveryStatus");
+		}
+
 		/// <summary>
 		/// Get the groups of delivery status fields.
 		/// </summary>
@@ -127,11 +133,16 @@ namespace MimeKit {
 		/// <exception cref="System.ArgumentNullException">
 		/// <paramref name="visitor"/> is <c>null</c>.
 		/// </exception>
+		/// <exception cref="System.ObjectDisposedException">
+		/// The object has been disposed.
+		/// </exception>
 		public override void Accept (MimeVisitor visitor)
 		{
 			if (visitor == null)
 				throw new ArgumentNullException ("visitor");
 
+			CheckDisposed ();
+

 		}
 	}
diff --git a/MimeKit/MessageDispositionNotification.cs b/MimeKit/MessageDispositionNotification.cs
index 96f63c2b..c53b338a 100644
--- a/MimeKit/MessageDispositionNotification.cs
+++ b/MimeKit/MessageDispositionNotification.cs
@@ -66,6 +66,11 @@ namespace MimeKit {
 		{
 		}
 
+		void CheckDisposed ()
+		{
+			CheckDisposed (nameof (MessageDispositionNotification));
+		}
+
 		/// <summary>
 		/// Get the disposition notification fields.
 		/// </summary>
@@ -73,8 +78,13 @@ namespace MimeKit {
 		/// Gets the disposition notification fields.
 		/// </remarks>
 		/// <value>The fields.</value>
+		/// <exception cref="System.ObjectDisposedException">
+		/// The <see cref="MessageDispositionNotification"/> has been disposed.
+		/// </exception>
 		public HeaderList Fields {
 			get {
+				CheckDisposed ();
+
 				if (fields == null) {
 					if (Content == null) {
 						Content = new MimeContent (new MemoryBlockStream ());
@@ -118,11 +128,16 @@ namespace MimeKit {
 		/// <exception cref="System.ArgumentNullException">
 		/// <paramref name="visitor"/> is <c>null</c>.
 		/// </exception>
+		/// <exception cref="System.ObjectDisposedException">
+		/// The <see cref="MessageDispositionNotification"/> has been disposed.
+		/// </exception>
 		public override void Accept (MimeVisitor visitor)
 		{
 			if (visitor == null)
 				throw new ArgumentNullException (nameof (visitor));
 
+			CheckDisposed ();
+
