diff --git a/plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/internal/services/remote/StackTraceProxy.java b/plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/internal/services/remote/StackTraceProxy.java
index 95286d4..6129d67 100644
--- a/plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/internal/services/remote/StackTraceProxy.java
+++ b/plugins/org.eclipse.tcf.core/src/org/eclipse/tcf/internal/services/remote/StackTraceProxy.java
@@ -11,7 +11,6 @@
 package org.eclipse.tcf.internal.services.remote;
 
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Map;
 
 import org.eclipse.tcf.core.Command;
@@ -31,7 +30,6 @@
         private final Map<String,Object> props;
 
         Context(Map<String,Object> props) {
-            if (props == null) props = new HashMap<String,Object>();
             this.props = props;
         }
 
@@ -144,7 +142,9 @@
         Collection<Map<String,Object>> c = (Collection<Map<String,Object>>)o;
         int n = 0;
         StackTraceContext[] ctx = new StackTraceContext[c.size()];
-        for (Map<String,Object> m : c) ctx[n++] = new Context(m);
+        for (Map<String,Object> m : c) {
+            ctx[n++] = m != null ? new Context(m) : null;
+        }
         return ctx;
     }
 
diff --git a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExecContext.java b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExecContext.java
index 2e9c126..15c29a6 100644
--- a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExecContext.java
+++ b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExecContext.java
@@ -358,7 +358,7 @@
                     set(null, state.getError(), null);
                     return true;
                 }
-                if (s.suspend_pc == null) {
+                if (!s.is_suspended || s.suspend_pc == null) {
                     set(null, null, null);
                     return true;
                 }
diff --git a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeStackFrame.java b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeStackFrame.java
index ba22967..ef89ece 100644
--- a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeStackFrame.java
+++ b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeStackFrame.java
@@ -149,12 +149,6 @@
         func_info = new TCFData<TCFFunctionRef>(channel) {
             @Override
             protected boolean startDataRetrieval() {
-                if (!address.validate(this)) return false;
-                BigInteger n = address.getData();
-                if (n == null) {
-                    set(null, address.getError(), null);
-                    return true;
-                }
                 if (!stack_trace_context.validate(this)) return false;
                 IStackTrace.StackTraceContext ctx = stack_trace_context.getData();
                 if (ctx == null) {
@@ -181,12 +175,17 @@
                         ref.context_id = mem_ctx_data.getID();
                         ref.address_size = mem_ctx_data.getAddressSize();
                     }
-                    ref.address = n;
                     ref.symbol_id = func_id;
                     set(null, null, ref);
                 }
                 else {
                     assert parent.getStackTrace().isValid();
+                    if (!address.validate(this)) return false;
+                    BigInteger n = address.getData();
+                    if (n == null) {
+                        set(null, address.getError(), null);
+                        return true;
+                    }
                     if (frame_no > 0) n = n.subtract(BigInteger.valueOf(1));
                     TCFDataCache<TCFFunctionRef> info_cache = mem_node.getFuncInfo(n);
                     if (info_cache == null) {
