diff --git a/src/qir/QIRLanguage.java b/src/qir/QIRLanguage.java
index 9f66510449ed2dbb7ec0e390274fc1ba90b73b86..dc1f24dd7754261750ac884ae7236dcf33591b0c 100644
--- a/src/qir/QIRLanguage.java
+++ b/src/qir/QIRLanguage.java
@@ -4,7 +4,6 @@ import com.oracle.truffle.api.TruffleLanguage;
 
 import qir.ast.QIRNode;
 import qir.runtime.QIRContext;
-import qir.util.QIRException;
 
 /**
  * QIR (Query Intermediate Language) is a language that aims to be able to encode any query from any
@@ -19,16 +18,6 @@ public final class QIRLanguage extends TruffleLanguage<QIRContext> {
         return new QIRContext(env);
     }
 
-    @Override
-    protected Object findExportedSymbol(final QIRContext context, final String globalName, final boolean onlyExplicit) {
-        throw new QIRException("Unimplemented");
-    }
-
-    @Override
-    protected Object getLanguageGlobal(final QIRContext context) {
-        return context;
-    }
-
     @Override
     protected boolean isObjectOfLanguage(final Object object) {
         return object instanceof QIRNode;
diff --git a/src/qir/ast/QIRNode.java b/src/qir/ast/QIRNode.java
index b1742136c7ba47eec0fa16857b972e7b04808db9..edf1bbd8cb874adc2c4d106e3aa6134956ae28aa 100644
--- a/src/qir/ast/QIRNode.java
+++ b/src/qir/ast/QIRNode.java
@@ -1,8 +1,11 @@
 package qir.ast;
 
+import com.oracle.truffle.api.dsl.ReportPolymorphism;
 import com.oracle.truffle.api.dsl.TypeSystemReference;
 import com.oracle.truffle.api.frame.VirtualFrame;
-import com.oracle.truffle.api.instrumentation.Instrumentable;
+import com.oracle.truffle.api.instrumentation.GenerateWrapper;
+import com.oracle.truffle.api.instrumentation.InstrumentableNode;
+import com.oracle.truffle.api.instrumentation.ProbeNode;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.UnexpectedResultException;
 import com.oracle.truffle.api.source.SourceSection;
@@ -21,8 +24,9 @@ import qir.util.QIRException;
  * A generic QIR node. Every QIR node must inherit from {@link QIRNode}.
  */
 @TypeSystemReference(QIRTypes.class)
-@Instrumentable(factory = QIRNodeWrapper.class)
-public abstract class QIRNode extends Node {
+@GenerateWrapper
+@ReportPolymorphism
+public abstract class QIRNode extends Node implements InstrumentableNode {
     /**
      * The location in the source code of the expression represented by this node.
      */
@@ -42,6 +46,16 @@ public abstract class QIRNode extends Node {
         return super.hashCode();
     }
 
+    @Override
+    public WrapperNode createWrapper(ProbeNode probe) {
+        return new QIRNodeWrapper(sourceSection, this, probe);
+    }
+
+    @Override
+    public final boolean isInstrumentable() {
+        return sourceSection != null;
+    }
+
     public abstract QIRNode executeGeneric(VirtualFrame frame);
 
     public final QIRNumber executeNumber(VirtualFrame frame) throws UnexpectedResultException {