diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..a88fd04
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,21 @@
+on: [push, pull_request]
+name: CI
+jobs:
+  test:
+    strategy:
+      matrix:
+        go-version: [1.17.x]
+        os: [ubuntu-latest, macos-latest, windows-latest]
+    runs-on: ${{ matrix.os }}
+    steps:
+    - name: Install Go
+      uses: actions/setup-go@v2
+      with:
+        go-version: ${{ matrix.go-version }}
+    - name: Checkout code
+      uses: actions/checkout@v2
+    - name: Test
+      run: |
+        #go vet ./...
+        go test -v -race ./...
+        go test -bench=.
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index c760d24..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-language: go
-
-go:
-    - 1.8
-    - 1.9
-    - tip
-
-script:
-    - go test -race ./...
-    - go test -bench=.
-
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..0ea813d
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,3 @@
+module github.com/deckarep/golang-set
+
+go 1.17
diff --git a/threadunsafe.go b/threadunsafe.go
index 10bdd46..927eb23 100644
--- a/threadunsafe.go
+++ b/threadunsafe.go
@@ -76,6 +76,9 @@ func (set *threadUnsafeSet) Contains(i ...interface{}) bool {
 
 func (set *threadUnsafeSet) IsSubset(other Set) bool {
 	_ = other.(*threadUnsafeSet)
+	if set.Cardinality() > other.Cardinality() {
+		return false
+	}
 	for elem := range *set {
 		if !other.Contains(elem) {
 			return false