Index: /extensions/PiwigoLib/PiwigoLib/Service/PwgSessionService.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/Service/PwgSessionService.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoLib/Service/PwgSessionService.cs	(revision 11922)
@@ -44,5 +44,4 @@
                     {
                         ConvertProxyResponseToDTO(response, ref PwgSession);
-                        PwgSession.IsConnected = true;
                     }
                 } catch (PwgProxyException ex)
@@ -64,14 +63,16 @@
         {
             PwgSession = null;
+            Boolean isConnected = false;
             try
             {
                 PwgSessionProxyResponse response = PwgSessionProxy.pwg_session_login(UserName, Password);
 
-                if (response.Retour != PwgBaseProxyReponseRetourEnum.Ok )
+                if (response.Retour != PwgBaseProxyReponseRetourEnum.Ok)
                 {
+
                     if (response.Erreur != null)
                     {
-                        throw new PwgServiceException("Login, the server has return the error.", 
-                            response.Erreur.Code, 
+                        throw new PwgServiceException("Login, the server has return the error.",
+                            response.Erreur.Code,
                             response.Erreur.Message);
                     }
@@ -81,4 +82,8 @@
                     }
                 }
+                else
+                {
+                    isConnected = true;
+                }
             }
             catch (PwgProxyException ex)
@@ -87,5 +92,7 @@
             }
 
-            return GetPwgSession();
+            PwgSession sess= GetPwgSession();
+            sess.IsConnected = isConnected;
+            return sess;
         }
 
@@ -93,4 +100,5 @@
         {
             PwgSession = null;
+            Boolean isConnected = false;
             try
             {
@@ -116,5 +124,7 @@
             }
 
-            return GetPwgSession();
+            PwgSession sess = GetPwgSession();
+            sess.IsConnected = isConnected;
+            return sess;
         }
         /// <summary>
Index: /extensions/PiwigoLib/PiwigoWpf/App.xaml
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/App.xaml	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/App.xaml	(revision 11922)
@@ -9,5 +9,5 @@
         <ObjectDataProvider x:Name="SessionODP" x:Key="Session" ObjectType="{x:Type piwigo:PwgSessionWPF}" />
         <ObjectDataProvider x:Name="CategoriesODP" x:Key="Categories" ObjectType="{x:Type piwigo:PwgCategoryListWPF}"/> <!--IsAsynchronous="True"-->
-
+        <!--IsAsynchronous="True"-->
         <ResourceDictionary  x:Key="VisualStyleApp" Source="VisualStyleApp.xaml"/>
     </Application.Resources>
