diff --git a/libs/discovery/jni.go b/libs/discovery/jni.go
index efcd95f..b9a1c27 100644
--- a/libs/discovery/jni.go
+++ b/libs/discovery/jni.go
@@ -20,15 +20,12 @@
 	androidContextSign = jutil.ClassSign("android.content.Context")
 	contextSign        = jutil.ClassSign("io.v.v23.context.VContext")
 	advertisementSign  = jutil.ClassSign("io.v.x.ref.lib.discovery.Advertisement")
-	uuidSign           = jutil.ClassSign("java.util.UUID")
 	scanHandlerSign    = jutil.ClassSign("io.v.impl.google.lib.discovery.ScanHandler")
 
-	// Global reference for io.v.android.libs.discovery.ble.BlePlugin
-	jBlePluginClass jutil.Class
 	// Global reference for io.v.x.ref.lib.discovery.Advertisement
 	jAdvertisementClass jutil.Class
-	// Global reference for java.util.UUID
-	jUUIDClass jutil.Class
+	// Global reference for io.v.android.libs.discovery.ble.BlePlugin
+	jBlePluginClass jutil.Class
 	// Global reference for io.v.android.libs.discovery.ble.NativeScanHandler
 	jNativeScanHandlerClass jutil.Class
 )
@@ -36,22 +33,15 @@
 func Init(env jutil.Env) error {
 	var err error
 
-	jUUIDClass, err = jutil.JFindClass(env, "java/util/UUID")
+	jAdvertisementClass, err = jutil.JFindClass(env, "io/v/x/ref/lib/discovery/Advertisement")
 	if err != nil {
 		return err
 	}
-
-	jNativeScanHandlerClass, err = jutil.JFindClass(env, "io/v/android/libs/discovery/ble/NativeScanHandler")
-	if err != nil {
-		return err
-	}
-
 	jBlePluginClass, err = jutil.JFindClass(env, "io/v/android/libs/discovery/ble/BlePlugin")
 	if err != nil {
 		return err
 	}
-
-	jAdvertisementClass, err = jutil.JFindClass(env, "io/v/x/ref/lib/discovery/Advertisement")
+	jNativeScanHandlerClass, err = jutil.JFindClass(env, "io/v/android/libs/discovery/ble/NativeScanHandler")
 	return err
 }
 
diff --git a/libs/discovery/plugin.go b/libs/discovery/plugin.go
index c3825ed..22f7fbb 100644
--- a/libs/discovery/plugin.go
+++ b/libs/discovery/plugin.go
@@ -7,8 +7,6 @@
 package discovery
 
 import (
-	"bytes"
-	"encoding/binary"
 	"runtime"
 
 	"v.io/v23/context"
@@ -78,7 +76,7 @@
 	return err
 }
 
-func (p *plugin) Scan(ctx *context.T, serviceUuid discovery.Uuid, ch chan<- discovery.Advertisement, done func()) error {
+func (p *plugin) Scan(ctx *context.T, interfaceName string, ch chan<- discovery.Advertisement, done func()) error {
 	env, freeFunc := jutil.GetEnv()
 	defer freeFunc()
 	jContext, err := jcontext.JavaContext(env, ctx, nil)
@@ -86,33 +84,16 @@
 		return err
 	}
 
-	jUuid, err := JavaUUID(env, serviceUuid)
-
-	if err != nil {
-		return err
-	}
-
 	jutil.GoRef(&ch)
 	jNativeScanHandler, err := jutil.NewObject(env, jNativeScanHandlerClass, []jutil.Sign{jutil.LongSign}, int64(jutil.PtrValue(&ch)))
 	if err != nil {
 		return err
 	}
 
-	err = jutil.CallVoidMethod(env, p.jPlugin, "addScanner", []jutil.Sign{contextSign, uuidSign, scanHandlerSign},
-		jContext, jUuid, jNativeScanHandler)
-
+	err = jutil.CallVoidMethod(env, p.jPlugin, "addScanner", []jutil.Sign{contextSign, jutil.StringSign, scanHandlerSign}, jContext, interfaceName, jNativeScanHandler)
 	if err != nil {
 		return err
 	}
 	p.trigger.Add(done, ctx.Done())
 	return nil
 }
-
-// JavaUUID converts a Go UUID type to a Java UUID object.
-func JavaUUID(env jutil.Env, uuid discovery.Uuid) (jutil.Object, error) {
-	buf := bytes.NewBuffer(uuid)
-	var high, low int64
-	binary.Read(buf, binary.BigEndian, &high)
-	binary.Read(buf, binary.BigEndian, &low)
-	return jutil.NewObject(env, jUUIDClass, []jutil.Sign{jutil.LongSign, jutil.LongSign}, high, low)
-}
