diff --git a/tests/src/whisk/core/admin/WskAdminTests.scala b/tests/src/whisk/core/admin/WskAdminTests.scala
index 73ee31a..4dfdc79 100644
--- a/tests/src/whisk/core/admin/WskAdminTests.scala
+++ b/tests/src/whisk/core/admin/WskAdminTests.scala
@@ -16,6 +16,8 @@
 
 package whisk.core.admin
 
+import scala.concurrent.duration.DurationInt
+
 import org.junit.runner.RunWith
 import org.scalatest.Matchers
 import org.scalatest.junit.JUnitRunner
@@ -42,23 +44,42 @@
         val wskadmin = new RunWskAdminCmd {}
         val auth = WhiskAuth(Subject(), AuthKey())
         val subject = auth.subject.asString
+        try {
+            println(s"CRD subject: $subject")
+            val create = wskadmin.cli(Seq("user", "create", subject))
+            val get = wskadmin.cli(Seq("user", "get", subject))
+            create.stdout should be(get.stdout)
 
-        println(s"CRD subject: $subject")
-        val create = wskadmin.cli(Seq("user", "create", subject))
-        val get = wskadmin.cli(Seq("user", "get", subject))
-        create.stdout should be(get.stdout)
+            val authkey = get.stdout.trim
+            authkey should include(":")
+            authkey.split(":")(0).length should be(36)
+            authkey.split(":")(1).length should be >= 64
 
-        val authkey = get.stdout.trim
-        authkey should include(":")
-        authkey.split(":")(0).length should be(36)
-        authkey.split(":")(1).length should be >= 64
+            wskadmin.cli(Seq("user", "whois", authkey)).stdout.trim should be(Seq(s"subject: $subject", s"namespace: $subject").mkString("\n"))
 
-        wskadmin.cli(Seq("user", "whois", authkey)).stdout.trim should be(Seq(s"subject: $subject", s"namespace: $subject").mkString("\n"))
-        wskadmin.cli(Seq("user", "delete", subject)).stdout should include("Subject deleted")
+            whisk.utils.retry({
+                // reverse lookup by namespace
+                wskadmin.cli(Seq("user", "list", "-k", subject)).stdout.trim should be(authkey)
+            }, 10, Some(1.second))
 
-        val recreate = wskadmin.cli(Seq("user", "create", subject, "-u", auth.authkey.compact))
-        wskadmin.cli(Seq("user", "get", subject)).stdout.trim should be(auth.authkey.compact)
-        wskadmin.cli(Seq("user", "delete", subject)).stdout should include("Subject deleted")
+            wskadmin.cli(Seq("user", "delete", subject)).stdout should include("Subject deleted")
+
+            // recreate with explicit
+            val newspace = s"${subject}.myspace"
+            wskadmin.cli(Seq("user", "create", subject, "-ns", newspace, "-u", auth.authkey.compact))
+
+            whisk.utils.retry({
+                // reverse lookup by namespace
+                wskadmin.cli(Seq("user", "list", "-k", newspace)).stdout.trim should be(auth.authkey.compact)
+            }, 10, Some(1.second))
+
+            wskadmin.cli(Seq("user", "get", subject, "-ns", newspace)).stdout.trim should be(auth.authkey.compact)
+
+            // delete namespace
+            wskadmin.cli(Seq("user", "delete", subject, "-ns", newspace)).stdout should include("Namespace deleted")
+        } finally {
+            wskadmin.cli(Seq("user", "delete", subject)).stdout should include("Subject deleted")
+        }
     }
 
 }
