diff --git a/source/Commands/CommandObjectFrame.cpp b/source/Commands/CommandObjectFrame.cpp
index e79937b..1593488 100644
--- a/source/Commands/CommandObjectFrame.cpp
+++ b/source/Commands/CommandObjectFrame.cpp
@@ -316,7 +316,8 @@
                      uint32_t ptr_depth,
                      uint32_t curr_depth,
                      uint32_t max_depth,
-                     bool use_objc)
+                     bool use_objc,
+                     bool scope_already_checked)
     {
         if (valobj)
         {
@@ -338,12 +339,18 @@
             const char *name_cstr = root_valobj_name ? root_valobj_name : valobj->GetName().AsCString("");
             s.Printf ("%s = ", name_cstr);
 
+            if (!scope_already_checked && !valobj->IsInScope(exe_scope->CalculateStackFrame()))
+            {
+                s.PutCString("error: out of scope");
+                return;
+            }
+            
             const char *val_cstr = valobj->GetValueAsCString(exe_scope);
             const char *err_cstr = valobj->GetError().AsCString();
 
             if (err_cstr)
             {
-                s.Printf ("error: %s\n", err_cstr);
+                s.Printf ("error: %s", err_cstr);
             }
             else
             {
@@ -395,7 +402,8 @@
                                                  is_ptr_or_ref ? ptr_depth - 1 : ptr_depth,
                                                  curr_depth + 1,
                                                  max_depth,
-                                                 false);
+                                                 false,
+                                                 true);
                                 if (idx + 1 < num_children)
                                     s.PutChar(',');
                             }
@@ -476,13 +484,22 @@
 
                                     if (valobj_sp)
                                     {
-                                        DumpValueObject (result, exe_ctx.frame, valobj_sp.get(), name_cstr, m_options.ptr_depth, 0, m_options.max_depth, false);
-
                                         if (m_options.show_decl && var_sp->GetDeclaration ().GetFile())
                                         {
-                                            var_sp->GetDeclaration ().Dump (&s);
+                                            var_sp->GetDeclaration ().DumpStopContext (&s, false);
+                                            s.PutCString (": ");
                                         }
 
+                                        DumpValueObject (result, 
+                                                         exe_ctx.frame, 
+                                                         valobj_sp.get(), 
+                                                         name_cstr, 
+                                                         m_options.ptr_depth, 
+                                                         0, 
+                                                         m_options.max_depth, 
+                                                         m_options.use_objc, 
+                                                         false);
+                                        
                                         s.EOL();
                                     }
                                 }
@@ -646,7 +663,8 @@
                                                  ptr_depth, 
                                                  0, 
                                                  m_options.max_depth, 
-                                                 m_options.use_objc);
+                                                 m_options.use_objc,
+                                                 false);
 
                                 s.EOL();
                             }
@@ -701,7 +719,6 @@
                             
                             if (dump_variable)
                             {
-                                //DumpVariable (result, &exe_ctx, var_sp.get());
 
                                 // Use the variable object code to make sure we are
                                 // using the same APIs as the the public API will be
@@ -709,22 +726,27 @@
                                 valobj_sp = exe_ctx.frame->GetValueObjectForFrameVariable (var_sp);
                                 if (valobj_sp)
                                 {
-
-                                    if (m_options.show_decl && var_sp->GetDeclaration ().GetFile())
+                                    // When dumping all variables, don't print any variables
+                                    // that are not in scope to avoid extra unneeded output
+                                    if (valobj_sp->IsInScope (exe_ctx.frame))
                                     {
-                                        var_sp->GetDeclaration ().DumpStopContext (&s, false);
-                                        s.PutCString (": ");
-                                    }
-                                    DumpValueObject (result, 
-                                                     exe_ctx.frame, 
-                                                     valobj_sp.get(), 
-                                                     name_cstr, 
-                                                     m_options.ptr_depth, 
-                                                     0, 
-                                                     m_options.max_depth, 
-                                                     m_options.use_objc);
+                                        if (m_options.show_decl && var_sp->GetDeclaration ().GetFile())
+                                        {
+                                            var_sp->GetDeclaration ().DumpStopContext (&s, false);
+                                            s.PutCString (": ");
+                                        }
+                                        DumpValueObject (result, 
+                                                         exe_ctx.frame, 
+                                                         valobj_sp.get(), 
+                                                         name_cstr, 
+                                                         m_options.ptr_depth, 
+                                                         0, 
+                                                         m_options.max_depth, 
+                                                         m_options.use_objc,
+                                                         true);
 
-                                    s.EOL();
+                                        s.EOL();
+                                    }
                                 }
                             }
                         }
