diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index 21eeed1d276ff9a913105dfa6bf9455203064a2e..5e025f6a45b5e0a54ce836778985755d9c02e1da 100644
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -418,6 +418,7 @@ int LLToolBar::getRankFromPosition(S32 x, S32 y)
 	while (it_button != end_button)
 	{
 		button_rect = (*it_button)->getRect();
+		mDragCommand = (*it_button)->mId;
 		S32 point_x, point_y;
 		if (orientation == LLLayoutStack::HORIZONTAL)
 		{
@@ -436,7 +437,6 @@ int LLToolBar::getRankFromPosition(S32 x, S32 y)
 		{
 			break;
 		}
-		mDragCommand = (*it_button)->mId;
 		rank++;
 		++it_button;
 	}
@@ -480,6 +480,27 @@ int LLToolBar::getRankFromPosition(S32 x, S32 y)
 	return rank;
 }
 
+int LLToolBar::getRankFromPosition(const LLCommandId& id)
+{
+	if (!hasCommand(id))
+	{
+		return RANK_NONE;
+	}
+	int rank = 0;
+	std::list<LLToolBarButton*>::iterator it_button = mButtons.begin();
+	std::list<LLToolBarButton*>::iterator end_button = mButtons.end();
+	while (it_button != end_button)
+	{
+		if ((*it_button)->mId == id)
+		{
+			break;
+		}
+		rank++;
+		++it_button;
+	}
+	return rank;
+}
+
 void LLToolBar::updateLayoutAsNeeded()
 {
 	if (!mNeedsLayout) return;
@@ -826,10 +847,12 @@ BOOL LLToolBar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 		LLAssetType::EType type = inv_item->getType();
 		if (type == LLAssetType::AT_WIDGET)
 		{
+			LLCommandId dragged_command(inv_item->getUUID());
+			int orig_rank = getRankFromPosition(dragged_command);
 			mDragRank = getRankFromPosition(x, y);
 			// Don't DaD if we're dragging a command on itself
-			mDragAndDropTarget = (mDragCommand.uuid() != inv_item->getUUID());
-			//llinfos << "Merov debug : DaD, rank = " << mDragRank << ", hit uuid = " << mDragCommand.uuid() << ", dragged uui = " << inv_item->getUUID() << llendl; 
+			mDragAndDropTarget = ((mDragRank == orig_rank) || ((mDragRank-1) == orig_rank) ? false : true);
+			llinfos << "Merov debug : DaD, rank = " << mDragRank << ", hit uuid = " << mDragCommand.uuid() << ", dragged uui = " << inv_item->getUUID() << llendl; 
 			/* Do the following if you want to animate the button itself
 			LLCommandId dragged_command(inv_item->getUUID());
 			removeCommand(dragged_command);
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 7f8ae4f83930cf4a2347d27af83973587f380682..49750a9ac27a780ef44ef2d8461f6f3649ab9c27 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -157,6 +157,7 @@ class LLToolBar
 	void draw();
 	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	int  getRankFromPosition(S32 x, S32 y);	
+	int  getRankFromPosition(const LLCommandId& id);	
 	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 								   EDragAndDropType cargo_type,