diff --git a/VERSION b/VERSION
index 4c5d9b4..f93fc9f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.0.12-dev
+3.0.12
diff --git a/pkg/log/log.go b/pkg/log/log.go
index 07e5830..69e22a4 100644
--- a/pkg/log/log.go
+++ b/pkg/log/log.go
@@ -108,7 +108,7 @@
 	Warningf(string, ...interface{})
 
 	// V reports whether verbosity level l is at least the requested verbose level.
-	V(l int) bool
+	V(l LogLevel) bool
 
 	//Returns the log level of this specific logger
 	GetLogLevel() LogLevel
@@ -643,8 +643,8 @@
 }
 
 // V reports whether verbosity level l is at least the requested verbose level.
-func (l logger) V(level int) bool {
-	return l.parent.Core().Enabled(logLevelToLevel(LogLevel(level)))
+func (l logger) V(level LogLevel) bool {
+	return l.parent.Core().Enabled(logLevelToLevel(level))
 }
 
 // GetLogLevel returns the current level of the logger
@@ -778,7 +778,7 @@
 }
 
 // V reports whether verbosity level l is at least the requested verbose level.
-func V(level int) bool {
+func V(level LogLevel) bool {
 	return getPackageLevelLogger().V(level)
 }
 
diff --git a/pkg/log/log_test.go b/pkg/log/log_test.go
index 84a91d1..be65b02 100644
--- a/pkg/log/log_test.go
+++ b/pkg/log/log_test.go
@@ -17,7 +17,6 @@
 
 import (
 	"github.com/stretchr/testify/assert"
-	"google.golang.org/grpc/grpclog"
 	"testing"
 )
 
@@ -38,7 +37,7 @@
 	SetAllLogLevel(LogLevel(minimumLevel))
 	var success bool
 	for i := 0; i < 5; i++ {
-		success = testLogger.V(i)
+		success = testLogger.V(LogLevel(i))
 		if i == 1 && minimumLevel == 2 {
 			// TODO: Update the test when a new version of Zap logger is available.  It has a bug with that
 			// specific combination
@@ -69,13 +68,6 @@
 	assert.NotNil(t, testLogger)
 }
 
-func TestUseAsGrpcLoggerV2(t *testing.T) {
-	var grpcLogger grpclog.LoggerV2
-	thisLogger, _ := AddPackage(JSON, ErrorLevel, nil)
-	grpcLogger = thisLogger
-	assert.NotNil(t, grpcLogger)
-}
-
 func TestUpdateLogLevel(t *testing.T) {
 	//	Let's create a bunch of logger each with a separate package
 	myLoggers := make(map[string]Logger)
@@ -84,17 +76,17 @@
 		myLoggers[name], _ = AddPackage(JSON, ErrorLevel, nil, []string{name}...)
 	}
 	//Test updates to log levels
-	levels := []int{0, 1, 2, 3, 4}
+	levels := []LogLevel{DebugLevel, InfoLevel, WarnLevel, ErrorLevel, FatalLevel}
 	for _, expectedLevel := range levels {
 		for _, name := range pkgNames {
-			SetPackageLogLevel(name, LogLevel(expectedLevel))
+			SetPackageLogLevel(name, expectedLevel)
 			l, err := GetPackageLogLevel(name)
 			assert.Nil(t, err)
-			assert.Equal(t, l, LogLevel(expectedLevel))
+			assert.Equal(t, l, expectedLevel)
 			// Get the package log level by invoking the specific logger created for this package
 			// This is a less expensive operation that the GetPackageLogLevel() request
 			level := myLoggers[name].GetLogLevel()
-			assert.Equal(t, level, LogLevel(expectedLevel))
+			assert.Equal(t, level, expectedLevel)
 			// Check the verbosity level
 			for _, level := range levels {
 				toDisplay := myLoggers[name].V(level)
