diff --git a/AideDeJeu/AideDeJeu/AideDeJeu.csproj b/AideDeJeu/AideDeJeu/AideDeJeu.csproj
index c12df7c8..48e53de6 100644
--- a/AideDeJeu/AideDeJeu/AideDeJeu.csproj
+++ b/AideDeJeu/AideDeJeu/AideDeJeu.csproj
@@ -21,24 +21,14 @@
     
       Code
     
-    
-      MainPage.xaml
-    
-    
-      MonstersPage.xaml
-    
     
       MonsterDetailPage.xaml
     
     
       SpellDetailPage.xaml
     
-    
-      ItemsPage.xaml
-    
-    
-      Code
-      SpellsPage.xaml
+    
+      MainPage.xaml
     
   
 
diff --git a/AideDeJeu/AideDeJeu/App.xaml.cs b/AideDeJeu/AideDeJeu/App.xaml.cs
index 9c54e826..01a55a87 100644
--- a/AideDeJeu/AideDeJeu/App.xaml.cs
+++ b/AideDeJeu/AideDeJeu/App.xaml.cs
@@ -12,8 +12,7 @@ namespace AideDeJeu
 		{
 			InitializeComponent();
 
-            //MainPage = new ItemsPage();
-            MainPage = new NavigationPage(new ItemsPage());
+            MainPage = new NavigationPage(new MainPage());
         }
 
         protected override void OnStart ()
diff --git a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs
new file mode 100644
index 00000000..ea7e6b19
--- /dev/null
+++ b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs
@@ -0,0 +1,20 @@
+using AideDeJeuLib;
+using System.Collections.ObjectModel;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using Xamarin.Forms;
+
+namespace AideDeJeu.ViewModels
+{
+    public abstract class ItemsViewModel : BaseViewModel
+    {
+        public ItemsViewModel(ObservableCollection-  items)
+        {
+            Items = items;
+            LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommandAsync());
+        }
+        public ObservableCollection-  Items { get; protected set; }
+        public ICommand LoadItemsCommand { get; protected set; }
+        public abstract Task ExecuteLoadItemsCommandAsync();
+    }
+}
diff --git a/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs
index 2289848d..45172f30 100644
--- a/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs
+++ b/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs
@@ -1,14 +1,7 @@
-using System;
+using AideDeJeuLib;
 using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.Threading.Tasks;
-
 using Xamarin.Forms;
 
-using AideDeJeuLib.Spells;
-using System.Collections.Generic;
-using AideDeJeuLib;
-
 namespace AideDeJeu.ViewModels
 {
     public class MainViewModel : BaseViewModel
@@ -18,8 +11,8 @@ namespace AideDeJeu.ViewModels
             Spell,
             Monster,
         }
-        public SpellsViewModel Spells { get; set; } = new SpellsViewModel();
-        public MonstersViewModel Monsters { get; set; } = new MonstersViewModel();
+        public SpellsViewModel Spells { get; private set; }
+        public MonstersViewModel Monsters { get; private set; }
 
         private ItemType _ItemsType = ItemType.Spell;
         public ItemType ItemsType
@@ -31,53 +24,42 @@ namespace AideDeJeu.ViewModels
             set
             {
                 SetProperty(ref _ItemsType, value);
-                OnPropertyChanged(nameof(Items));
+                OnPropertyChanged(nameof(CurrentViewModel));
                 LoadItemsCommand.Execute(null);
             }
         }
 
-        public ObservableCollection-  Items
+        public ItemsViewModel CurrentViewModel
         {
             get
             {
-                if(ItemsType == ItemType.Spell)
+                if (ItemsType == ItemType.Spell)
                 {
-                    return Spells.Items;
+                    return Spells;
                 }
                 if (ItemsType == ItemType.Monster)
                 {
-                    return Monsters.Items;
+                    return Monsters;
                 }
                 return null;
             }
         }
+        public ObservableCollection-  Items { get; private set; } = new ObservableCollection- ();
 
-        public Command LoadItemsCommand { get; set; }
+        public Command LoadItemsCommand { get; private set; }
 
