diff --git a/examples/build.xml b/examples/build.xml
index af37ab6..49293e4 100644
--- a/examples/build.xml
+++ b/examples/build.xml
@@ -57,7 +57,7 @@
       <echo message="                                  testng-run "/>
       <java fork="yes"
             classpathref="run.cp"
-            classname="com.beust.testng.TestNG">
+            classname="org.testng.TestNG">
          <arg value="-d"/>
          <arg value="${test.output}"/>
          <arg value="${example.dir}/testng.xml"/>
diff --git a/examples/src/priority/Priority.java b/examples/src/priority/Priority.java
new file mode 100644
index 0000000..7a2224e
--- /dev/null
+++ b/examples/src/priority/Priority.java
@@ -0,0 +1,12 @@
+package priority;
+
+import static java.lang.annotation.ElementType.METHOD;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target({METHOD})
+public @interface Priority {
+  int value() default 0;
+}
diff --git a/examples/src/priority/PriorityInterceptor.java b/examples/src/priority/PriorityInterceptor.java
new file mode 100644
index 0000000..1b80847
--- /dev/null
+++ b/examples/src/priority/PriorityInterceptor.java
@@ -0,0 +1,38 @@
+package priority;
+
+import org.testng.IMethodInstance;
+import org.testng.IMethodInterceptor;
+import org.testng.ITestContext;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+public class PriorityInterceptor implements IMethodInterceptor {
+
+  public List<IMethodInstance> intercept(List<IMethodInstance> methods,
+      ITestContext context)
+  {
+    Comparator<IMethodInstance> comparator = new Comparator<IMethodInstance>() {
+      
+      private int getPriority(IMethodInstance mi) {
+        int result = 0;
+        Priority a1 = mi.getMethod().getMethod().getAnnotation(Priority.class);
+        if (a1 != null) {
+          result = a1.value();
+        }
+        return result;
+      }
+
+      public int compare(IMethodInstance m1, IMethodInstance m2) {
+        return getPriority(m1) - getPriority(m2);
+      }
+      
+    };
+    IMethodInstance[] array = methods.toArray(new IMethodInstance[methods.size()]);
+    Arrays.sort(array, comparator);
+
+    return Arrays.asList(array);
+  }
+
+}
diff --git a/examples/src/priority/PriorityTest.java b/examples/src/priority/PriorityTest.java
new file mode 100644
index 0000000..b85996a
--- /dev/null
+++ b/examples/src/priority/PriorityTest.java
@@ -0,0 +1,31 @@
+package priority;
+
+import org.testng.annotations.Test;
+
+import priority.Priority;
+
+public class PriorityTest {
+
+  @Test
+  public void b1() { System.out.println("Priority 0");}
+  
+  @Priority(-1)
+  @Test
+  public void a1()  { System.out.println("Priority -1");}
+  
+  @Priority(-1)
+  @Test
+  public void a2()  { System.out.println("Priority -1");}
+
+  @Priority(3)
+  @Test
+  public void c1()  { System.out.println("Priority 3");}
+
+  @Priority(3)
+  @Test
+  public void c2()  { System.out.println("Priority 3");}
+
+  @Priority(4)
+  @Test
+  public void d1()  { System.out.println("Priority 4");}
+}
diff --git a/examples/testng.xml b/examples/testng.xml
index fa49c3f..6765fc1 100644
--- a/examples/testng.xml
+++ b/examples/testng.xml
@@ -1,6 +1,10 @@
 <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
   
-<suite name="Example" >
+<suite name="Example" verbose="10">
+
+  <listeners>
+    <listener class-name="priority.PriorityInterceptor" />
+  </listeners>
   
   <test name="Simple example" >
 <!--
@@ -18,5 +22,11 @@
       <class name="example1.Test1" />
     </classes>
   </test>
+  
+  <test name="Method interceptor example" >
+    <classes>
+      <class name="priority.PriorityTest" />
+    </classes>
+  </test>
 
 </suite>
