diff --git src/decoder_trace.cpp src/decoder_trace.cpp
index 4e2e5eb..ca8454a 100644
--- src/decoder_trace.cpp
+++ src/decoder_trace.cpp
@@ -137,10 +137,16 @@ int avr_op_BRBC::Trace() {
     traceOut << branch_opcodes_clear[INDEX_FROM_BITMASK(bitmask)]
              << " ->" << HexShort(offset * 2) << " ";
     unsigned int oldPC = core->PC;
+
     int ret = this->operator()();
     
-    string sym(core->Flash->GetSymbolAtAddress(core->PC * 2));
     if(oldPC + 1 != core->PC) {
+        // Acording to AVR definition the instruction jumps to
+        // PC += offset + 1. The operator() computes PC += offset
+        // The remaining PC++ is factorized out of the operator()
+        // in the AvrDevice::step(). Thus, to trace we must add 1
+        // to the current PC value.
+        string sym(core->Flash->GetSymbolAtAddress(core->PC + 1));
         traceOut << sym << " ";
         for(int len = sym.length(); len < 30; len++)
             traceOut << " ";
@@ -166,8 +172,8 @@ int avr_op_BRBS::Trace() {
     unsigned int oldPC = core->PC;
     int ret=this->operator()();
 
-    string sym(core->Flash->GetSymbolAtAddress(core->PC * 2));
     if(oldPC + 1 != core->PC) {
+        string sym(core->Flash->GetSymbolAtAddress(core->PC + 1));
         traceOut << sym << " ";
         for(int len = sym.length(); len < 30; len++)
             traceOut << " ";
diff --git src/hwstack.cpp src/hwstack.cpp
index eddd686..975d01b 100644
--- src/hwstack.cpp
+++ src/hwstack.cpp
@@ -28,6 +28,7 @@
 #include "avrmalloc.h"
 #include "flash.h"
 #include <assert.h>
+#include <cstdio>
 
 using namespace std;
 
