Index: DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/global/GridBroker.java
===================================================================
--- DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/global/GridBroker.java	(revision 481)
+++ DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/global/GridBroker.java	(revision 1385)
@@ -48,4 +48,3 @@
 	}
 	
-
 }
Index: DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/global/GlobalManagementSystem.java
===================================================================
--- DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/global/GlobalManagementSystem.java	(revision 1362)
+++ DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/global/GlobalManagementSystem.java	(revision 1385)
@@ -63,5 +63,5 @@
 				TimerEvent event = new  TimerEvent();
 				SchedulingPlanInterface<?> decision =  schedulingPlugin.schedule(event, 
-						queues,  getJobRegistry(), getResourceManager(), moduleList);
+						queues,  jobRegistry, getResourceManager(), moduleList);
 				executeSchedulingPlan(decision);
 			}
@@ -99,5 +99,5 @@
 		schedulingPlugin.placeTasksInQueues(readyTasks, queues, getResourceManager(), moduleList);
 		SchedulingPlanInterface<?> decision = schedulingPlugin.schedule(
-				new TaskArrivedEvent(), queues, getJobRegistry(),  getResourceManager(), moduleList);
+				new TaskArrivedEvent(), queues, jobRegistry,  getResourceManager(), moduleList);
 		if (decision != null)
 			executeSchedulingPlan(decision);
Index: DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/local/LocalManagementSystem.java
===================================================================
--- DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/local/LocalManagementSystem.java	(revision 1379)
+++ DCWoRMS/branches/coolemall/src/schedframe/scheduling/policy/local/LocalManagementSystem.java	(revision 1385)
@@ -100,5 +100,5 @@
 				SchedulingEvent event = new SchedulingEvent(SchedulingEventType.TIMER);
 				SchedulingPlanInterface<?> decision =  schedulingPlugin.schedule(event, 
-						queues,  getJobRegistry(), getResourceManager(), moduleList);
+						queues, jobRegistry, getResourceManager(), moduleList);
 				executeSchedulingPlan(decision);
 			}
@@ -113,5 +113,5 @@
 					SchedulingEvent event = new StartTaskExecutionEvent(execTask.getJobId(), execTask.getId());
 					SchedulingPlanInterface<?> decision =  schedulingPlugin.schedule(event,
-							queues,  getJobRegistry(), getResourceManager(), moduleList);
+							queues, jobRegistry, getResourceManager(), moduleList);
 					executeSchedulingPlan(decision);
 				}
@@ -130,5 +130,5 @@
 					SchedulingEvent event = new TaskFinishedEvent(execTask.getJobId(), execTask.getId());
 					SchedulingPlanInterface<?> decision = schedulingPlugin.schedule(event,
-							queues, getJobRegistry(), getResourceManager(), moduleList);
+							queues, jobRegistry, getResourceManager(), moduleList);
 					executeSchedulingPlan(decision);
 				}
@@ -157,5 +157,5 @@
 				SchedulingEvent event = new TaskRequestedTimeExpiredEvent(execTask.getJobId(), execTask.getId());
 				SchedulingPlanInterface<?> decision = schedulingPlugin.schedule(event,
-						queues, getJobRegistry(), getResourceManager(), moduleList);
+						queues, jobRegistry, getResourceManager(), moduleList);
 				executeSchedulingPlan(decision);
 			}
@@ -169,5 +169,5 @@
 				SchedulingEvent event = new SchedulingEvent(SchedulingEventType.TASK_PAUSED);
 				SchedulingPlanInterface<?> decision = schedulingPlugin.schedule(event,
-						queues, getJobRegistry(), getResourceManager(), moduleList);
+						queues, jobRegistry, getResourceManager(), moduleList);
 				executeSchedulingPlan(decision);
 			}
@@ -182,10 +182,18 @@
 				SchedulingEvent event = new StartTaskExecutionEvent(ids[0], ids[1]);
 				SchedulingPlanInterface<?> decision = schedulingPlugin.schedule(event,
-						queues, getJobRegistry(), getResourceManager(), moduleList);
+						queues, jobRegistry, getResourceManager(), moduleList);
 				executeSchedulingPlan(decision);
 			}
 		}
 		break;
-			
+		
+		case DCWormsTags.TASK_MIGRATE:{
+			Object[] data = (Object[]) ev.get_data();
+			execTask = jobRegistry.getTask((String)data[0], (String)data[1]);
+			double migrationTime = execTimeEstimationPlugin.estimateMigrationTime(new StartTaskExecutionEvent((String)data[0], (String)data[1]), execTask, execTask.getAllocatedResources().getLast().getResourceUnits(), (Map<ResourceUnitName, ResourceUnit>)data[2]);
+			scheduler.sendInternal(migrationTime, DCWormsTags.TASK_MOVE, data);
+		}
+		break;
+		
 		case DCWormsTags.TASK_MOVE:{
 			Object[] data = (Object[]) ev.get_data();
@@ -195,5 +203,5 @@
 				SchedulingEvent event = new StartTaskExecutionEvent((String)data[0], (String)data[1]);
 				SchedulingPlanInterface<?> decision = schedulingPlugin.schedule(event,
-						queues, getJobRegistry(), getResourceManager(), moduleList);
+						queues, jobRegistry, getResourceManager(), moduleList);
 				executeSchedulingPlan(decision);
 			}
@@ -221,5 +229,5 @@
 				event.setSource(source);
 				SchedulingPlanInterface<?> decision = schedulingPlugin.schedule(event,
-						queues,  getJobRegistry(), getResourceManager(), moduleList);
+						queues, jobRegistry, getResourceManager(), moduleList);
 				executeSchedulingPlan(decision);
 			}
@@ -291,5 +299,5 @@
 			SchedulingEvent event = new SchedulingEvent(SchedulingEventType.TASK_FINISHED);
 			SchedulingPlanInterface<?> decision =  schedulingPlugin.schedule(event,
-					queues, getJobRegistry(), getResourceManager(), moduleList);
+					queues, jobRegistry, getResourceManager(), moduleList);
 			executeSchedulingPlan(decision);
 		}
Index: DCWoRMS/branches/coolemall/src/schedframe/scheduling/manager/tasks/AbstractJobRegistry.java
===================================================================
--- DCWoRMS/branches/coolemall/src/schedframe/scheduling/manager/tasks/AbstractJobRegistry.java	(revision 1374)
+++ DCWoRMS/branches/coolemall/src/schedframe/scheduling/manager/tasks/AbstractJobRegistry.java	(revision 1385)
@@ -20,5 +20,5 @@
 
 
-public abstract class AbstractJobRegistry /*extends ConcurrentHashMap<String, Job>*/ implements JobRegistry, Cloneable{
+public abstract class AbstractJobRegistry /*extends ConcurrentHashMap<String, Job>*/ implements JobRegistry{
 	
 	
@@ -135,5 +135,5 @@
 			data[1] = new String(taskId);
 			data[2] = choosenResources;
-			DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.TASK_MOVE, data);
+			DataCenterWorkloadSimulator.getEventManager().sendToAllSchedulers(0, DCWormsTags.TASK_MIGRATE, data);
 			return true;	
 		}
