@@ -30,7 +30,7 @@
 
 namespace IronPython.Runtime {
     [PythonType("buffer"), DontMapGetMemberNamesToDir]
-    public sealed class PythonBuffer : ICodeFormattable, IDynamicMetaObjectProvider {
+    public sealed class PythonBuffer : ICodeFormattable, IDynamicMetaObjectProvider, IList<byte> {
         internal object _object;
         private int _offset;
         private int _size;
@@ -288,6 +288,112 @@ public BufferMeta(Expression expr, BindingRestrictions restrictions, object valu
         }
 
         #endregion
+
+		#region IList[System.Byte] implementation
+		byte[] _objectByteCache = null;
+		byte[] byteCache {
+			get {
+				return _objectByteCache ?? (_objectByteCache = PythonOps.ConvertBufferToByteArray(this));
+			}
+		}
+		
+		[PythonHidden]
+		int IList<byte>.IndexOf (byte item)
+		{
+			for(int i = 0; i < byteCache.Length; ++i) {
+				if(byteCache[i] == item)
+					return i;
+			}
+			
+			return -1;
+		}
+		
+		[PythonHidden]
+		void IList<byte>.Insert (int index, byte item)
+		{
+			throw ReadOnlyError();
+		}
+		
+		[PythonHidden]
+		void IList<byte>.RemoveAt (int index)
+		{
+			throw ReadOnlyError();
+		}
+		
+		byte IList<byte>.this[int index] {
+			[PythonHidden]
+			get {
+				return byteCache[index];
+			}
+			
+			[PythonHidden]
+			set {
+				throw ReadOnlyError();
+			}
+		}
+		#endregion
+
+		#region IEnumerable implementation
+		[PythonHidden]
+		System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
+		{
+			return byteCache.GetEnumerator();
+		}
+		#endregion
+
+		#region IEnumerable[System.Byte] implementation
+		[PythonHidden]
+		IEnumerator<byte> IEnumerable<byte>.GetEnumerator ()
+		{
+			return ((IEnumerable<byte>)byteCache).GetEnumerator();
+		}
+		#endregion
+
+		#region ICollection[System.Byte] implementation
+		[PythonHidden]
+		void ICollection<byte>.Add (byte item)
+		{
+			throw ReadOnlyError();
+		}
+		
+		[PythonHidden]
+		void ICollection<byte>.Clear ()
+		{
+			throw ReadOnlyError();
+		}
+		
+		[PythonHidden]
+		bool ICollection<byte>.Contains (byte item)
+		{
+			return ((IList<byte>)this).IndexOf(item) != -1;
+		}
+		
+		[PythonHidden]
+		void ICollection<byte>.CopyTo (byte[] array, int arrayIndex)
+		{
+			byteCache.CopyTo(array, arrayIndex);
+		}
+		
+		[PythonHidden]
+		bool ICollection<byte>.Remove (byte item)
+		{
+			throw ReadOnlyError();
+		}
+		
+		int ICollection<byte>.Count {
+			[PythonHidden]
+			get {
+				return byteCache.Length;
+			}
+		}
+		
+		bool ICollection<byte>.IsReadOnly {
+			[PythonHidden]
+			get {
+				return true;
+			}
+		}
+		#endregion
     }
 
     /// <summary>
