diff --git a/treeviewer/inc/TSessionViewer.h b/treeviewer/inc/TSessionViewer.h
index 638b69e3821c144d060c284f0c0d8df955519be1..9f186e2ef799827a6bc1f5995ecd030df659bd90 100644
--- a/treeviewer/inc/TSessionViewer.h
+++ b/treeviewer/inc/TSessionViewer.h
@@ -1,4 +1,4 @@
-// @(#)root/treeviewer:$Name:  $:$Id: TSessionViewer.h,v 1.32 2006/06/02 23:32:40 rdm Exp $
+// @(#)root/treeviewer:$Name:  $:$Id: TSessionViewer.h,v 1.33 2006/07/04 10:16:52 rdm Exp $
 // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005
 
 /*************************************************************************
@@ -179,6 +179,7 @@ class TPackageDescription : public TObject {
 
 public:
    TString        fName;         // package name
+   TString        fPathName;     // full path name of package
    Int_t          fId;           // package id
    Bool_t         fUploaded;     // package has been uploaded
    Bool_t         fEnabled;      // package has been enabled
diff --git a/treeviewer/src/TSessionViewer.cxx b/treeviewer/src/TSessionViewer.cxx
index 8c34a7cbc2f8c3b057fc11a29decf85e97119ad6..724acffa0f0c6a763cde552d9b07f720e3e50909 100644
--- a/treeviewer/src/TSessionViewer.cxx
+++ b/treeviewer/src/TSessionViewer.cxx
@@ -1,4 +1,4 @@
-// @(#)root/treeviewer:$Name:  $:$Id: TSessionViewer.cxx,v 1.70 2006/07/05 07:33:36 brun Exp $
+// @(#)root/treeviewer:$Name:  $:$Id: TSessionViewer.cxx,v 1.71 2006/08/10 13:54:10 brun Exp $
 // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005
 
 /*************************************************************************
@@ -1447,7 +1447,7 @@ void TSessionFrame::UpdatePackages()
       else
          pict = fClient->GetPicture("package.xpm");
       TGIconLBEntry *entry = new TGIconLBEntry(fLBPackages->GetContainer(),
-                                    package->fId, package->fName, pict);
+                                    package->fId, package->fPathName, pict);
       fLBPackages->AddEntry(entry, new TGLayoutHints(kLHintsExpandX | kLHintsTop));
    }
    fLBPackages->Layout();
@@ -1473,7 +1473,7 @@ void TSessionFrame::OnUploadPackages()
          if (fViewer->GetActDesc()->fProof->UploadPackage(name.Data()) != 0)
             Error("Submit", "Upload package failed");
          else {
-            TObject *o = fViewer->GetActDesc()->fPackages->FindObject(name);
+            TObject *o = fViewer->GetActDesc()->fPackages->FindObject(gSystem->BaseName(name));
             if (!o) continue;
             TPackageDescription *package =
                dynamic_cast<TPackageDescription *>(o);
@@ -1484,6 +1484,7 @@ void TSessionFrame::OnUploadPackages()
             }
          }
       }
+      UpdatePackages();
    }
    fLBPackages->Layout();
    fClient->NeedRedraw(fLBPackages->GetContainer());
@@ -1501,11 +1502,12 @@ void TSessionFrame::OnEnablePackages()
       fViewer->GetActDesc()->fProof->IsValid()) {
       TObject *obj;
       TList selected;
+      fBtnEnable->SetState(kButtonDisabled);
       fLBPackages->GetSelectedEntries(&selected);
       TIter next(&selected);
       while ((obj = next())) {
          TString name = obj->GetTitle();
-         TObject *o = fViewer->GetActDesc()->fPackages->FindObject(name);
+         TObject *o = fViewer->GetActDesc()->fPackages->FindObject(gSystem->BaseName(name));
          if (!o) continue;
          TPackageDescription *package =
             dynamic_cast<TPackageDescription *>(o);
@@ -1527,6 +1529,8 @@ void TSessionFrame::OnEnablePackages()
             ((TGIconLBEntry *)obj)->SetPicture(fClient->GetPicture("package_add.xpm"));
          }
       }
+      UpdatePackages();
+      fBtnEnable->SetState(kButtonUp);
    }
    fLBPackages->Layout();
    fClient->NeedRedraw(fLBPackages->GetContainer());
@@ -1551,16 +1555,18 @@ void TSessionFrame::OnDisablePackages()
          if (fViewer->GetActDesc()->fProof->ClearPackage(name) != 0)
             Error("Submit", "Clear package failed");
          else {
-            TObject *o = fViewer->GetActDesc()->fPackages->FindObject(name);
+            TObject *o = fViewer->GetActDesc()->fPackages->FindObject(gSystem->BaseName(name));
             if (!o) continue;
             TPackageDescription *package =
                dynamic_cast<TPackageDescription *>(o);
             if (package) {
                package->fEnabled = kFALSE;
-               ((TGIconLBEntry *)obj)->SetPicture(fClient->GetPicture("package_delete.xpm"));
+               package->fUploaded = kFALSE;
+               ((TGIconLBEntry *)obj)->SetPicture(fClient->GetPicture("package.xpm"));
             }
          }
       }
+      UpdatePackages();
    }
    fLBPackages->Layout();
    fClient->NeedRedraw(fLBPackages->GetContainer());
@@ -1598,19 +1604,40 @@ void TSessionFrame::OnBtnAddClicked()
    if (fViewer->IsBusy())
       return;
    TGFileInfo fi;
+   TPackageDescription *package;
+   TGIconLBEntry *entry;
    fi.fFileTypes = pkgtypes;
    new TGFileDialog(fClient->GetRoot(), fViewer, kFDOpen, &fi);
-   if (!fi.fFilename) return;
-   TPackageDescription *package = new TPackageDescription;
-   package->fName = gSystem->UnixPathName(fi.fFilename);
-   package->fId   = fViewer->GetActDesc()->fPackages->GetEntries();
-   package->fUploaded = kFALSE;
-   package->fEnabled = kFALSE;
-   fViewer->GetActDesc()->fPackages->Add((TObject *)package);
-   TGIconLBEntry *entry = new TGIconLBEntry(fLBPackages->GetContainer(),
-                              package->fId, package->fName,
-                              fClient->GetPicture("package.xpm"));
-   fLBPackages->AddEntry(entry, new TGLayoutHints(kLHintsExpandX | kLHintsTop));
+   if (fi.fMultipleSelection && fi.fFileNamesList) {
+      TObjString *el;
+      TIter next(fi.fFileNamesList);
+      while ((el = (TObjString *) next())) {
+         package = new TPackageDescription;
+         package->fName = gSystem->BaseName(gSystem->UnixPathName(el->GetString()));
+         package->fPathName = gSystem->UnixPathName(el->GetString());
+         package->fId   = fViewer->GetActDesc()->fPackages->GetEntries();
+         package->fUploaded = kFALSE;
+         package->fEnabled = kFALSE;
+         fViewer->GetActDesc()->fPackages->Add((TObject *)package);
+         entry = new TGIconLBEntry(fLBPackages->GetContainer(),
+                                   package->fId, package->fPathName,
+                                   fClient->GetPicture("package.xpm"));
+         fLBPackages->AddEntry(entry, new TGLayoutHints(kLHintsExpandX | kLHintsTop));
+      }
+   }
+   else if (fi.fFilename) {
+      package = new TPackageDescription;
+      package->fName = gSystem->BaseName(gSystem->UnixPathName(fi.fFilename));
+      package->fPathName = gSystem->UnixPathName(fi.fFilename);
+      package->fId   = fViewer->GetActDesc()->fPackages->GetEntries();
+      package->fUploaded = kFALSE;
+      package->fEnabled = kFALSE;
+      fViewer->GetActDesc()->fPackages->Add((TObject *)package);
+      entry = new TGIconLBEntry(fLBPackages->GetContainer(),
+                                package->fId, package->fPathName,
+                                fClient->GetPicture("package.xpm"));
+      fLBPackages->AddEntry(entry, new TGLayoutHints(kLHintsExpandX | kLHintsTop));
+   }
    fLBPackages->Layout();
    fClient->NeedRedraw(fLBPackages->GetContainer());
 }
@@ -1638,7 +1665,7 @@ void TSessionFrame::OnBtnRemoveClicked()
       else
          pict = fClient->GetPicture("package.xpm");
       TGIconLBEntry *entry = new TGIconLBEntry(fLBPackages->GetContainer(),
-                                    package->fId, package->fName, pict);
+                                    package->fId, package->fPathName, pict);
       fLBPackages->AddEntry(entry, new TGLayoutHints(kLHintsExpandX | kLHintsTop));
    }
    fLBPackages->Layout();
@@ -1672,7 +1699,7 @@ void TSessionFrame::OnBtnUpClicked()
       else
          pict = fClient->GetPicture("package.xpm");
       TGIconLBEntry *entry = new TGIconLBEntry(fLBPackages->GetContainer(),
-                                    package->fId, package->fName, pict);
+                                    package->fId, package->fPathName, pict);
       fLBPackages->AddEntry(entry, new TGLayoutHints(kLHintsExpandX | kLHintsTop));
    }
    fLBPackages->Select(pos-1);
@@ -1708,7 +1735,7 @@ void TSessionFrame::OnBtnDownClicked()
       else
          pict = fClient->GetPicture("package.xpm");
       TGIconLBEntry *entry = new TGIconLBEntry(fLBPackages->GetContainer(),
-                                    package->fId, package->fName, pict);
+                                    package->fId, package->fPathName, pict);
       fLBPackages->AddEntry(entry, new TGLayoutHints(kLHintsExpandX | kLHintsTop));
    }
    fLBPackages->Select(pos+1);
@@ -4538,17 +4565,19 @@ void TSessionViewer::UpdateListOfPackages()
    if (fActDesc->fConnected && fActDesc->fAttached &&
        fActDesc->fProof && fActDesc->fProof->IsValid() &&
        fActDesc->fProof->IsParallel()) {
-      fActDesc->fPackages->Clear();
+      //fActDesc->fPackages->Clear();
       TList *packlist = fActDesc->fProof->GetListOfEnabledPackages();
       if(packlist) {
          TIter nextenabled(packlist);
          while ((packname = (TObjString *)nextenabled())) {
             package = new TPackageDescription;
             package->fName = packname->GetName();
+            package->fName += ".par";
+            package->fPathName = package->fName;
             package->fId   = fActDesc->fPackages->GetEntries();
             package->fUploaded = kTRUE;
             package->fEnabled = kTRUE;
-            if (!fActDesc->fPackages->FindObject(packname->GetName())) {
+            if (!fActDesc->fPackages->FindObject(package->fName)) {
                fActDesc->fPackages->Add((TObject *)package);
             }
          }
@@ -4559,10 +4588,12 @@ void TSessionViewer::UpdateListOfPackages()
          while ((packname = (TObjString *)nextpack())) {
             package = new TPackageDescription;
             package->fName = packname->GetName();
+            package->fName += ".par";
+            package->fPathName = package->fName;
             package->fId   = fActDesc->fPackages->GetEntries();
             package->fUploaded = kTRUE;
             package->fEnabled = kFALSE;
-            if (!fActDesc->fPackages->FindObject(packname->GetName())) {
+            if (!fActDesc->fPackages->FindObject(package->fName)) {
                fActDesc->fPackages->Add((TObject *)package);
             }
          }