diff --git a/impl/google/discovery/jni.go b/impl/google/discovery/jni.go
new file mode 100644
index 0000000..354593a
--- /dev/null
+++ b/impl/google/discovery/jni.go
@@ -0,0 +1,67 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build java android
+
+package discovery
+
+import (
+	"bytes"
+	"encoding/binary"
+	"unsafe"
+
+	jutil "v.io/x/jni/util"
+	"v.io/x/ref/lib/discovery"
+)
+
+// #include "jni.h"
+// #include <stdlib.h>
+import "C"
+
+var (
+	classSign = jutil.ClassSign("java.lang.Class")
+	// Global reference for java.util.UUID class;
+	jUUIDClass jutil.Class
+)
+
+// Init initializes the JNI code with the given Java environment. This method
+// must be called from the main Java thread.
+func Init(env jutil.Env) error {
+	// Cache global references to all Java classes used by the package.  This is
+	// necessary because JNI gets access to the class loader only in the system
+	// thread, so we aren't able to invoke FindClass in other threads.
+	var err error
+	jUUIDClass, err = jutil.JFindClass(env, "java/util/UUID")
+
+	return err
+}
+
+func convertStringtoUUID(jenv *C.JNIEnv, _ C.jclass, jName C.jstring, generator func(string) discovery.Uuid) C.jobject {
+	env := jutil.Env(uintptr(unsafe.Pointer(jenv)))
+	name := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName))))
+	uuid := generator(name)
+	buf := bytes.NewBuffer(uuid)
+	var high, low int64
+	binary.Read(buf, binary.BigEndian, &high)
+	binary.Read(buf, binary.BigEndian, &low)
+	jUUID, err := jutil.NewObject(env, jUUIDClass, []jutil.Sign{jutil.LongSign, jutil.LongSign}, high, low)
+	if err != nil {
+		jutil.JThrowV(env, err)
+		return nil
+	}
+	return C.jobject(unsafe.Pointer(jUUID))
+}
+
+//export Java_io_v_impl_google_lib_discovery_UUIDUtil_UUIDForInterfaceName
+func Java_io_v_impl_google_lib_discovery_UUIDUtil_UUIDForInterfaceName(jenv *C.JNIEnv, jclass C.jclass, jName C.jstring) C.jobject {
+	return convertStringtoUUID(jenv, jclass, jName, discovery.NewServiceUUID)
+}
+
+//export Java_io_v_impl_google_lib_discovery_UUIDUtil_UUIDForAttributeKey
+func Java_io_v_impl_google_lib_discovery_UUIDUtil_UUIDForAttributeKey(jenv *C.JNIEnv, jclass C.jclass, jName C.jstring) C.jobject {
+	converter := func(s string) discovery.Uuid {
+		return discovery.Uuid(discovery.NewAttributeUUID(s))
+	}
+	return convertStringtoUUID(jenv, jclass, jName, converter)
+}
diff --git a/impl/google/jni.go b/impl/google/jni.go
index 217ce8b..bda3428 100644
--- a/impl/google/jni.go
+++ b/impl/google/jni.go
@@ -13,6 +13,7 @@
 	jrt "v.io/x/jni/impl/google/rt"
 	jservices "v.io/x/jni/impl/google/services"
 	jutil "v.io/x/jni/util"
+	jdiscovery "v.io/x/jni/impl/google/discovery"
 )
 
 // #include "jni.h"
@@ -37,5 +38,9 @@
 	if err := jservices.Init(env); err != nil {
 		return err
 	}
+
+	if err := jdiscovery.Init(env); err != nil {
+		return err
+	}
 	return nil
 }