Index: /extensions/PiwigoLib/PiwigoWpf/Command/AsyncCommand.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/AsyncCommand.cs	(revision 11922)
+++ /extensions/PiwigoLib/PiwigoWpf/Command/AsyncCommand.cs	(revision 11922)
@@ -0,0 +1,76 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Input;
+using Com.Piwigo.Wpf.Helper;
+using Com.Piwigo.Wpf.DTO;
+using System.ComponentModel;
+
+namespace Com.Piwigo.Wpf.Command
+{
+    public abstract class AsyncCommand : ICommand
+    {
+        public event EventHandler CanExecuteChanged;
+        public event EventHandler RunWorkerStarting;
+        public event RunWorkerCompletedEventHandler RunWorkerCompleted;
+
+        public abstract string Text { get; }
+        private bool _isRunning;
+        public bool IsRunning
+        {
+            get { return _isRunning; }
+            private set
+            {
+                _isRunning = value;
+                if (CanExecuteChanged != null)
+                    CanExecuteChanged(this, EventArgs.Empty);
+                PwgCmdEvents.OnCmdRunningChanged(this, new EventArgs<bool>(_isRunning));
+            }
+        }
+
+        protected void SendUiInfo(string strMessage)
+        {
+            PwgCmdEvents.OnCmdSendUiInfo(this, new EventArgs<string>(strMessage));
+        }
+
+        protected abstract void OnExecute(object parameter);
+
+        public void Execute(object parameter)
+        {
+            try
+            {
+                onRunWorkerStarting();
+
+                var worker = new BackgroundWorker();
+                worker.DoWork += ((sender, e) => OnExecute(e.Argument));
+                worker.RunWorkerCompleted += ((sender, e) => onRunWorkerCompleted(e));
+                worker.RunWorkerAsync(parameter);
+            }
+            catch (Exception ex)
+            {
+                onRunWorkerCompleted(new RunWorkerCompletedEventArgs(null, ex, true));
+            }
+        }
+
+        private void onRunWorkerStarting()
+        {
+            IsRunning = true;
+            if (RunWorkerStarting != null)
+                RunWorkerStarting(this, EventArgs.Empty);
+        }
+
+        private void onRunWorkerCompleted(RunWorkerCompletedEventArgs e)
+        {
+            IsRunning = false;
+            if (RunWorkerCompleted != null)
+                RunWorkerCompleted(this, e);
+        }
+
+        public virtual bool CanExecute(object parameter)
+        {
+            return !IsRunning;
+        }
+    }
+
+}
Index: tensions/PiwigoLib/PiwigoWpf/Command/PwgCmdBase.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdBase.cs	(revision 11921)
+++ 	(revision )
@@ -1,56 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Windows.Input;
-using Com.Piwigo.Wpf.Helper;
-using Com.Piwigo.Wpf.DTO;
-
-namespace Com.Piwigo.Wpf.Command
-{
-    public abstract class PwgCmdBase : ICommand
-    {
-       Boolean _isRunning;
-       public Boolean IsRunning {
-           get
-           {
-               return _isRunning;
-           }
-           set
-           {
-               _isRunning = value;
-           }
-       }
-
-       #region ICommand Membres
-        public virtual bool CanExecute(object parameter)
-        {
-             Boolean retVal = false;
-            if ( AppHelper.IsInDesignModeStatic == true)
-            {
-                retVal = false;
-            }
-            else
-            {
-                if (IsRunning)
-                {
-                    retVal = false;
-                }
-                else if (PwgModelManager.Instance.Session != null)
-                {
-                    retVal = !String.IsNullOrWhiteSpace(PwgModelManager.Instance.Session.ServeurName);                    
-                }
-            }
-            return (retVal);
-        }
-
-        public abstract void Execute(object parameter);
-       
-        public event EventHandler CanExecuteChanged
-        {
-           add { CommandManager.RequerySuggested += value; }
-           remove { CommandManager.RequerySuggested -= value; }
-        }
-       #endregion
-    }
-}
Index: /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdConnect.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdConnect.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdConnect.cs	(revision 11922)
@@ -10,15 +10,16 @@
 namespace Com.Piwigo.Wpf.Command
 {
-    public sealed class PwgCmdConnect : PwgCmdBase
+    public sealed class PwgCmdConnect : AsyncCommand
     {
-        public override void Execute(object parameter)
+        public override string Text { get { return "Connect to server"; } }
+
+        protected override void OnExecute(object parameter)
         {
             try {
-                IsRunning = true;
                 Uri uriServer = new Uri(PwgModelManager.Instance.Session.ServeurName);
-
+                SendUiInfo("Setting up server...");
                 PwgServiceProvider.Instance.PwgSetupService.Setup(null, null, uriServer);
                 PwgSessionWPF sesWPF = PwgModelManager.Instance.Session;
-                
+                SendUiInfo("Connecting to server...");
                 PwgSession sess = null;
                 if (String.IsNullOrWhiteSpace(sesWPF.UserName) && String.IsNullOrWhiteSpace(sesWPF.Password))
@@ -32,4 +33,5 @@
                 }
 
+                SendUiInfo("Retriving list of Category from server...");
                 PwgSessionWPFHelper.AddPwgSessionInfoToPwgSessionWPF(sess, ref sesWPF);
 
@@ -39,14 +41,14 @@
                 PwgCategoryListWPFHelper.ConvertPwgCategoryListToPwgCategoryListWPF(lstCat, ref lstCatWPF);
 
+                SendUiInfo("Setting up cache data ...");
                 ImageCacheManager.Instance.SetCurrentServer(uriServer.AbsoluteUri);
+            
 
-                IsRunning = false;
             }
             catch (PwgServiceException ex)
             {
-                Console.WriteLine("Erreur " + ex.NumeroErr + " " + ex.MessageErr);
-                Console.WriteLine(ex.Message);
+                SendUiInfo("Error " + ex.NumeroErr + " " + ex.MessageErr);
             }
-
+           
         }
     }