-        public Command SwitchToSpells { get; set; }
-        public Command SwitchToMonsters { get; set; }
-        public Command AboutCommand { get; set; }
+        public Command SwitchToSpells { get; private set; }
+        public Command SwitchToMonsters { get; private set; }
+        public Command AboutCommand { get; private set; }
 
         public MainViewModel(INavigation navigation)
         {
-            //Title = "Browse";
-            //Items = new ObservableCollection- ();
-            LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
+            Spells = new SpellsViewModel(Items);
+            Monsters = new MonstersViewModel(Items);
+            LoadItemsCommand = new Command(async () => await CurrentViewModel.ExecuteLoadItemsCommandAsync());
             SwitchToSpells = new Command(() => ItemsType = ItemType.Spell);
             SwitchToMonsters = new Command(() => ItemsType = ItemType.Monster);
             AboutCommand = new Command(async() => await navigation.PushAsync(new Views.AboutPage()));
         }
-
-        async Task ExecuteLoadItemsCommand()
-        {
-            if(ItemsType == ItemType.Spell)
-            {
-                await Spells.ExecuteLoadItemsCommand();
-            }
-            else if (ItemsType == ItemType.Monster)
-            {
-                await Monsters.ExecuteLoadItemsCommand();
-            }
-        }
     }
 }
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/ViewModels/MonstersViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/MonstersViewModel.cs
index 27643f8e..2af7a522 100644
--- a/AideDeJeu/AideDeJeu/ViewModels/MonstersViewModel.cs
+++ b/AideDeJeu/AideDeJeu/ViewModels/MonstersViewModel.cs
@@ -1,20 +1,15 @@
-using System;
+using AideDeJeuLib;
+using AideDeJeuLib.Monsters;
+using System;
+using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Diagnostics;
 using System.Threading.Tasks;
 
