use Timing
diff --git a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/locks/TestInterProcessSemaphore.java b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/locks/TestInterProcessSemaphore.java
index 6eeba94..b930cc0 100644
--- a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/locks/TestInterProcessSemaphore.java
+++ b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/locks/TestInterProcessSemaphore.java
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.curator.framework.recipes.locks;
 
 import com.google.common.collect.Lists;
@@ -47,21 +48,21 @@
     @Test
     public void testThreadedLeaseIncrease() throws Exception
     {
-        final Timing        timing = new Timing();
-        CuratorFramework    client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(1));
+        final Timing timing = new Timing();
+        CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(1));
         try
         {
             client.start();
 
-            final SharedCount             count = new SharedCount(client, "/foo/count", 1);
+            final SharedCount count = new SharedCount(client, "/foo/count", 1);
             count.start();
 
-            final InterProcessSemaphoreV2   semaphore = new InterProcessSemaphoreV2(client, "/test", count);
+            final InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", count);
 
-            ExecutorService     service = Executors.newCachedThreadPool();
+            ExecutorService service = Executors.newCachedThreadPool();
 
-            final CountDownLatch    latch = new CountDownLatch(1);
-            Future<Object>          future1 = service.submit
+            final CountDownLatch latch = new CountDownLatch(1);
+            Future<Object> future1 = service.submit
                 (
                     new Callable<Object>()
                     {
@@ -71,26 +72,26 @@
                             Lease lease = semaphore.acquire(timing.seconds(), TimeUnit.SECONDS);
                             Assert.assertNotNull(lease);
                             latch.countDown();
-                            lease = semaphore.acquire(timing.seconds(), TimeUnit.SECONDS);
+                            lease = semaphore.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS);
                             Assert.assertNotNull(lease);
                             return null;
                         }
                     }
                 );
-            Future<Object>          future2 = service.submit
-            (
-                new Callable<Object>()
-                {
-                    @Override
-                    public Object call() throws Exception
+            Future<Object> future2 = service.submit
+                (
+                    new Callable<Object>()
                     {
-                        Assert.assertTrue(latch.await(timing.seconds(), TimeUnit.SECONDS));
-                        timing.sleepABit(); // make sure second acquire is waiting
-                        Assert.assertTrue(count.trySetCount(2));
-                        return null;
+                        @Override
+                        public Object call() throws Exception
+                        {
+                            Assert.assertTrue(latch.await(timing.forWaiting().seconds(), TimeUnit.SECONDS));
+                            timing.sleepABit(); // make sure second acquire is waiting
+                            Assert.assertTrue(count.trySetCount(2));
+                            return null;
+                        }
                     }
-                }
-            );
+                );
 
             future1.get();
             future2.get();
@@ -104,6 +105,7 @@
     @Test
     public void testClientClose() throws Exception
     {
+        final Timing timing = new Timing();
         CuratorFramework client1 = null;
         CuratorFramework client2 = null;
         InterProcessSemaphoreV2 semaphore1;
@@ -119,7 +121,7 @@
             semaphore1 = new InterProcessSemaphoreV2(client1, "/test", 1);
             semaphore2 = new InterProcessSemaphoreV2(client2, "/test", 1);
 
-            Lease lease = semaphore2.acquire(10, TimeUnit.SECONDS);
+            Lease lease = semaphore2.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS);
             Assert.assertNotNull(lease);
             lease.close();
 
@@ -128,8 +130,8 @@
 
             client1.close();    // should release any held leases
             client1 = null;
-            
-            Assert.assertNotNull(semaphore2.acquire(10, TimeUnit.SECONDS));
+
+            Assert.assertNotNull(semaphore2.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS));
         }
         finally
         {
@@ -139,92 +141,93 @@
     }
 
     @Test
