diff --git a/lib/netstd/Thrift/Collections/TCollections.cs b/lib/netstd/Thrift/Collections/TCollections.cs
index 147bfc7..b386c37 100644
--- a/lib/netstd/Thrift/Collections/TCollections.cs
+++ b/lib/netstd/Thrift/Collections/TCollections.cs
@@ -16,11 +16,12 @@
 // under the License.
 
 using System.Collections;
+using System.Collections.Generic;
 
 namespace Thrift.Collections
 {
     // ReSharper disable once InconsistentNaming
-    public class TCollections
+    public static class TCollections
     {
         /// <summary>
         ///     This will return true if the two collections are value-wise the same.
@@ -38,6 +39,18 @@
                 return false;
             }
 
+            // for dictionaries, we need to compare keys and values separately
+            // because KeyValuePair<K,V>.Equals() will not do what we want
+            var fdict = first as IDictionary;
+            var sdict = second as IDictionary;
+            if ((fdict != null) || (sdict != null))
+            {
+                if ((fdict == null) || (sdict == null))
+                    return false;
+                return TCollections.Equals(fdict.Keys, sdict.Keys)
+                    && TCollections.Equals(fdict.Values, sdict.Values);
+            }
+
             var fiter = first.GetEnumerator();
             var siter = second.GetEnumerator();
 
@@ -91,11 +104,13 @@
 
                 unchecked
                 {
-                    hashcode = (hashcode*397) ^ (objHash);
+                    hashcode = (hashcode * 397) ^ (objHash);
                 }
             }
 
             return hashcode;
         }
+
+
     }
-}
\ No newline at end of file
+}
diff --git a/lib/netstd/Thrift/Collections/THashSet.cs b/lib/netstd/Thrift/Collections/THashSet.cs
index ffab577..8dfb9e3 100644
--- a/lib/netstd/Thrift/Collections/THashSet.cs
+++ b/lib/netstd/Thrift/Collections/THashSet.cs
@@ -60,12 +60,12 @@
             Items.CopyTo(array, arrayIndex);
         }
 
-        public IEnumerator GetEnumerator()
+        IEnumerator IEnumerable.GetEnumerator()
         {
             return Items.GetEnumerator();
         }
 
-        IEnumerator<T> IEnumerable<T>.GetEnumerator()
+        public IEnumerator<T> GetEnumerator()
         {
             return ((IEnumerable<T>) Items).GetEnumerator();
         }
diff --git a/lib/netstd/Thrift/Collections/ToStringExtension.cs b/lib/netstd/Thrift/Collections/ToStringExtension.cs
deleted file mode 100644
index 40dd9dd..0000000
--- a/lib/netstd/Thrift/Collections/ToStringExtension.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-// Licensed to the Apache Software Foundation(ASF) under one
-// or more contributor license agreements.See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-// 
-//     http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Text;
-using Thrift.Protocol;
-
-namespace Thrift.Collections
-{
-
-
-    public static class ToStringExtensions
-    {
-        public static void ToString(this object self, StringBuilder sb, bool first = true)
-        {
-            if (!first)
-                sb.Append(", ");
-
-            bool first_child = true;
-            if (self is string) // string is IEnumerable
-            {
-                sb.Append('"');
-                sb.Append(self);
-                sb.Append('"');
-            }
-            else if (self is IDictionary)
-            {
-                sb.Append("{ ");
-                foreach (DictionaryEntry pair in (self as IDictionary))
-                {
-                    if (first_child)
-                        first_child = false;
-                    else
-                        sb.Append(",");
-
-                    sb.Append("{ ");
-                    pair.Key.ToString(sb);
-                    sb.Append(", ");
-                    pair.Value.ToString(sb);
-                    sb.Append("}");
-                }
-                sb.Append("}");
-            }
-            else if (self is IEnumerable)
-            {
-                sb.Append("{ ");
-                foreach (var elm in (self as IEnumerable))
-                {
-                    elm.ToString(sb, first_child);
-                    first_child = false;
-                }
-                sb.Append("}");
-            }
-            else if (self is TBase)
-            {
-                sb.Append((self as TBase).ToString());
-            }
-            else
-            {
-                sb.Append(self.ToString());
-            }
-        }
-    }
-
-
-}
