Index: src/org/jruby/internal/runtime/methods/AbstractMethod.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/internal/runtime/methods/AbstractMethod.java,v
retrieving revision 1.3.2.2
diff -u -r1.3.2.2 AbstractMethod.java
--- src/org/jruby/internal/runtime/methods/AbstractMethod.java	14 Jan 2006 15:40:09 -0000	1.3.2.2
+++ src/org/jruby/internal/runtime/methods/AbstractMethod.java	4 Feb 2006 15:25:33 -0000
@@ -32,7 +32,6 @@
 import org.jruby.IRuby;
 import org.jruby.RubyModule;
 import org.jruby.runtime.CallType;
-import org.jruby.runtime.ThreadContext;
 import org.jruby.runtime.Visibility;
 import org.jruby.runtime.builtin.IRubyObject;
 
@@ -44,18 +43,6 @@
     protected AbstractMethod(RubyModule implementationClass, Visibility visibility) {
         super(implementationClass, visibility);
     }
-    
-    public void preMethod(IRuby runtime, RubyModule implementationClass, IRubyObject recv, String name, IRubyObject[] args, boolean noSuper) {
-        ThreadContext context = runtime.getCurrentContext();
-        
-        context.preMethodCall(implementationClass, recv, name, args, noSuper);
-    }
-    
-    public void postMethod(IRuby runtime) {
-        ThreadContext context = runtime.getCurrentContext();
-        
-        context.postMethodCall();
-    }
 
     public IRubyObject call(IRuby runtime, IRubyObject recv, String name, IRubyObject[] args, boolean noSuper) {
         preMethod(runtime, implementationClass, recv, name, args, noSuper);
Index: src/org/jruby/internal/runtime/methods/AliasMethod.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/internal/runtime/methods/AliasMethod.java,v
retrieving revision 1.6.2.2
diff -u -r1.6.2.2 AliasMethod.java
--- src/org/jruby/internal/runtime/methods/AliasMethod.java	14 Jan 2006 15:40:09 -0000	1.6.2.2
+++ src/org/jruby/internal/runtime/methods/AliasMethod.java	4 Feb 2006 15:25:33 -0000
@@ -31,6 +31,7 @@
 package org.jruby.internal.runtime.methods;
 
 import org.jruby.IRuby;
+import org.jruby.RubyModule;
 import org.jruby.runtime.ICallable;
 import org.jruby.runtime.builtin.IRubyObject;
 
@@ -57,14 +58,12 @@
     	return oldName;
     }
 