-    public void     testMaxPerSession() throws Exception
+    public void testMaxPerSession() throws Exception
     {
-        final int             CLIENT_QTY = 10;
-        final int             LOOP_QTY = 100;
-        final Random          random = new Random();
-        final int             SESSION_MAX = random.nextInt(75) + 25;
+        final int CLIENT_QTY = 10;
+        final int LOOP_QTY = 100;
+        final Random random = new Random();
+        final int SESSION_MAX = random.nextInt(75) + 25;
+        final Timing timing = new Timing();
 
-        List<Future<Object>>  futures = Lists.newArrayList();
-        ExecutorService       service = Executors.newCachedThreadPool();
-        final Counter         counter = new Counter();
-        final AtomicInteger   available = new AtomicInteger(SESSION_MAX);
+        List<Future<Object>> futures = Lists.newArrayList();
+        ExecutorService service = Executors.newCachedThreadPool();
+        final Counter counter = new Counter();
+        final AtomicInteger available = new AtomicInteger(SESSION_MAX);
         for ( int i = 0; i < CLIENT_QTY; ++i )
         {
             futures.add
-            (
-                service.submit
                 (
-                    new Callable<Object>()
-                    {
-                        @Override
-                        public Object call() throws Exception
-                        {
-                            CuratorFramework    client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
-                            client.start();
-                            try
+                    service.submit
+                        (
+                            new Callable<Object>()
                             {
-                                InterProcessSemaphoreV2   semaphore = new InterProcessSemaphoreV2(client, "/test", SESSION_MAX);
-
-                                for ( int i = 0; i < LOOP_QTY; ++i )
+                                @Override
+                                public Object call() throws Exception
                                 {
-                                    long    start = System.currentTimeMillis();
-                                    int     thisQty;
-                                    synchronized(available)
-                                    {
-                                        if ( (System.currentTimeMillis() - start) > 10000 )
-                                        {
-                                            throw new TimeoutException();
-                                        }
-                                        while ( available.get() == 0 )
-                                        {
-                                            available.wait(10000);
-                                        }
-
-                                        thisQty = (available.get() > 1) ? (random.nextInt(available.get()) + 1) : 1;
-
-                                        available.addAndGet(-1 * thisQty);
-                                        Assert.assertTrue(available.get() >= 0);
-                                    }
-                                    Collection<Lease> leases = semaphore.acquire(thisQty, 10, TimeUnit.SECONDS);
-                                    Assert.assertNotNull(leases);
+                                    CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(1));
+                                    client.start();
                                     try
                                     {
-                                        synchronized(counter)
+                                        InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", SESSION_MAX);
+
+                                        for ( int i = 0; i < LOOP_QTY; ++i )
                                         {
-                                            counter.currentCount += thisQty;
-                                            if ( counter.currentCount > counter.maxCount )
+                                            long start = System.currentTimeMillis();
+                                            int thisQty;
+                                            synchronized(available)
                                             {
-                                                counter.maxCount = counter.currentCount;
+                                                if ( (System.currentTimeMillis() - start) > 10000 )
+                                                {
+                                                    throw new TimeoutException();
+                                                }
+                                                while ( available.get() == 0 )
+                                                {
+                                                    available.wait(timing.forWaiting().milliseconds());
+                                                }
+
+                                                thisQty = (available.get() > 1) ? (random.nextInt(available.get()) + 1) : 1;
+
+                                                available.addAndGet(-1 * thisQty);
+                                                Assert.assertTrue(available.get() >= 0);
+                                            }
+                                            Collection<Lease> leases = semaphore.acquire(thisQty, timing.forWaiting().seconds(), TimeUnit.SECONDS);
+                                            Assert.assertNotNull(leases);
+                                            try
+                                            {
+                                                synchronized(counter)
+                                                {
+                                                    counter.currentCount += thisQty;
+                                                    if ( counter.currentCount > counter.maxCount )
+                                                    {
+                                                        counter.maxCount = counter.currentCount;
+                                                    }
+                                                }
+                                                Thread.sleep(random.nextInt(25));
+                                            }
+                                            finally
+                                            {
+                                                synchronized(counter)
+                                                {
+                                                    counter.currentCount -= thisQty;
+                                                }
+                                                semaphore.returnAll(leases);
+                                                synchronized(available)
+                                                {
+                                                    available.addAndGet(thisQty);
+                                                    available.notifyAll();
+                                                }
                                             }
                                         }
-                                        Thread.sleep(random.nextInt(25));
                                     }
                                     finally
                                     {
-                                        synchronized(counter)
-                                        {
-                                            counter.currentCount -= thisQty;
-                                        }
-                                        semaphore.returnAll(leases);
-                                        synchronized(available)
-                                        {
-                                            available.addAndGet(thisQty);
-                                            available.notifyAll();
-                                        }
+                                        client.close();
                                     }
+                                    return null;
                                 }
                             }
-                            finally
-                            {
-                                client.close();
-                            }
-                            return null;
-                        }
-                    }
-                )
-            );
+                        )
+                );
         }
 
         for ( Future<Object> f : futures )
@@ -242,60 +245,61 @@
     }
 
     @Test
