diff --git a/CHANGELOG.md b/CHANGELOG.md
index c04cc49..93cd5e1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 2.0.2
+
+- fix: `Map` prop with non-comparable key
+
 # 2.0.1
 
 - fix: `hashCode` should be the same for equal objects (`Map` fix)
diff --git a/lib/src/equatable_utils.dart b/lib/src/equatable_utils.dart
index 50dbb2b..4a18c5b 100644
--- a/lib/src/equatable_utils.dart
+++ b/lib/src/equatable_utils.dart
@@ -1,5 +1,3 @@
-import 'dart:collection';
-
 import 'package:collection/collection.dart';
 import 'package:equatable/equatable.dart';
 
@@ -41,11 +39,11 @@
 /// https://en.wikipedia.org/wiki/Jenkins_hash_function
 int _combine(int hash, dynamic object) {
   if (object is Map) {
-    SplayTreeMap<dynamic, dynamic>.of(object).forEach(
-      (dynamic key, dynamic value) {
-        hash = hash ^ _combine(hash, <dynamic>[key, value]);
-      },
-    );
+    object.keys
+        .sorted((dynamic a, dynamic b) => a.hashCode - b.hashCode)
+        .forEach((dynamic key) {
+      hash = hash ^ _combine(hash, <dynamic>[key, object[key]]);
+    });
     return hash;
   }
   if (object is Iterable) {
diff --git a/pubspec.yaml b/pubspec.yaml
index a9fe7e7..ee845ad 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
 name: equatable
 description: A Dart package that helps to implement value based equality without needing to explicitly override == and hashCode.
-version: 2.0.1
+version: 2.0.2
 repository: https://github.com/felangel/equatable
 issue_tracker: https://github.com/felangel/equatable/issues
 homepage: https://github.com/felangel/equatable
diff --git a/test/equatable_test.dart b/test/equatable_test.dart
index 3809e0d..5cc93ea 100644
--- a/test/equatable_test.dart
+++ b/test/equatable_test.dart
@@ -363,6 +363,109 @@
     });
   });
 
+  group('Simple Equatable (map custom key)', () {
+    test('should correct toString', () {
+      final instance = SimpleEquatable(<SimpleEquatable<String>, dynamic>{});
+      expect(
+        instance.toString(),
+        'SimpleEquatable<Map<SimpleEquatable<String>, dynamic>>({})',
+      );
+    });
+
+    test('should return true when instance is the same', () {
+      final instance = SimpleEquatable(
+        {
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('c'): 3
+        },
+      );
+      expect(instance == instance, true);
+    });
+
+    test('should return correct hashCode', () {
+      final instance = SimpleEquatable(
+        {
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('c'): 3
+        },
+      );
+      expect(
+        instance.hashCode,
+        instance.runtimeType.hashCode ^ mapPropsToHashCode(instance.props),
+      );
+    });
+
+    test('should have same hashCode when values are equal', () {
+      final instanceA = SimpleEquatable(
+        {
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('c'): 3
+        },
+      );
+      final instanceB = SimpleEquatable(
+        {
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('c'): 3
+        },
+      );
+      expect(instanceA == instanceB, true);
+      expect(instanceA.hashCode, instanceB.hashCode);
+    });
+
+    test('should return true when instances are different', () {
+      final instanceA = SimpleEquatable(
+        {
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('c'): 3
+        },
+      );
+      final instanceB = SimpleEquatable(
+        {
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('c'): 3
+        },
+      );
+      expect(instanceA == instanceB, true);
+      expect(instanceA.hashCode == instanceB.hashCode, true);
+    });
+
+    test('should return false when compared to non-equatable', () {
+      final instanceA = SimpleEquatable(
+        {
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('c'): 3
+        },
+      );
+      final instanceB = NonEquatable();
+      expect(instanceA == instanceB, false);
+    });
+
+    test('should return false when values are different', () {
+      final instanceA = SimpleEquatable(
+        {
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('c'): 3
+        },
+      );
+      final instanceB = SimpleEquatable(
+        {
+          SimpleEquatable<String>('a'): 1,
+          SimpleEquatable<String>('b'): 2,
+          SimpleEquatable<String>('c'): 2
+        },
+      );
+      expect(instanceA == instanceB, false);
+    });
+  });
+
   group('Simple Equatable (Equatable)', () {
     test('should correct toString', () {
       final instance = SimpleEquatable(EquatableData(
