diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h
index 5d60c63810128446c02f4e6aeb0a1bf8ec185d7b..62d97007acde21edaa5b09ba3c0ec573c7472c45 100644
--- a/indra/llcommon/llevents.h
+++ b/indra/llcommon/llevents.h
@@ -582,11 +582,12 @@ class LL_COMMON_API LLEventPump: public LLEventTrackable
     /// Generate a distinct name for a listener -- see listen()
     static std::string inventName(const std::string& pfx="listener");
 
-private:
-    friend class LLEventPumps;
     /// flush queued events
     virtual void flush() {}
 
+private:
+    friend class LLEventPumps;
+
     virtual void reset();
 
 
@@ -675,12 +676,14 @@ class LL_COMMON_API LLEventMailDrop : public LLEventStream
     virtual ~LLEventMailDrop() {}
     
     /// Post an event to all listeners
-    virtual bool post(const LLSD& event);
+    virtual bool post(const LLSD& event) override;
     
+    /// Remove any history stored in the mail drop.
+    virtual void flush() override { mEventHistory.clear(); LLEventStream::flush(); };
 protected:
     virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&,
                                         const NameList& after,
-                                        const NameList& before);
+                                        const NameList& before) override;
 
 private:
     typedef std::list<LLSD> EventList;
@@ -703,7 +706,6 @@ class LL_COMMON_API LLEventQueue: public LLEventPump
     /// Post an event to all listeners
     virtual bool post(const LLSD& event);
 
-private:
     /// flush queued events
     virtual void flush();
 
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index b1ba725c2f74739fb5461365d1850eade26fb88d..955e7089f464d5b9ef43eab2dfcc9d58cb5e87d8 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -516,7 +516,6 @@ LLLayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
 {
 	if (!panelp) return NULL;
 
-	e_panel_list_t::const_iterator panel_it;
 	BOOST_FOREACH(LLLayoutPanel* p, mPanels)
 	{
 		if (p == panelp)
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 08daeb0f59d35e60bf137030c6e6882223f62e64..22bcbad7da211e8c054e6bcc17cf12bae798d023 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1865,7 +1865,6 @@ bool LLAppearanceMgr::getCanRemoveOutfit(const LLUUID& outfit_cat_id)
 	LLFindNonRemovableObjects filter_non_removable;
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
-	LLInventoryModel::item_array_t::const_iterator it;
 	gInventory.collectDescendentsIf(outfit_cat_id, cats, items, false, filter_non_removable);
 	if (!cats.empty() || !items.empty())
 	{
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 697db01d11848214e2fb2e53229791f483c81788..f184b22ccb7c7dbce08a15673ac90d57a7cbaa96 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -111,24 +111,9 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
     mMouseOutsideSlop = FALSE;
 	mMouseDownX = x;
 	mMouseDownY = y;
-	LLTimer pick_timer;
-	BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
-	mPick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
-	LLViewerObject *object = mPick.getObject();
-	LLViewerObject *parent = object ? object->getRootEdit() : NULL;
-	if (!object
-		|| object->isAttachment()
-		|| object->getClickAction() == CLICK_ACTION_DISABLED
-		|| (!useClickAction(mask, object, parent) && !object->flagHandleTouch() && !(parent && parent->flagHandleTouch())))
-	{
-		// Unless we are hovering over actionable visible object
-		// left mouse down always picks transparent (but see handleMouseUp).
-		// Also see LLToolPie::handleHover() - priorities are a bit different there.
-		// Todo: we need a more consistent set of rules to work with
-		mPick = gViewerWindow->pickImmediate(x, y, TRUE /*transparent*/, pick_rigged);
-	}
-	LL_INFOS() << "pick_rigged is " << (S32) pick_rigged << " pick time elapsed " << pick_timer.getElapsedTimeF32() << LL_ENDL;
 
+	//left mouse down always picks transparent (but see handleMouseUp)
+	mPick = gViewerWindow->pickImmediate(x, y, TRUE, FALSE);
 	mPick.mKeyMask = mask;
 
 	mMouseButtonDown = true;
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index cf40058c34a7debc6062e0c226ddd1a532b79c54..0d3f65502ad8986c13cc15e51025ead5875cea4a 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -1460,6 +1460,11 @@ bool LLVivoxVoiceClient::addAndJoinSession(const sessionStatePtr_t &nextSession)
 
     LLSD timeoutResult(LLSDMap("session", "timeout"));
 
+    // We are about to start a whole new session.  Anything that MIGHT still be in our 
+    // maildrop is going to be stale and cause us much wailing and gnashing of teeth.  
+    // Just flush it all out and start new.
+    voicePump.flush();
+
     // It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4
     // before continuing from this state.  They can happen in either order, and if I don't wait for both, things can get stuck.
     // For now, the SessionGroup.AddSession response handler sets mSessionHandle and the SessionStateChangeEvent handler transitions to stateSessionJoined.