178512  DnD: Error occurs when DnD a role who is responsible for a WP to CP/DP
diff --git a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/OBSDropCommand.java b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/OBSDropCommand.java
index 90b3914..92a53ff 100755
--- a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/OBSDropCommand.java
+++ b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/OBSDropCommand.java
@@ -65,7 +65,7 @@
 	private IConfigurator configrator;
 
 	private boolean newDuplicatesRemoved;
-
+	
 	public OBSDropCommand(Activity act, List roles) {
 		super(act, roles);
 		for (Iterator iter = dropElements.iterator(); iter.hasNext();) {
@@ -168,14 +168,25 @@
 					List selectedWorkProducts = new ArrayList(
 							wpToExistingDescriptorMap.keySet());
 					workProducts.removeAll(selectedWorkProducts);
+					
+					final List finalSelectedWps = new ArrayList();
 					if (!workProducts.isEmpty()) {
-						List selected = UserInteractionHelper
-								.selectWorkProducts(workProducts, role);
-						if (selected != null) {
-							selectedWorkProducts.addAll(selected);
-						}
+						final List finalWps = new ArrayList();
+						finalWps.addAll(workProducts);
+						final Role finalRole = role;
+						
+						UserInteractionHelper.runInUIThread(new Runnable() {
+							public void run() {
+								List selected = UserInteractionHelper
+										.selectWorkProducts(finalWps, finalRole);
+								if (selected != null) {
+									finalSelectedWps.addAll(selected);
+								}
+							}
+						});
 					}
 
+					selectedWorkProducts.addAll(finalSelectedWps);
 					if (!selectedWorkProducts.isEmpty()) {
 						HashSet allSelectedTasks = new HashSet();
 
@@ -250,10 +261,19 @@
 								}
 
 								if (!tasks.isEmpty()) {
+									final List finalTasks = tasks;
+									final WorkProduct finalWp = wp;
+									final List finalSelected = new ArrayList();
+									List selectedTasks = new ArrayList();
 									// show task selections dialog
-									List selectedTasks = UserInteractionHelper
-											.selectTasks(tasks, wp);
-
+									UserInteractionHelper.runInUIThread(new Runnable() {
+										public void run() {
+											List selected = UserInteractionHelper
+											.selectTasks(finalTasks, finalWp);
+											finalSelected.addAll(selected);
+										}
+									});
+									selectedTasks.addAll(finalSelected);
 									if ((selectedTasks != null)
 											&& ((!selectedTasks.isEmpty()))) {
 										allSelectedTasks.addAll(selectedTasks);
diff --git a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/PBSDropCommand.java b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/PBSDropCommand.java
index 3c951ee..8c7a333 100755
--- a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/PBSDropCommand.java
+++ b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/PBSDropCommand.java
@@ -215,10 +215,21 @@
 				List tasks = ProcessUtil.getTasksForWorkProduct(wp, config);
 
 				if ((tasks != null) && (tasks.size() > 0)) {
+					// show task selections dialog		
+					final List finalTasks = tasks;
+					final WorkProduct finalWp = wp;
+					final List finalSelected = new ArrayList();
+					List selectedTasks = new ArrayList();
 					// show task selections dialog
-					List selectedTasks = UserInteractionHelper.selectTasks(
-							tasks, wp);
-
+					UserInteractionHelper.runInUIThread(new Runnable() {
+						public void run() {
+							List selected = UserInteractionHelper.selectTasks(
+									finalTasks, finalWp);						
+							finalSelected.addAll(selected);
+						}
+					});
+					selectedTasks.addAll(finalSelected);
+					
 					// create task descriptors for this workproduct
 					if ((selectedTasks != null) && (!(selectedTasks.isEmpty()))) {
 						for (int j = 0; j < selectedTasks.size(); j++) {