-    public void     testRelease1AtATime() throws Exception
+    public void testRelease1AtATime() throws Exception
     {
-        final int               CLIENT_QTY = 10;
-        final int               MAX = CLIENT_QTY / 2;
-        final AtomicInteger     maxLeases = new AtomicInteger(0);
-        final AtomicInteger     activeQty = new AtomicInteger(0);
-        final AtomicInteger     uses = new AtomicInteger(0);
+        final Timing timing = new Timing();
+        final int CLIENT_QTY = 10;
+        final int MAX = CLIENT_QTY / 2;
+        final AtomicInteger maxLeases = new AtomicInteger(0);
+        final AtomicInteger activeQty = new AtomicInteger(0);
+        final AtomicInteger uses = new AtomicInteger(0);
 
-        List<Future<Object>>    futures = Lists.newArrayList();
-        ExecutorService         service = Executors.newFixedThreadPool(CLIENT_QTY);
+        List<Future<Object>> futures = Lists.newArrayList();
+        ExecutorService service = Executors.newFixedThreadPool(CLIENT_QTY);
         for ( int i = 0; i < CLIENT_QTY; ++i )
         {
-            Future<Object>      f = service.submit
-            (
-                new Callable<Object>()
-                {
-                    @Override
-                    public Object call() throws Exception
+            Future<Object> f = service.submit
+                (
+                    new Callable<Object>()
                     {
-                        CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
-                        client.start();
-                        try
+                        @Override
+                        public Object call() throws Exception
                         {
-                            InterProcessSemaphoreV2   semaphore = new InterProcessSemaphoreV2(client, "/test", MAX);
-                            Lease lease = semaphore.acquire(10, TimeUnit.SECONDS);
-                            Assert.assertNotNull(lease);
-                            uses.incrementAndGet();
+                            CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
+                            client.start();
                             try
                             {
-                                synchronized(maxLeases)
+                                InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", MAX);
+                                Lease lease = semaphore.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS);
+                                Assert.assertNotNull(lease);
+                                uses.incrementAndGet();
+                                try
                                 {
-                                    int         qty = activeQty.incrementAndGet();
-                                    if ( qty > maxLeases.get() )
+                                    synchronized(maxLeases)
                                     {
-                                        maxLeases.set(qty);
+                                        int qty = activeQty.incrementAndGet();
+                                        if ( qty > maxLeases.get() )
+                                        {
+                                            maxLeases.set(qty);
+                                        }
                                     }
-                                }
 
-                                Thread.sleep(500);
+                                    timing.sleepABit();
+                                }
+                                finally
+                                {
+                                    activeQty.decrementAndGet();
+                                    lease.close();
+                                }
                             }
                             finally
                             {
-                                activeQty.decrementAndGet();
-                                lease.close();
+                                client.close();
                             }
+                            return null;
                         }
-                        finally
-                        {
-                            client.close();
-                        }
-                        return null;
                     }
-                }
-            );
+                );
             futures.add(f);
         }
 
@@ -307,66 +311,67 @@
         Assert.assertEquals(uses.get(), CLIENT_QTY);
         Assert.assertEquals(maxLeases.get(), MAX);
     }
