diff --git a/core/base/src/TTask.cxx b/core/base/src/TTask.cxx
index a717fb2b9200e41c97859790bd805f8783791302..e85aeb83d3f0aced43f16a761cd2c35200dd7a7e 100644
--- a/core/base/src/TTask.cxx
+++ b/core/base/src/TTask.cxx
@@ -120,7 +120,12 @@ TTask& TTask::operator=(const TTask& tt)
    //assignment operator (PLEASE DO NOT USE THIS IS WRONG)	 
    if(this!=&tt) {	 
       TNamed::operator=(tt);	 
-      fTasks= 0; //<===tobe fixed	 
+      fTasks->Delete();
+      TIter next(tt.fTasks);
+      TTask *task;
+      while ((task = (TTask*)next())) {
+         fTasks->Add(new TTask(*task));
+      }      
       fOption=tt.fOption;	 
       fBreakin=tt.fBreakin;	 
       fBreakout=tt.fBreakout;	 
@@ -131,17 +136,26 @@ TTask& TTask::operator=(const TTask& tt)
 }	 
 
 //______________________________________________________________________________	 //______________________________________________________________________________
-TTask::TTask(const TTask &task) : TNamed(task)	 
+TTask::TTask(const TTask &other) : TNamed(other)	 
 {	 
-   // Copy constructors.	 (PLEASE DO NOT USE THIS IS WRONG) 
+   // Copy constructor. 
    fTasks = new TList();	 
+   TIter next(other.fTasks);
+   TTask *task;
+   while ((task = (TTask*)next())) {
+      fTasks->Add(new TTask(*task));
+   }
+   fOption = other.fOption;
+   fBreakin = other.fBreakin;
+   fBreakout = other.fBreakout;
+   fHasExecuted = kFALSE;
+   fActive = other.fActive;   
 }	 
 
 //______________________________________________________________________________
 TTask::~TTask()
 {
    // Delete a task and its subtasks.
-
    if (!fTasks) return;
    fTasks->Delete();
    delete fTasks;