Index: /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdDisconnect.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdDisconnect.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdDisconnect.cs	(revision 11922)
@@ -10,17 +10,26 @@
 namespace Com.Piwigo.Wpf.Command
 {
-    public sealed class PwgCmdDisconnect : PwgCmdBase
+    public sealed class PwgCmdDisconnect : AsyncCommand
     {
-        public override void Execute(object parameter)
+        public override string Text { get { return "Disconnect from server"; } }
+
+        protected override void OnExecute(object parameter)
         {
             try {
-                IsRunning = true;
                 PwgSessionWPF sesWPF = PwgModelManager.Instance.Session;
                 
+                SendUiInfo("Logging out ...");
+
                 PwgSession sess = null;
                 sess = PwgServiceProvider.Instance.PwgSessionService.Logout();
 
                 PwgSessionWPFHelper.AddPwgSessionInfoToPwgSessionWPF(sess, ref sesWPF);
-                
+
+                SendUiInfo("Removing Image and Category ...");
+                if (PwgModelManager.Instance.ImageList != null)
+                {
+                    PwgModelManager.Instance.ImageList.Clear();
+                }
+
                 if (PwgModelManager.Instance.CategoryList != null)
                 {
@@ -28,14 +37,11 @@
                 }
 
+                SendUiInfo("Unset cache data ...");
                 ImageCacheManager.Instance.UnsetCurrentServer();
-
-                IsRunning = false;
             }
             catch (PwgServiceException ex)
             {
-                Console.WriteLine("Erreur " + ex.NumeroErr + " " + ex.MessageErr);
-                Console.WriteLine(ex.Message);
+                SendUiInfo("Error " + ex.NumeroErr + " " + ex.MessageErr);
             }
-
         }
     }
Index: /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdGetImageforCategory.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdGetImageforCategory.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdGetImageforCategory.cs	(revision 11922)
@@ -10,7 +10,9 @@
 namespace Com.Piwigo.Wpf.Command
 {
-    public sealed class PwgCmdGetImageforCategory : PwgCmdBase
+    public sealed class PwgCmdGetImageforCategory : AsyncCommand
     {
-        public override void Execute(object parameter)
+        public override string Text { get { return "Get images for a category"; } }
+
+        protected override void OnExecute(object parameter)
         {
             PwgCategoryWPF catParam;
@@ -19,24 +21,30 @@
             Int32 acount = 0;
 
-            try {
+            try
+            {
                 Uri uriServer = new Uri(PwgModelManager.Instance.Session.ServeurName);
                 if (parameter is PwgCategoryWPF)
                 {
+                    PwgImageListWPF lstImgWPF = PwgModelManager.Instance.ImageList;
+                    SendUiInfo("Removing image...");
+                    if (lstImgWPF != null)
+                    {
+                        lstImgWPF.Clear();
+                    }
+
                     catParam = (PwgCategoryWPF)parameter;
+                    SendUiInfo("Setting up cache data...");
                     ImageCacheManager.Instance.SetCurrentCategory(catParam.Id.ToString());
 
+                    SendUiInfo("Retriving images list from server...");
                     List<PwgImage> lstImg = PwgServiceProvider.Instance.PwgCategoriesService.GetListOfImagesFormCategory(catParam.Id, false, null, null, null, null, null, null, null, null, null, null, null, null, null, true, ref aPage, ref aPerPage, ref  acount);
-                    PwgImageListWPF lstImgWPF = PwgModelManager.Instance.ImageList;
-
+                    
                     PwgImageListWPFHelper.ConvertPwgImageListToPwgImageListWPF(lstImg, ref lstImgWPF);
                 }
-              
             }
             catch (PwgServiceException ex)
             {
-                Console.WriteLine("Erreur " + ex.NumeroErr + " " + ex.MessageErr);
-                Console.WriteLine(ex.Message);
+                SendUiInfo("Error " + ex.NumeroErr + " " + ex.MessageErr);
             }
-
         }
     }
Index: /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdProvider.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdProvider.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdProvider.cs	(revision 11922)
@@ -9,7 +9,7 @@
     public static class PwgCmdProvider
     {
-        public static PwgCmdBase GetByType<T>()
+        public static AsyncCommand GetByType<T>()
         {
-            PwgCmdBase objICom;
+            AsyncCommand objICom;
 
             switch (typeof(T).Name)
@@ -32,6 +32,6 @@
         }
 
-        public static PwgCmdBase _pwgCmdConnect;
-        public static PwgCmdBase PwgCmdConnect
+        public static AsyncCommand _pwgCmdConnect;
+        public static AsyncCommand PwgCmdConnect
         {
             get
@@ -45,6 +45,6 @@
         }
 
-        public static PwgCmdBase _pwgCmdDisconnect;
-        public static PwgCmdBase PwgCmdDisconnect
+        public static AsyncCommand _pwgCmdDisconnect;
+        public static AsyncCommand PwgCmdDisconnect
         {
             get
@@ -58,6 +58,6 @@
         }
 
-        public static PwgCmdBase _pwgCmdGetImageforCategory;
-        public static PwgCmdBase PwgCmdGetImageforCategory
+        public static AsyncCommand _pwgCmdGetImageforCategory;
+        public static AsyncCommand PwgCmdGetImageforCategory
         {
             get
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageWPF.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageWPF.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageWPF.cs	(revision 11922)
@@ -12,4 +12,19 @@
     public class PwgImageWPF : INotifyPropertyChanged
     {
+        private String _imgSource;
+        public String ImgSource
+        {
+            set { _imgSource = value; OnPropertyChanged("ImgSource"); }
+            get
+            {
+                if (_imgSource == null)
+                {
+                    _imgSource = Com.Piwigo.Wpf.Service.ImageCacheManager.Instance.GetImageFilename(this);
+                }
+                return _imgSource;
+            }
+        }
+        
+
         private Int32 _id;
         public  Int32 Id
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgModelManager.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgModelManager.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgModelManager.cs	(revision 11922)
@@ -27,4 +27,18 @@
         public class PwgModelManagerBase
         {
+            private AsyncObservableCollection<String> _lstMsgInfo = new AsyncObservableCollection<String>();
+            public AsyncObservableCollection<String> lstMsgInfo
+            {
+                set { _lstMsgInfo = value; OnPropertyChanged("lstMsgInfo"); }
+                get { return _lstMsgInfo; }
+            }
+
+            private Boolean _booCmdRunning = false;
+            public Boolean booCmdRunning
+            {
+                set { _booCmdRunning = value; OnPropertyChanged("booCmdRunning"); }
+                get { return _booCmdRunning; }
+            }
+
             private PwgImageListWPF _imageList;
             public PwgImageListWPF ImageList
@@ -49,5 +63,5 @@
 
             public event PropertyChangedEventHandler PropertyChanged;
-            private void OnPropertyChanged(String info)
+            internal void OnPropertyChanged(String info)
             {
                 if (PropertyChanged != null)
Index: /extensions/PiwigoLib/PiwigoWpf/Helper/AdvBooltoVisibilityConverter.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Helper/AdvBooltoVisibilityConverter.cs	(revision 11922)
+++ /extensions/PiwigoLib/PiwigoWpf/Helper/AdvBooltoVisibilityConverter.cs	(revision 11922)
@@ -0,0 +1,50 @@
+﻿using System;
+using System.Windows.Data;
+using System.Windows;
+
+namespace Com.Piwigo.Wpf.Helper
+{
+    public class AdvBooltoVisibilityConverter : IValueConverter
+    {
+        #region Constructors
+        /// <summary>
+        /// The default constructor
+        /// </summary>
+        public AdvBooltoVisibilityConverter() { }
+        #endregion
+ 
+        #region Properties
+        public bool Collapse { get; set; }
+        public bool Reverse { get; set; }
+        #endregion
+ 
+        #region IValueConverter Members
+        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
+        {
+            bool bValue = (bool)value;
+ 
+                if (bValue != Reverse)
+                {
+                    return Visibility.Visible;
+                }
+                else
+                {
+                    if (Collapse)
+                        return Visibility.Collapsed;
+                    else
+                        return Visibility.Hidden;
+                }
+        }
+ 
+        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
+        {
+            Visibility visibility = (Visibility)value;
+ 
+                if (visibility == Visibility.Visible)
+                    return !Reverse;
+                else
+                    return Reverse;
+        }
+        #endregion
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/Helper/AppHelper.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Helper/AppHelper.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/Helper/AppHelper.cs	(revision 11922)
@@ -52,7 +52,7 @@
         }
 
-        static public void ExecuteCommand<T>(object parameter) where T:  PwgCmdBase
+        static public void ExecuteCommand<T>(object parameter) where T : AsyncCommand
         {
-            PwgCmdBase cmd = PwgCmdProvider.GetByType<T>();
+            AsyncCommand cmd = PwgCmdProvider.GetByType<T>();
             if (cmd.CanExecute(parameter))
             {
Index: /extensions/PiwigoLib/PiwigoWpf/Helper/ImageUrlCachedConverter.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Helper/ImageUrlCachedConverter.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/Helper/ImageUrlCachedConverter.cs	(revision 11922)
@@ -21,9 +21,9 @@
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
         {
-            String src;
+            String src = string.Empty;
             if (value == null) return null;
             PwgImageWPF someObj = value as PwgImageWPF;
 
-            src = ImageCacheManager.Instance.GetImageFilename(someObj);
+            //src = ImageCacheManager.Instance.GetImageFilename(someObj);
 
             return src;
Index: /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml	(revision 11922)
@@ -7,12 +7,12 @@
         xmlns:pwgcmd="clr-namespace:Com.Piwigo.Wpf.Command"
         xmlns:pwgsrv="clr-namespace:Com.Piwigo.Wpf.Service"
+        xmlns:pwghlp="clr-namespace:Com.Piwigo.Wpf.Helper"
         Title="PiwigoWpf"
         WindowState="Maximized"
         MinHeight="600" MinWidth="800">
     <Window.Resources>
-        <ObjectDataProvider x:Key="listCat" IsAsynchronous="True" />
-        <ObjectDataProvider x:Key="listImg" IsAsynchronous="True" />
-
-              <!-- DATA TEMPLATES -->
+        <pwghlp:AdvBooltoVisibilityConverter x:Key="AdvBooltoVisibilityConverter"  Collapse="False" Reverse="False" />
+        <pwghlp:AdvBooltoVisibilityConverter x:Key="AdvBooltoVisibilityConverterReversal"  Collapse="False" Reverse="True" />
+               <!-- DATA TEMPLATES -->
 
         <DataTemplate DataType="{x:Type pwgdto:PwgImageWPF}">
@@ -21,8 +21,5 @@
                 <Image ToolTip="{Binding File}" >
                     <Image.Source>
-                        <PriorityBinding>
-                            <Binding IsAsync="True" Converter="{x:Static pwgsrv:ImageCacheManager.ImageUrlCachedConverter}"/>
-                            <Binding Source="pack://application:,,,/Pictures/Globe.png" />
-                    </PriorityBinding>
+                        <Binding Path="ImgSource" /> <!--Converter="{x:Static pwgsrv:ImageCacheManager.ImageUrlCachedConverter}"-->
                     </Image.Source>
                 </Image>
@@ -197,7 +194,13 @@
     <DockPanel Name="mainDockPanel"  Margin="5">
         <StackPanel Name="headerStackPanel" DockPanel.Dock="Top" Orientation="Vertical">
-            <Image Name="ImgPiwigoLogo" MinHeight="50" MinWidth="50"
+            <StackPanel Name="headerStackPanelLogo" Orientation="Horizontal" >
+                <Image Name="ImgPiwigoLogo" MinHeight="50" MinWidth="50"
                    Source="pack://application:,,,/Pictures/PiwigoLogo.png" 
                    ToolTip="www.piwigo.org" Stretch="None" HorizontalAlignment="Left" />
+                <Image Name="ImgGlobe" 
+                   Visibility="{Binding Source={x:Static pwgdto:PwgModelManager.Instance}, Path=booCmdRunning, Converter={StaticResource AdvBooltoVisibilityConverterReversal}}"
+                   Source="pack://application:,,,/Pictures/Globe.png" 
+                   ToolTip="www.piwigo.org" Stretch="None" HorizontalAlignment="Right"/>
+            </StackPanel>
             <StackPanel Name="connectStackPanel" Orientation="Horizontal" VerticalAlignment="Center"  Margin="5"
                         DataContext="{Binding Source={StaticResource Session}}">
@@ -210,9 +213,11 @@
                 <TextBox Height="23" Name="TbUrl" Width="300" Text="{Binding Path=ServeurName, Mode=TwoWay}"/>
                 <CheckBox Margin="2" VerticalAlignment="Center" IsChecked="{Binding Path=SaveSetting, Mode=TwoWay}">Save settings</CheckBox>
-                <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdConnect}" Visibility="{pwgui:SwitchBinding IsConnected, Hidden, Visible}">Conect</Button>
-                <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdDisconnect}" Visibility="{pwgui:SwitchBinding IsConnected, Visible, Hidden}">Disconect</Button>
+                <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdConnect}" Visibility="{Binding Path=IsConnected, Converter={StaticResource AdvBooltoVisibilityConverterReversal}}">Conect</Button>
+                <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdDisconnect}" Visibility="{Binding Path=IsConnected, Converter={StaticResource AdvBooltoVisibilityConverter}}">Disconect</Button>
             </StackPanel>
-           <ProgressBar IsIndeterminate="True" />          
         </StackPanel>
+        <ListView Name="listViewLogUiInfo"  DockPanel.Dock="Bottom" 
+                  DataContext="{Binding Source={x:Static pwgdto:PwgModelManager.Instance}, Path=lstMsgInfo}" 
+                  ItemsSource="{Binding }" />
 
         <ListView Name="listViewCategory"  DockPanel.Dock="Left" MinWidth="100" 
@@ -221,4 +226,5 @@
                   DataContext="{Binding Source={StaticResource Categories}}" 
                   ItemsSource="{Binding }" MouseDoubleClick="listViewCategory_MouseDoubleClick" />
+        
         <ListView Name="listViewImage"  DockPanel.Dock="Right"  MinWidth="500"
                   Style="{DynamicResource PhotoListStyle}"
Index: /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml.cs	(revision 11922)
@@ -25,6 +25,8 @@
         {
             InitializeComponent();
+            PwgCmdEvents.CmdRunningChanged += new PwgCmdEvents.CmdRunningChangedHandler(PwgCmdEventsConsumer.PwgCmdEvents_CmdRunningChanged);
+            PwgCmdEvents.CmdSendUiInfo += new PwgCmdEvents.CmdSendUiInfoHandler(PwgCmdEventsConsumer.PwgCmdEvents_CmdSendUiInfo);
         }
-
+        
         private void listViewCategory_MouseDoubleClick(object sender, MouseButtonEventArgs e)
         {
Index: /extensions/PiwigoLib/PiwigoWpf/PiwigoWpf.csproj
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/PiwigoWpf.csproj	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/PiwigoWpf.csproj	(revision 11922)
@@ -78,8 +78,10 @@
     </ApplicationDefinition>
     <Compile Include="Command\PwgCmdDisconnect.cs" />
+    <Compile Include="Command\PwgCmdEventsConsumer.cs" />
     <Compile Include="Command\PwgCmdGetImageforCategory.cs" />
     <Compile Include="Command\PwgCmdProvider.cs" />
     <Compile Include="Command\PwgCmdConnect.cs" />
-    <Compile Include="Command\PwgCmdBase.cs" />
+    <Compile Include="Command\AsyncCommand.cs" />
+    <Compile Include="Command\PwgCommandEvents.cs" />
     <Compile Include="DTO\Helper\PwgImageListWPFHelper.cs" />
     <Compile Include="DTO\Helper\PwgImageWPFHelper.cs" />
@@ -88,4 +90,5 @@
     <Compile Include="DTO\Helper\PwgSessionWPFHelper.cs" />
     <Compile Include="DTO\PwgModelManager.cs" />
+    <Compile Include="Helper\AdvBooltoVisibilityConverter.cs" />
     <Compile Include="Helper\AppHelper.cs" />
     <Compile Include="DTO\AsyncObservableCollection.cs" />
Index: /extensions/PiwigoLib/PiwigoWpf/Services/ImageCacheManager.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Services/ImageCacheManager.cs	(revision 11921)
+++ /extensions/PiwigoLib/PiwigoWpf/Services/ImageCacheManager.cs	(revision 11922)
@@ -39,4 +39,8 @@
         static ImageCacheManager()
         {
+            Int32 a, b;
+            ThreadPool.GetMaxThreads(out a, out b);
+            if (a>20) a = 20;
+            ThreadPool.SetMaxThreads(a, b);
         }
 
@@ -211,8 +215,8 @@
             public String GetImageFilename(PwgImageWPF aImageWPF)
                 {
-                    String retValue = String.Empty;
+                    String retImgSrc = String.Empty;
                     if (aImageWPF == null)
                     {
-                        return retValue;
+                        return retImgSrc;
                     }
 
@@ -223,4 +227,6 @@
                         if (!File.Exists(localFile))
                         {
+                            retImgSrc = GetDefaultImage();
+
                             ThreadPool.QueueUserWorkItem((WaitCallback)delegate
                             {
@@ -240,8 +246,12 @@
                                 image.Save(localFile);
 
+                                aImageWPF.ImgSource = localFile; 
                             });
-
-                            retValue = localFile;
-                        }
+                        }
+                        else
+                        {
+                            retImgSrc = localFile; 
+                        }
+                        return retImgSrc;
                     }
                     else
@@ -249,5 +259,4 @@
                         throw new ApplicationException("Current category not set before using image cache.");
                     }
-                    return retValue;
                 }
 