-using Xamarin.Forms;
-
-using System.Collections.Generic;
-using AideDeJeuLib.Monsters;
-using AideDeJeuLib;
-
 namespace AideDeJeu.ViewModels
 {
-    public class MonstersViewModel : BaseViewModel
+    public class MonstersViewModel : ItemsViewModel
     {
-        public ObservableCollection-  Items { get; set; }
-
         public List> Categories { get; set; } = new List>()
         {
             new KeyValuePair("", "Toutes" ),
@@ -186,15 +181,12 @@ namespace AideDeJeu.ViewModels
         }
 
 
-        public Command LoadItemsCommand { get; set; }
-
-        public MonstersViewModel()
+        public MonstersViewModel(ObservableCollection-  items)
+            : base(items)
         {
-            Items = new ObservableCollection- ();
-            LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
         }
 
-        public async Task ExecuteLoadItemsCommand()
+        public override async Task ExecuteLoadItemsCommandAsync()
         {
             if (IsBusy)
                 return;
@@ -204,10 +196,10 @@ namespace AideDeJeu.ViewModels
             try
             {
                 Items.Clear();
-                var items = await new MonstersScrappers().GetMonsters(category: Categories[Category].Key, type: Types[Type].Key, minPower: Powers[MinPower].Key, maxPower: Powers[MaxPower].Key, size: Sizes[Size].Key, legendary:Legendaries[Legendary].Key, source: Sources[Source].Key);
-                foreach (var item in items)
+                var monsters = await new MonstersScrappers().GetMonsters(category: Categories[Category].Key, type: Types[Type].Key, minPower: Powers[MinPower].Key, maxPower: Powers[MaxPower].Key, size: Sizes[Size].Key, legendary:Legendaries[Legendary].Key, source: Sources[Source].Key);
+                foreach (var monster in monsters)
                 {
-                    Items.Add(item);
+                    Items.Add(monster);
                 }
             }
             catch (Exception ex)
diff --git a/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs
index dc8300f2..963065a6 100644
--- a/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs
+++ b/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs
@@ -1,20 +1,15 @@
-using System;
+using AideDeJeuLib;
+using AideDeJeuLib.Spells;
+using System;
+using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Diagnostics;
 using System.Threading.Tasks;
 
-using Xamarin.Forms;
-
-using AideDeJeuLib.Spells;
-using System.Collections.Generic;
-using AideDeJeuLib;
-
 namespace AideDeJeu.ViewModels
 {
-    public class SpellsViewModel : BaseViewModel
+    public class SpellsViewModel : ItemsViewModel
     {
-        public ObservableCollection-  Items { get; set; }
-
         public List> Classes { get; set; } = new List>()
         {
             new KeyValuePair("", "Toutes" ),
@@ -157,23 +152,12 @@ namespace AideDeJeu.ViewModels
         }
 
 
-        public Command LoadItemsCommand { get; set; }
-
-        public SpellsViewModel()
+        public SpellsViewModel(ObservableCollection-  items)
+            : base(items)
         {
-            //Title = "Browse";
-            Items = new ObservableCollection- ();
-            LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
-
-            //MessagingCenter.Subscribe(this, "AddItem", async (obj, item) =>
-            //{
-            //    var _item = item as Item;
-            //    Items.Add(_item);
-            //    await DataStore.AddItemAsync(_item);
-            //});
         }
 
-        public async Task ExecuteLoadItemsCommand()
+        public override async Task ExecuteLoadItemsCommandAsync()
         {
             if (IsBusy)
                 return;
@@ -182,15 +166,6 @@ namespace AideDeJeu.ViewModels
 
             try
             {
-                //
-                //
-                //
-                //
-                //
-                //
-                //
-                //
-
                 Items.Clear();
                 var items = await SpellsScrappers.GetSpells(classe: Classes[Classe].Key, niveauMin: NiveauMin, niveauMax: NiveauMax, ecole: Ecoles[Ecole].Key, rituel: Rituels[Rituel].Key, source: Sources[Source].Key);
                 foreach (var item in items)
diff --git a/AideDeJeu/AideDeJeu/Views/ItemsPage.xaml b/AideDeJeu/AideDeJeu/Views/ItemsPage.xaml
deleted file mode 100644
index 955cf39f..00000000
--- a/AideDeJeu/AideDeJeu/Views/ItemsPage.xaml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-    
-        
-            
-                
-                    
-
-                        
-                        
-
-                        
-                        
-
-                        
-                        
-
-                        
-                        
-
-                        
-                        
-
-                        
-                        
-                    
-                
-            
-            
-                
-                    
-
-                        
-                        
-
-                        
-                        
-
-                        
-                            
-                                
-                                
-                            
-
-                            
-                                
-                                
-                            
-                        
-
-                        
-                        
-
-                        
-                        
-
-                        
-                        
-                    
-                
-            
-            
-            
-        
-    
-    
-        
-            
-            
-        
-    
-    
-        
-            
-                
-                
-                
-                
-                
-                
-            
-            
-                
-
-                
-                    
-                        
-                            
-                                
-                                    
-                                    
-                                
-                            
-                        
-                    
-                
-                
-                
-            
-        
-    
-
-
-
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/Views/ItemsPage.xaml.cs b/AideDeJeu/AideDeJeu/Views/ItemsPage.xaml.cs
deleted file mode 100644
index 2cb186d9..00000000
--- a/AideDeJeu/AideDeJeu/Views/ItemsPage.xaml.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using AideDeJeu.ViewModels;
-using AideDeJeuLib.Monsters;
-using AideDeJeuLib.Spells;
-using System;
-
-using Xamarin.Forms;
-using Xamarin.Forms.Xaml;
-
-namespace AideDeJeu.Views
-{
-    [XamlCompilation(XamlCompilationOptions.Compile)]
-	public partial class ItemsPage : MasterDetailPage //TabbedPage
-    {
-        MainViewModel viewModel;
-
-        public ItemsPage ()
-		{
-			InitializeComponent ();
-            BindingContext = viewModel = new MainViewModel(Navigation);
-        }
-
-        protected override bool OnBackButtonPressed()
-        {
-            IsPresented = !IsPresented;
-            return true;
-        }
-
-
-        async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
-        {
-            if (args.SelectedItem is Spell)
-            {
-                var item = args.SelectedItem as Spell;
-                if (item == null)
-                    return;
-
-                var vm = new SpellDetailViewModel(item);
-                vm.LoadItemCommand.Execute(null);
-                await Navigation.PushAsync(new SpellDetailPage(vm));
-            }
-            else if (args.SelectedItem is Monster)
-            {
-                var item = args.SelectedItem as Monster;
-                if (item == null)
-                    return;
-
-                var vm = new MonsterDetailViewModel(item);
-                vm.LoadItemCommand.Execute(null);
-                await Navigation.PushAsync(new MonsterDetailPage(vm));
-            }
-
-            // Manually deselect item.
-            ItemsListView.SelectedItem = null;
-        }
-
-        protected override void OnAppearing()
-        {
-            base.OnAppearing();
-
-            if (viewModel.Items.Count == 0)
-                viewModel.LoadItemsCommand.Execute(null);
-        }
-    }
-}
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/Views/MainPage.xaml b/AideDeJeu/AideDeJeu/Views/MainPage.xaml
index 0adc116d..a27c144d 100644
--- a/AideDeJeu/AideDeJeu/Views/MainPage.xaml
+++ b/AideDeJeu/AideDeJeu/Views/MainPage.xaml
@@ -2,22 +2,169 @@
 
+    
+        
+            
+                
+                    
+
+                        
+                        
+
+                        
+                        
+
+                        
+                        
+
+                        
+                        
+
+                        
+                        
+
+                        
+                        
+                    
+                
+            
+            
+                
+                    
+
+                        
+                        
+
+                        
+                        
+
+                        
+                            
+                                
+                                
+                            
+
+                            
+                                
+                                
+                            
+                        
+
+                        
+                        
+
+                        
+                        
+
+                        
+                        
+                    
+                
+            
+            
+            
+        
+    
     
         
+            
+            
         
     
     
-        
+        
             
+                
+                
+                
+                
+                
+                
             
             
-                
-                
-                
+                
+
+                
+                    
+                        
+                            
+                                
+                                    
+                                    
+                                
+                            
+                        
+                    
+                
+                
+                
             
         
     
 
+
+
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs b/AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs
index bd9dc246..687c34c5 100644
--- a/AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs
+++ b/AideDeJeu/AideDeJeu/Views/MainPage.xaml.cs
@@ -1,30 +1,64 @@
-using System;
+using AideDeJeu.ViewModels;
+using AideDeJeuLib.Monsters;
+using AideDeJeuLib.Spells;
+using System;
+
 using Xamarin.Forms;
 using Xamarin.Forms.Xaml;
 
 namespace AideDeJeu.Views
 {
-	[XamlCompilation(XamlCompilationOptions.Compile)]
+    [XamlCompilation(XamlCompilationOptions.Compile)]
 	public partial class MainPage : MasterDetailPage
     {
+        MainViewModel viewModel;
+
         public MainPage ()
 		{
 			InitializeComponent ();
+            BindingContext = viewModel = new MainViewModel(Navigation);
         }
 
-        async void OnSpellsClicked(object sender, EventArgs e)
+        protected override bool OnBackButtonPressed()
         {
-            await Navigation.PushAsync(new SpellsPage());
+            IsPresented = !IsPresented;
+            return true;
         }
 
-        async void OnMonstersClicked(object sender, EventArgs e)
+
+        async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
         {
-            await Navigation.PushAsync(new MonstersPage());
+            if (args.SelectedItem is Spell)
+            {
+                var item = args.SelectedItem as Spell;
+                if (item == null)
+                    return;
+
+                var vm = new SpellDetailViewModel(item);
+                vm.LoadItemCommand.Execute(null);
+                await Navigation.PushAsync(new SpellDetailPage(vm));
+            }
+            else if (args.SelectedItem is Monster)
+            {
+                var item = args.SelectedItem as Monster;
+                if (item == null)
+                    return;
+
+                var vm = new MonsterDetailViewModel(item);
+                vm.LoadItemCommand.Execute(null);
+                await Navigation.PushAsync(new MonsterDetailPage(vm));
+            }
+
+            // Manually deselect item.
+            ItemsListView.SelectedItem = null;
         }
 
-        async void OnAboutClicked(object sender, EventArgs e)
+        protected override void OnAppearing()
         {
-            await Navigation.PushAsync(new AboutPage());
+            base.OnAppearing();
+
+            if (viewModel.Items.Count == 0)
+                viewModel.LoadItemsCommand.Execute(null);
         }
     }
 }
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/Views/MonstersPage.xaml b/AideDeJeu/AideDeJeu/Views/MonstersPage.xaml
deleted file mode 100644
index 8903bebb..00000000
--- a/AideDeJeu/AideDeJeu/Views/MonstersPage.xaml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-    
-        
-            
-                
-
-                    
-                    
-
-                    
-                    
-
-                    
-                        
-                            
-                            
-                        
-
-                        
-                            
-                            
-                        
-                    
-
-                    
-                    
-
-                    
-                    
-
-                    
-                    
-                
-            
-        
-    
-    
-        
-            
-                
-                
-                
-            
-            
-                
-                    
-                        
-                            
-                                
-                                    
-                                    
-                                
-                            
-                        
-                    
-                
-                
-                
-            
-        
-    
-
-
-
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/Views/MonstersPage.xaml.cs b/AideDeJeu/AideDeJeu/Views/MonstersPage.xaml.cs
deleted file mode 100644
index 202082b2..00000000
--- a/AideDeJeu/AideDeJeu/Views/MonstersPage.xaml.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using AideDeJeu.ViewModels;
-using AideDeJeuLib.Monsters;
-using System;
-
-using Xamarin.Forms;
-using Xamarin.Forms.Xaml;
-
-namespace AideDeJeu.Views
-{
-    [XamlCompilation(XamlCompilationOptions.Compile)]
-	public partial class MonstersPage : MasterDetailPage //TabbedPage
-    {
-        MonstersViewModel viewModel;
-
-        public MonstersPage ()
-		{
-			InitializeComponent ();
-
-            BindingContext = viewModel = new MonstersViewModel();
-        }
-
-        async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
-        {
-            var item = args.SelectedItem as Monster;
-            if (item == null)
-                return;
-
-            var spellvm = new MonsterDetailViewModel(item);
-            spellvm.LoadItemCommand.Execute(null);
-            await Navigation.PushAsync(new MonsterDetailPage(spellvm));
-
-            // Manually deselect item.
-            ItemsListView.SelectedItem = null;
-        }
-
-        async void AddItem_Clicked(object sender, EventArgs e)
-        {
-            //await Navigation.PushModalAsync(new NavigationPage(new NewItemPage()));
-        }
-
-        protected override void OnAppearing()
-        {
-            base.OnAppearing();
-
-            if (viewModel.Items.Count == 0)
-                viewModel.LoadItemsCommand.Execute(null);
-        }
-    }
-}
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/Views/SpellsPage.xaml b/AideDeJeu/AideDeJeu/Views/SpellsPage.xaml
deleted file mode 100644
index 8385ae39..00000000
--- a/AideDeJeu/AideDeJeu/Views/SpellsPage.xaml
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-    
-        
-            
-                
-                    
-                    
-                    
-
-                    
-                    
-
-                    
-                    
-
-                    
-                    
-
-                    
-                    
-
-                    
-                    
-
-                    
-                    
-                
-            
-        
-    
-    
-        
-            
-                
-                
-                
-            
-            
-                
-                    
-                        
-                            
-                                
-                                    
-                                    
-                                
-                            
-                        
-                    
-                
-                
-                
-            
-        
-    
-
-
-
\ No newline at end of file
diff --git a/AideDeJeu/AideDeJeu/Views/SpellsPage.xaml.cs b/AideDeJeu/AideDeJeu/Views/SpellsPage.xaml.cs
deleted file mode 100644
index 6e9a810e..00000000
--- a/AideDeJeu/AideDeJeu/Views/SpellsPage.xaml.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using AideDeJeu.ViewModels;
-using AideDeJeuLib.Spells;
-using System;
-
-using Xamarin.Forms;
-using Xamarin.Forms.Xaml;
-
-namespace AideDeJeu.Views
-{
-    [XamlCompilation(XamlCompilationOptions.Compile)]
-	public partial class SpellsPage : MasterDetailPage //TabbedPage
-    {
-        SpellsViewModel viewModel;
-
-        public SpellsPage ()
-		{
-			InitializeComponent ();
-
-            BindingContext = viewModel = new SpellsViewModel();
-        }
-
-        async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
-        {
-            var item = args.SelectedItem as Spell;
-            if (item == null)
-                return;
-
-            var spellvm = new SpellDetailViewModel(item);
-            spellvm.LoadItemCommand.Execute(null);
-            await Navigation.PushAsync(new SpellDetailPage(spellvm));
-
-            // Manually deselect item.
-            ItemsListView.SelectedItem = null;
-        }
-
-        async void AddItem_Clicked(object sender, EventArgs e)
-        {
-            //await Navigation.PushModalAsync(new NavigationPage(new NewItemPage()));
-        }
-
-        protected override void OnAppearing()
-        {
-            base.OnAppearing();
-
-            if (viewModel.Items.Count == 0)
-                viewModel.LoadItemsCommand.Execute(null);
-        }
-    }
-}
\ No newline at end of file