diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java b/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java
index a0fec17..f5434e1 100644
--- a/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java
+++ b/htrace-core4/src/main/java/org/apache/htrace/core/TraceCallable.java
@@ -41,12 +41,8 @@
 
   @Override
   public V call() throws Exception {
-    TraceScope chunk = tracer.newScope(description,
-        parent.getSpan().getSpanId());
-    try {
+    try (TraceScope chunk = tracer.newScope(description, parent.getSpan().getSpanId())) {
       return impl.call();
-    } finally {
-      chunk.close();
     }
   }
 
diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java b/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java
index 8f98708..abf530f 100644
--- a/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java
+++ b/htrace-core4/src/main/java/org/apache/htrace/core/TraceRunnable.java
@@ -39,12 +39,8 @@
 
   @Override
   public void run() {
-    TraceScope chunk = tracer.newScope(description,
-        parent.getSpan().getSpanId());
-    try {
+    try (TraceScope chunk = tracer.newScope(description, parent.getSpan().getSpanId())) {
       runnable.run();
-    } finally {
-      chunk.close();
     }
   }
 
diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java b/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java
index a683716..29fd14e 100644
--- a/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java
+++ b/htrace-core4/src/main/java/org/apache/htrace/core/Tracer.java
@@ -464,19 +464,15 @@
    */
   @SuppressWarnings("unchecked")
   <T, V> T createProxy(final T instance) {
-    final Tracer tracer = this;
     InvocationHandler handler = new InvocationHandler() {
       @Override
       public Object invoke(Object obj, Method method, Object[] args)
           throws Throwable {
-        TraceScope scope = tracer.newScope(method.getName());
-        try {
+        try (TraceScope scope = Tracer.this.newScope(method.getName());) {
           return method.invoke(instance, args);
         } catch (Throwable ex) {
           ex.printStackTrace();
           throw ex;
-        } finally {
-          scope.close();
         }
       }
     };
diff --git a/htrace-core4/src/test/java/org/apache/htrace/core/TraceCreator.java b/htrace-core4/src/test/java/org/apache/htrace/core/TraceCreator.java
index b843999..43fda9e 100644
--- a/htrace-core4/src/test/java/org/apache/htrace/core/TraceCreator.java
+++ b/htrace-core4/src/test/java/org/apache/htrace/core/TraceCreator.java
@@ -34,20 +34,14 @@
   }
 
   public void createSampleRpcTrace() {
-    TraceScope s = tracer.newScope(RPC_TRACE_ROOT);
-    try {
+    try (TraceScope s = tracer.newScope(RPC_TRACE_ROOT)) {
       pretendRpcSend();
-    } finally {
-      s.close();
     }
   }
 
   public void createSimpleTrace() {
-    TraceScope s = tracer.newScope(SIMPLE_TRACE_ROOT);
-    try {
+    try (TraceScope s = tracer.newScope(SIMPLE_TRACE_ROOT)) {
       importantWork1();
-    } finally {
-      s.close();
     }
   }
 
@@ -55,8 +49,7 @@
    * Creates the demo trace (will create different traces from call to call).
    */
   public void createThreadedTrace() {
-    TraceScope s = tracer.newScope(THREADED_TRACE_ROOT);
-    try {
+    try (TraceScope s = tracer.newScope(THREADED_TRACE_ROOT)) {
       Random r = ThreadLocalRandom.current();
       int numThreads = r.nextInt(4) + 1;
       Thread[] threads = new Thread[numThreads];
@@ -74,31 +67,23 @@
         }
       }
       importantWork1();
-    } finally {
-      s.close();
     }
   }
 
   private void importantWork1() {
-    TraceScope cur = tracer.newScope("important work 1");
-    try {
+    try (TraceScope cur = tracer.newScope("important work 1")) {
       Thread.sleep((long) (2000 * Math.random()));
       importantWork2();
     } catch (InterruptedException e) {
       Thread.currentThread().interrupt();
-    } finally {
-      cur.close();
     }
   }
 
   private void importantWork2() {
-    TraceScope cur = tracer.newScope("important work 2");
-    try {
+    try (TraceScope cur = tracer.newScope("important work 2")) {
       Thread.sleep((long) (2000 * Math.random()));
     } catch (InterruptedException e) {
       Thread.currentThread().interrupt();
-    } finally {
-      cur.close();
     }
   }
 
@@ -113,13 +98,10 @@
       } catch (InterruptedException ie) {
         Thread.currentThread().interrupt();
       } catch (ArithmeticException ae) {
-        TraceScope c = tracer.newScope("dealing with arithmetic exception.");
-        try {
+        try (TraceScope c = tracer.newScope("dealing with arithmetic exception.")) {
           Thread.sleep((long) (3000 * Math.random()));
         } catch (InterruptedException ie1) {
           Thread.currentThread().interrupt();
-        } finally {
-          c.close();
         }
       }
     }
@@ -131,11 +113,8 @@
   }
 
   public void pretendRpcReceiveWithTraceInfo(SpanId parentId) {
-    TraceScope s = tracer.newScope("received RPC", parentId);
-    try {
+    try (TraceScope s = tracer.newScope("received RPC", parentId)) {
       importantWork1();
-    } finally {
-      s.close();
     }
   }
 }