-    
-    @Test
-    public void     testReleaseInChunks() throws Exception
-    {
-        final int       MAX_LEASES = 11;
-        final int       THREADS = 100;
 
-        final CuratorFramework    client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
+    @Test
+    public void testReleaseInChunks() throws Exception
+    {
+        final Timing timing = new Timing();
+        final int MAX_LEASES = 11;
+        final int THREADS = 100;
+
+        final CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
         client.start();
         try
         {
-            final Stepper         latch = new Stepper();
-            final Random          random = new Random();
-            final Counter         counter = new Counter();
-            ExecutorService       service = Executors.newCachedThreadPool();
-            ExecutorCompletionService<Object>   completionService = new ExecutorCompletionService<Object>(service);
+            final Stepper latch = new Stepper();
+            final Random random = new Random();
+            final Counter counter = new Counter();
+            ExecutorService service = Executors.newCachedThreadPool();
+            ExecutorCompletionService<Object> completionService = new ExecutorCompletionService<Object>(service);
             for ( int i = 0; i < THREADS; ++i )
             {
                 completionService.submit
-                (
-                    new Callable<Object>()
-                    {
-                        @Override
-                        public Object call() throws Exception
+                    (
+                        new Callable<Object>()
                         {
-                            InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", MAX_LEASES);
-                            Lease lease = semaphore.acquire(10, TimeUnit.SECONDS);
-                            if ( lease == null )
+                            @Override
+                            public Object call() throws Exception
                             {
-                                throw new Exception("timed out");
-                            }
-                            try
-                            {
-                                synchronized(counter)
+                                InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", MAX_LEASES);
+                                Lease lease = semaphore.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS);
+                                if ( lease == null )
                                 {
-                                    ++counter.currentCount;
-                                    if ( counter.currentCount > counter.maxCount )
+                                    throw new Exception("timed out");
+                                }
+                                try
+                                {
+                                    synchronized(counter)
                                     {
-                                        counter.maxCount = counter.currentCount;
+                                        ++counter.currentCount;
+                                        if ( counter.currentCount > counter.maxCount )
+                                        {
+                                            counter.maxCount = counter.currentCount;
+                                        }
+                                        counter.notifyAll();
                                     }
-                                    counter.notifyAll();
-                                }
 
-                                latch.await();
-                            }
-                            finally
-                            {
-                                synchronized(counter)
-                                {
-                                    --counter.currentCount;
+                                    latch.await();
                                 }
-                                semaphore.returnLease(lease);
+                                finally
+                                {
+                                    synchronized(counter)
+                                    {
+                                        --counter.currentCount;
+                                    }
+                                    semaphore.returnLease(lease);
+                                }
+                                return null;
                             }
-                            return null;
                         }
-                    }
-                );
+                    );
             }
 
-            int     remaining = THREADS;
+            int remaining = THREADS;
             while ( remaining > 0 )
             {
                 int times = Math.min(random.nextInt(5) + 1, remaining);
@@ -374,7 +379,7 @@
                 remaining -= times;
                 Thread.sleep(random.nextInt(100) + 1);
             }
-            
+
             for ( int i = 0; i < THREADS; ++i )
             {
                 completionService.take();
@@ -393,40 +398,40 @@
             client.close();
         }
     }
-    
+
     @Test
-    public void     testThreads() throws Exception
+    public void testThreads() throws Exception
     {
-        final int        THREAD_QTY = 10;
+        final int THREAD_QTY = 10;
 
         CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
         client.start();
         try
         {
-            final InterProcessSemaphoreV2   semaphore = new InterProcessSemaphoreV2(client, "/test", 1);
-            ExecutorService               service = Executors.newFixedThreadPool(THREAD_QTY);
+            final InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", 1);
+            ExecutorService service = Executors.newFixedThreadPool(THREAD_QTY);
             for ( int i = 0; i < THREAD_QTY; ++i )
             {
                 service.submit
-                (
-                    new Callable<Object>()
-                    {
-                        @Override
-                        public Object call() throws Exception
+                    (
+                        new Callable<Object>()
                         {
-                            Lease   lease = semaphore.acquire();
-                            try
+                            @Override
+                            public Object call() throws Exception
                             {
-                                Thread.sleep(1);
+                                Lease lease = semaphore.acquire();
+                                try
+                                {
+                                    Thread.sleep(1);
+                                }
+                                finally
+                                {
+                                    lease.close();
+                                }
+                                return null;
                             }
-                            finally
-                            {
-                                lease.close();
-                            }
-                            return null;
                         }
-                    }
-                );
+                    );
             }
             service.shutdown();
             Assert.assertTrue(service.awaitTermination(10, TimeUnit.SECONDS));
@@ -437,17 +442,17 @@
         }
     }
 
-
     @Test
-    public void     testSimple() throws Exception
+    public void testSimple() throws Exception
     {
+        Timing timing = new Timing();
         CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
         client.start();
         try
         {
-            InterProcessSemaphoreV2   semaphore = new InterProcessSemaphoreV2(client, "/test", 1);
-            Assert.assertNotNull(semaphore.acquire(10, TimeUnit.SECONDS));
-            Assert.assertNull(semaphore.acquire(3, TimeUnit.SECONDS));
+            InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", 1);
+            Assert.assertNotNull(semaphore.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS));
+            Assert.assertNull(semaphore.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS));
         }
         finally
         {
@@ -456,29 +461,30 @@
     }
 
     @Test
-    public void     testSimple2() throws Exception
+    public void testSimple2() throws Exception
     {
-        final int       MAX_LEASES = 3;
+        final int MAX_LEASES = 3;
+        Timing timing = new Timing();
 
         CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
         client.start();
         try
         {
-            List<Lease>        leases = Lists.newArrayList();
+            List<Lease> leases = Lists.newArrayList();
             for ( int i = 0; i < MAX_LEASES; ++i )
             {
-                InterProcessSemaphoreV2      semaphore = new InterProcessSemaphoreV2(client, "/test", MAX_LEASES);
-                Lease                      lease = semaphore.acquire(10, TimeUnit.SECONDS);
+                InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", MAX_LEASES);
+                Lease lease = semaphore.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS);
                 Assert.assertNotNull(lease);
                 leases.add(lease);
             }
 
-            InterProcessSemaphoreV2      semaphore = new InterProcessSemaphoreV2(client, "/test", MAX_LEASES);
-            Lease lease = semaphore.acquire(3, TimeUnit.SECONDS);
+            InterProcessSemaphoreV2 semaphore = new InterProcessSemaphoreV2(client, "/test", MAX_LEASES);
+            Lease lease = semaphore.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS);
             Assert.assertNull(lease);
 
             leases.remove(0).close();
-            Assert.assertNotNull(semaphore.acquire(10, TimeUnit.SECONDS));
+            Assert.assertNotNull(semaphore.acquire(timing.forWaiting().seconds(), TimeUnit.SECONDS));
         }
         finally
         {