tfinstall -> hcinstall
diff --git a/tfexec/internal/testutil/logger.go b/tfexec/internal/testutil/logger.go
new file mode 100644
index 0000000..f4f2ee5
--- /dev/null
+++ b/tfexec/internal/testutil/logger.go
@@ -0,0 +1,15 @@
+package testutil
+
+import (
+	"io/ioutil"
+	"log"
+	"os"
+	"testing"
+)
+
+func TestLogger() *log.Logger {
+	if testing.Verbose() {
+		return log.New(os.Stdout, "", log.LstdFlags|log.Lshortfile)
+	}
+	return log.New(ioutil.Discard, "", 0)
+}
diff --git a/tfexec/internal/testutil/tfcache.go b/tfexec/internal/testutil/tfcache.go
index d470ed2..169d913 100644
--- a/tfexec/internal/testutil/tfcache.go
+++ b/tfexec/internal/testutil/tfcache.go
@@ -1,11 +1,14 @@
 package testutil
 
 import (
+	"context"
 	"sync"
 	"testing"
 
-	"github.com/hashicorp/terraform-exec/tfinstall"
-	"github.com/hashicorp/terraform-exec/tfinstall/gitref"
+	"github.com/hashicorp/go-version"
+	"github.com/hashicorp/hc-install/build"
+	"github.com/hashicorp/hc-install/product"
+	"github.com/hashicorp/hc-install/releases"
 )
 
 const (
@@ -36,16 +39,32 @@
 
 func (tf *TFCache) GitRef(t *testing.T, ref string) string {
 	t.Helper()
-	return tf.find(t, "gitref:"+ref, func(dir string) tfinstall.ExecPathFinder {
-		return gitref.Install(ref, "", dir)
+
+	key := "gitref:" + ref
+
+	return tf.find(t, key, func(ctx context.Context) (string, error) {
+		gr := &build.GitRevision{
+			Product: product.Terraform,
+			Ref:     ref,
+		}
+		// gr.SetLogger(TestLogger())
+
+		return gr.Build(ctx)
 	})
 }
 
 func (tf *TFCache) Version(t *testing.T, v string) string {
 	t.Helper()
-	return tf.find(t, "v:"+v, func(dir string) tfinstall.ExecPathFinder {
-		f := tfinstall.ExactVersion(v, dir)
-		f.UserAgent = appendUserAgent
-		return f
+
+	key := "v:" + v
+
+	return tf.find(t, key, func(ctx context.Context) (string, error) {
+		ev := &releases.ExactVersion{
+			Product: product.Terraform,
+			Version: version.Must(version.NewVersion(v)),
+		}
+		// ev.SetLogger(TestLogger())
+
+		return ev.Install(ctx)
 	})
 }
diff --git a/tfexec/internal/testutil/tfcache_find.go b/tfexec/internal/testutil/tfcache_find.go
index eb03bcb..1578c24 100644
--- a/tfexec/internal/testutil/tfcache_find.go
+++ b/tfexec/internal/testutil/tfcache_find.go
@@ -7,11 +7,9 @@
 	"path/filepath"
 	"strings"
 	"testing"
-
-	"github.com/hashicorp/terraform-exec/tfinstall"
 )
 
-func (tf *TFCache) find(t *testing.T, key string, finder func(dir string) tfinstall.ExecPathFinder) string {
+func (tf *TFCache) find(t *testing.T, key string, execPathFunc func(context.Context) (string, error)) string {
 	t.Helper()
 
 	if tf.dir == "" {
@@ -43,12 +41,13 @@
 	ctx, cancelFunc := context.WithCancel(context.Background())
 	t.Cleanup(cancelFunc)
 
-	path, err := tfinstall.Find(ctx, finder(dir))
+	execPath, err := execPathFunc(ctx)
 	if err != nil {
 		// panic instead of t.fatal as this is going to affect all downstream tests reusing the cache entry
 		panic(fmt.Sprintf("error installing terraform %q: %s", key, err))
 	}
-	tf.execs[key] = path
 
-	return path
+	tf.execs[key] = execPath
+
+	return execPath
 }
diff --git a/tfexec/terraform.go b/tfexec/terraform.go
index 74787af..a41009e 100644
--- a/tfexec/terraform.go
+++ b/tfexec/terraform.go
@@ -71,7 +71,7 @@
 	}
 
 	if execPath == "" {
-		err := fmt.Errorf("NewTerraform: please supply the path to a Terraform executable using execPath, e.g. using the tfinstall package.")
+		err := fmt.Errorf("NewTerraform: please supply the path to a Terraform executable using execPath, e.g. using the github.com/hashicorp/hc-install module.")
 		return nil, &ErrNoSuitableBinary{
 			err: err,
 		}
diff --git a/tfexec/version_test.go b/tfexec/version_test.go
index 17edb94..cc0c916 100644
--- a/tfexec/version_test.go
+++ b/tfexec/version_test.go
@@ -9,7 +9,9 @@
 
 	"github.com/google/go-cmp/cmp"
 	"github.com/hashicorp/go-version"
-	"github.com/hashicorp/terraform-exec/tfinstall"
+	"github.com/hashicorp/hc-install/product"
+	"github.com/hashicorp/hc-install/releases"
+	"github.com/hashicorp/terraform-exec/tfexec/internal/testutil"
 )
 
 func mustVersion(t *testing.T, s string) *version.Version {
@@ -205,11 +207,28 @@
 }
 
 func TestCompatible(t *testing.T) {
-	tf01226, err := tfinstall.Find(context.Background(), tfinstall.ExactVersion("0.12.26", ""))
+	ev := &releases.ExactVersion{
+		Product: product.Terraform,
+		Version: version.Must(version.NewVersion("0.12.26")),
+	}
+	ev.SetLogger(testutil.TestLogger())
+
+	ctx := context.Background()
+	t.Cleanup(func() { ev.Remove(ctx) })
+
+	tf01226, err := ev.Install(ctx)
 	if err != nil {
 		t.Fatal(err)
 	}
-	tf013beta3, err := tfinstall.Find(context.Background(), tfinstall.ExactVersion("0.13.0-beta3", ""))
+
+	ev = &releases.ExactVersion{
+		Product: product.Terraform,
+		Version: version.Must(version.NewVersion("0.13.0-beta3")),
+	}
+	ev.SetLogger(testutil.TestLogger())
+	t.Cleanup(func() { ev.Remove(ctx) })
+
+	tf013beta3, err := ev.Install(ctx)
 	if err != nil {
 		t.Fatal(err)
 	}