diff --git a/core/vm/logger.go b/core/vm/logger.go
index 1a6e43ee30428329ede287a45cfbc4ad194ecf0f..11918143309eac23898501c43954315e224dcf84 100644
--- a/core/vm/logger.go
+++ b/core/vm/logger.go
@@ -100,6 +100,8 @@ type StructLogger struct {
 
 	logs          []StructLog
 	changedValues map[common.Address]Storage
+	output        []byte
+	err           error
 }
 
 // NewStructLogger returns a new logger
@@ -172,17 +174,19 @@ func (l *StructLogger) CaptureFault(env *EVM, pc uint64, op OpCode, gas, cost ui
 }
 
 func (l *StructLogger) CaptureEnd(output []byte, gasUsed uint64, t time.Duration, err error) error {
-	fmt.Printf("0x%x", output)
-	if err != nil {
-		fmt.Printf(" error: %v\n", err)
-	}
+	l.output = output
+	l.err = err
 	return nil
 }
 
-// StructLogs returns a list of captured log entries
-func (l *StructLogger) StructLogs() []StructLog {
-	return l.logs
-}
+// StructLogs returns the captured log entries.
+func (l *StructLogger) StructLogs() []StructLog { return l.logs }
+
+// Error returns the VM error captured by the trace.
+func (l *StructLogger) Error() error { return l.err }
+
+// Output returns the VM return value captured by the trace.
+func (l *StructLogger) Output() []byte { return l.output }
 
 // WriteTrace writes a formatted trace to the given writer
 func WriteTrace(writer io.Writer, logs []StructLog) {
diff --git a/tests/state_test.go b/tests/state_test.go
index 5a67b290db703512be5e027238448ebaa8ed6f25..100c776c1ae37bad023152a970b63064cc98827f 100644
--- a/tests/state_test.go
+++ b/tests/state_test.go
@@ -39,16 +39,12 @@ func TestState(t *testing.T) {
 	st.fails(`^stRevertTest/RevertPrefoundEmptyOOG\.json/EIP158`, "bug in test")
 	st.fails(`^stRevertTest/RevertPrecompiledTouch\.json/Byzantium`, "bug in test")
 	st.fails(`^stRevertTest/RevertPrefoundEmptyOOG\.json/Byzantium`, "bug in test")
-	st.fails(`^stRandom/randomStatetest645\.json/EIP150/.*`, "known bug #15119")
-	st.fails(`^stRandom/randomStatetest645\.json/Frontier/.*`, "known bug #15119")
-	st.fails(`^stRandom/randomStatetest645\.json/Homestead/.*`, "known bug #15119")
-	st.fails(`^stRandom/randomStatetest644\.json/EIP150/.*`, "known bug #15119")
-	st.fails(`^stRandom/randomStatetest644\.json/Frontier/.*`, "known bug #15119")
-	st.fails(`^stRandom/randomStatetest644\.json/Homestead/.*`, "known bug #15119")
+	st.fails(`^stRandom2/randomStatetest64[45]\.json/(EIP150|Frontier|Homestead)/.*`, "known bug #15119")
 	st.fails(`^stCreateTest/TransactionCollisionToEmpty\.json/EIP158/2`, "known bug ")
 	st.fails(`^stCreateTest/TransactionCollisionToEmpty\.json/EIP158/3`, "known bug ")
 	st.fails(`^stCreateTest/TransactionCollisionToEmpty\.json/Byzantium/2`, "known bug ")
 	st.fails(`^stCreateTest/TransactionCollisionToEmpty\.json/Byzantium/3`, "known bug ")
+
 	st.walk(t, stateTestDir, func(t *testing.T, name string, test *StateTest) {
 		for _, subtest := range test.Subtests() {
 			subtest := subtest
@@ -68,8 +64,7 @@ func TestState(t *testing.T) {
 }
 
 // Transactions with gasLimit above this value will not get a VM trace on failure.
-//const traceErrorLimit = 400000
-const traceErrorLimit = 0
+const traceErrorLimit = 400000
 
 func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) {
 	err := test(vm.Config{})
@@ -93,4 +88,6 @@ func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) {
 	} else {
 		t.Log("EVM operation log:\n" + buf.String())
 	}
+	t.Logf("EVM output: 0x%x", tracer.Output())
+	t.Logf("EVM error: %v", tracer.Error())
 }
diff --git a/tests/testdata b/tests/testdata
index 37f555fbc091fbf761aa6f02227132fb31f0681c..2bb0c3da3bbb15c528bcef2a7e5ac4bd73f81f87 160000
--- a/tests/testdata
+++ b/tests/testdata
@@ -1 +1 @@
-Subproject commit 37f555fbc091fbf761aa6f02227132fb31f0681c
+Subproject commit 2bb0c3da3bbb15c528bcef2a7e5ac4bd73f81f87