Index: Rhino.Etl.Core/Row.cs
===================================================================
--- Rhino.Etl.Core/Row.cs	(revision 1874)
+++ Rhino.Etl.Core/Row.cs	(working copy)
@@ -84,7 +84,7 @@
         /// <param name="other">An object to compare with this object.</param>
         public bool Equals(Row other)
         {
-            if(items.Keys.Cast<object>().SequenceEqual(other.Keys.Cast<object>()) == false)
+            if(Columns.SequenceEqual(other.Columns, StringComparer.InvariantCultureIgnoreCase) == false)
                 return false;
 
             foreach (var key in items.Keys)
Index: Rhino.Etl.Tests/RowTest.cs
===================================================================
--- Rhino.Etl.Tests/RowTest.cs	(revision 1874)
+++ Rhino.Etl.Tests/RowTest.cs	(working copy)
@@ -10,7 +10,6 @@
         [Row(new[] {"a", "b"}, new object[] {1, 2}, new[] {"a", "b"}, new object[] {2, 3})]
         [Row(new[] {"a", "b"}, new object[] {1, 2}, new[] {"x", "y"}, new object[] {1, 2})]
         [Row(new[] {"a"}, new object[] {1}, new[] {"a", "b"}, new object[] {1, 2})]
-        [Row(new[] {"a"}, new object[] {1}, new[] {"a", "b"}, new object[] {1, 2})]
         public void Should_be_different_if_different_columns(string[] firstColumns, object[] firstValues,
                                                              string[] secondColumns, object[] secondValues)
         {
@@ -20,6 +19,30 @@
             Assert.IsFalse(first.Equals(second));
         }
 
+        [Test]
+        public void Should_not_take_casing_into_account()
+        {
+            Row first = new Row();
+            first["A"] = 1;
+
+            Row second = new Row();
+            second["a"] = 1;
+
+            Assert.IsTrue(first.Equals(second));
+        }
+
+        [Test]
+        public void Since_values_are_boxed_they_wont_be_equal_even_if_implicit_conversion_exists()
+        {
+            Row first = new Row();
+            first["a"] = 1;
+
+            Row second = new Row();
+            second["a"] = (byte)1;
+
+            Assert.IsFalse(first.Equals(second));
+        }
+
         private static Row FillRow(string[] columns, object[] values)
         {
             Row row = new Row();