-    public IRubyObject call(IRuby runtime, IRubyObject recv, String name, IRubyObject[] args, boolean noSuper) {
+    public void preMethod(IRuby runtime, RubyModule implementationClass, IRubyObject recv, String name, IRubyObject[] args, boolean noSuper) {
         oldMethod.preMethod(runtime, implementationClass, recv, name, args, noSuper);
+    }
 
-        try {
-            return internalCall(runtime, recv, name, args, noSuper);
-        } finally {
-            oldMethod.postMethod(runtime);
-        }
+    public void postMethod(IRuby runtime) {
+        oldMethod.postMethod(runtime);
     }
 
     public IRubyObject internalCall(IRuby runtime, IRubyObject receiver, String name, IRubyObject[] args, boolean noSuper) {
Index: src/org/jruby/internal/runtime/methods/CallbackMethod.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/internal/runtime/methods/CallbackMethod.java,v
retrieving revision 1.7.2.2
diff -u -r1.7.2.2 CallbackMethod.java
--- src/org/jruby/internal/runtime/methods/CallbackMethod.java	14 Jan 2006 15:40:09 -0000	1.7.2.2
+++ src/org/jruby/internal/runtime/methods/CallbackMethod.java	4 Feb 2006 15:25:33 -0000
@@ -65,24 +65,18 @@
 
     public IRubyObject internalCall(IRuby runtime, IRubyObject receiver, String name, IRubyObject[] args, boolean noSuper) {
     	assert args != null;
-    	
-        //runtime.getCurrentContext().preReflectedMethodInternalCall();
         
-        try {
-            if (runtime.getTraceFunction() != null) {
-                ISourcePosition position = runtime.getCurrentContext().getPreviousFrame().getPosition();
-    
-                runtime.callTraceFunction("c-call", position, receiver, name, getImplementationClass()); // XXX
-                try {
-                    return callback.execute(receiver, args);
-                } finally {
-                    runtime.callTraceFunction("c-return", position, receiver, name, getImplementationClass()); // XXX
-                }
+        if (runtime.getTraceFunction() != null) {
+            ISourcePosition position = runtime.getCurrentContext().getPreviousFrame().getPosition();
+
+            runtime.callTraceFunction("c-call", position, receiver, name, getImplementationClass()); // XXX
+            try {
+                return callback.execute(receiver, args);
+            } finally {
+                runtime.callTraceFunction("c-return", position, receiver, name, getImplementationClass()); // XXX
             }
-    		return callback.execute(receiver, args);
-        } finally {
-            //runtime.getCurrentContext().postReflectedMethodInternalCall();
         }
+		return callback.execute(receiver, args);
     }
 
     public Callback getCallback() {
Index: src/org/jruby/internal/runtime/methods/MethodMethod.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/internal/runtime/methods/MethodMethod.java,v
retrieving revision 1.4.2.1
diff -u -r1.4.2.1 MethodMethod.java
--- src/org/jruby/internal/runtime/methods/MethodMethod.java	2 Jan 2006 07:07:13 -0000	1.4.2.1
+++ src/org/jruby/internal/runtime/methods/MethodMethod.java	4 Feb 2006 15:25:33 -0000
@@ -33,6 +33,7 @@
 import org.jruby.RubyModule;
 import org.jruby.RubyUnboundMethod;
 import org.jruby.runtime.ICallable;
+import org.jruby.runtime.ThreadContext;
 import org.jruby.runtime.Visibility;
 import org.jruby.runtime.builtin.IRubyObject;
 
@@ -51,6 +52,18 @@
         super(implementationClass, visibility);
         this.method = method;
     }
+    
+    public void preMethod(IRuby runtime, RubyModule implementationClass, IRubyObject recv, String name, IRubyObject[] args, boolean noSuper) {
+        ThreadContext context = runtime.getCurrentContext();
+        
+        context.preMethodCall(implementationClass, recv, name, args, noSuper);
+    }
+    
+    public void postMethod(IRuby runtime) {
+        ThreadContext context = runtime.getCurrentContext();
+        
+        context.postMethodCall();
+    }
 
     /**
      * @see org.jruby.runtime.ICallable#call(IRuby, IRubyObject, String, IRubyObject[], boolean)
Index: src/org/jruby/internal/runtime/methods/ProcMethod.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/internal/runtime/methods/ProcMethod.java,v
retrieving revision 1.3.2.1
diff -u -r1.3.2.1 ProcMethod.java
--- src/org/jruby/internal/runtime/methods/ProcMethod.java	2 Jan 2006 07:07:13 -0000	1.3.2.1
+++ src/org/jruby/internal/runtime/methods/ProcMethod.java	4 Feb 2006 15:25:33 -0000
@@ -33,6 +33,7 @@
 import org.jruby.RubyModule;
 import org.jruby.RubyProc;
 import org.jruby.runtime.ICallable;
+import org.jruby.runtime.ThreadContext;
 import org.jruby.runtime.Visibility;
 import org.jruby.runtime.builtin.IRubyObject;
 
@@ -51,6 +52,18 @@
         super(implementationClass, visibility);
         this.proc = proc;
     }
+    
+    public void preMethod(IRuby runtime, RubyModule implementationClass, IRubyObject recv, String name, IRubyObject[] args, boolean noSuper) {
+        ThreadContext context = runtime.getCurrentContext();
+        
+        context.preMethodCall(implementationClass, recv, name, args, noSuper);
+    }
+    
+    public void postMethod(IRuby runtime) {
+        ThreadContext context = runtime.getCurrentContext();
+        
+        context.postMethodCall();
+    }
 
     /**
      * @see org.jruby.runtime.ICallable#call(IRuby, IRubyObject, String, IRubyObject[], boolean)
Index: src/org/jruby/internal/runtime/methods/UndefinedMethod.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/internal/runtime/methods/UndefinedMethod.java,v
retrieving revision 1.3.2.1
diff -u -r1.3.2.1 UndefinedMethod.java
--- src/org/jruby/internal/runtime/methods/UndefinedMethod.java	2 Jan 2006 07:07:13 -0000	1.3.2.1
+++ src/org/jruby/internal/runtime/methods/UndefinedMethod.java	4 Feb 2006 15:25:33 -0000
@@ -29,6 +29,7 @@
 package org.jruby.internal.runtime.methods;
 
 import org.jruby.IRuby;
+import org.jruby.RubyModule;
 import org.jruby.runtime.ICallable;
 import org.jruby.runtime.Visibility;
 import org.jruby.runtime.builtin.IRubyObject;
@@ -47,6 +48,14 @@
     private UndefinedMethod(Visibility visibility) {
         super(null, visibility);
     }
+    
+    public void preMethod(IRuby runtime, RubyModule implementationClass, IRubyObject recv, String name, IRubyObject[] args, boolean noSuper) {
+        // do nothing
+    }
+    
+    public void postMethod(IRuby runtime) {
+        // do nothing
+    }
 
     public IRubyObject internalCall(IRuby runtime, IRubyObject receiver, String name, IRubyObject[] args, boolean noSuper) {
         throw new UnsupportedOperationException();
