diff --git a/app/MindWork AI Studio/Components/Blocks/ProviderSelection.razor b/app/MindWork AI Studio/Components/Blocks/ProviderSelection.razor
new file mode 100644
index 00000000..aebe6e5c
--- /dev/null
+++ b/app/MindWork AI Studio/Components/Blocks/ProviderSelection.razor	
@@ -0,0 +1,8 @@
+@using AIStudio.Settings
+
+<MudSelect T="Provider" Value="@this.ProviderSettings" ValueChanged="@this.SelectionChanged" Validation="@this.ValidateProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="Provider" Class="mb-3 rounded-lg" Variant="Variant.Outlined">
+    @foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
+    {
+        <MudSelectItem Value="@provider"/>
+    }
+</MudSelect>
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Components/Blocks/ProviderSelection.razor.cs b/app/MindWork AI Studio/Components/Blocks/ProviderSelection.razor.cs
new file mode 100644
index 00000000..96204d0c
--- /dev/null
+++ b/app/MindWork AI Studio/Components/Blocks/ProviderSelection.razor.cs	
@@ -0,0 +1,26 @@
+using AIStudio.Settings;
+
+using Microsoft.AspNetCore.Components;
+
+namespace AIStudio.Components.Blocks;
+
+public partial class ProviderSelection : ComponentBase
+{
+    [Parameter]
+    public Settings.Provider ProviderSettings { get; set; }
+    
+    [Parameter]
+    public EventCallback<Settings.Provider> ProviderSettingsChanged { get; set; }
+    
+    [Parameter]
+    public Func<Settings.Provider, string?> ValidateProvider { get; set; } = _ => null;
+    
+    [Inject]
+    protected SettingsManager SettingsManager { get; set; } = null!;
+    
+    private async Task SelectionChanged(Settings.Provider provider)
+    {
+        this.ProviderSettings = provider;
+        await this.ProviderSettingsChanged.InvokeAsync(provider);
+    }
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor b/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor
index 911b7ecc..5674dbf5 100644
--- a/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor	
+++ b/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor	
@@ -1,5 +1,4 @@
 @page "/assistant/agenda"
-@using AIStudio.Settings
 @using AIStudio.Tools
 @inherits AssistantBaseCore
 
@@ -50,12 +49,7 @@
 }
 
 <EnumSelection T="CommonLanguages" NameFunc="@(language => language.NameSelecting())" @bind-Value="@this.selectedTargetLanguage" ValidateSelection="@this.ValidateTargetLanguage" Icon="@Icons.Material.Filled.Translate" Label="Target language" AllowOther="@true" OtherValue="CommonLanguages.OTHER" @bind-OtherInput="@this.customTargetLanguage" ValidateOther="@this.ValidateCustomLanguage" LabelOther="Custom target language" />
-<MudSelect T="Provider" @bind-Value="@this.providerSettings" Validation="@this.ValidatingProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="Provider" Class="mb-3 rounded-lg" Variant="Variant.Outlined">
-    @foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
-    {
-        <MudSelectItem Value="@provider"/>
-    }
-</MudSelect>
+<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
 
 <MudButton Variant="Variant.Filled" Class="mb-3" OnClick="() => this.CreateAgenda()">
     Create agenda
diff --git a/app/MindWork AI Studio/Components/Pages/Chat.razor b/app/MindWork AI Studio/Components/Pages/Chat.razor
index a039e2c5..5a7f7fac 100644
--- a/app/MindWork AI Studio/Components/Pages/Chat.razor	
+++ b/app/MindWork AI Studio/Components/Pages/Chat.razor	
@@ -1,6 +1,5 @@
 @page "/chat"
 @using AIStudio.Chat
-@using AIStudio.Settings
 @using AIStudio.Settings.DataModel
 
 @inherits MSGComponentBase
@@ -16,13 +15,7 @@
     }
 </MudText>
 
-<MudSelect T="Provider" @bind-Value="@this.providerSettings" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="Provider" Class="mb-2 rounded-lg" Variant="Variant.Outlined">
-    @foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
-    {
-        <MudSelectItem Value="@provider"/>
-    }
-</MudSelect>
-
+<ProviderSelection @bind-ProviderSettings="@this.providerSettings"/>
 <InnerScrolling HeaderHeight="12.3em">
     <ChildContent>
         @if (this.chatThread is not null)
diff --git a/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor b/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor
index 9353d315..9d110343 100644
--- a/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor	
+++ b/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor	
@@ -1,5 +1,4 @@
 @page "/assistant/coding"
-@using AIStudio.Settings
 @inherits AssistantBaseCore
 
 <MudExpansionPanels Class="mb-3">
@@ -24,13 +23,7 @@
 </MudStack>
 
 <MudTextField T="string" @bind-Text="@this.questions" Validation="@this.ValidateQuestions" AdornmentIcon="@Icons.Material.Filled.QuestionMark" Adornment="Adornment.Start" Label="Your question(s)" Variant="Variant.Outlined" Lines="6" AutoGrow="@true" MaxLines="12" Class="mb-3" UserAttributes="@USER_INPUT_ATTRIBUTES"/>
-
-<MudSelect T="Provider" @bind-Value="@this.providerSettings" Validation="@this.ValidatingProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="Provider" Class="mb-3 rounded-lg" Variant="Variant.Outlined">
-    @foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
-    {
-        <MudSelectItem Value="@provider"/>
-    }
-</MudSelect>
+<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
 
 <MudButton Variant="Variant.Filled" Color="Color.Info" OnClick="() => this.GetSupport()" Class="mb-3">
     Get support
diff --git a/app/MindWork AI Studio/Components/Pages/IconFinder/AssistantIconFinder.razor b/app/MindWork AI Studio/Components/Pages/IconFinder/AssistantIconFinder.razor
index 02a59938..97dc5bc2 100644
--- a/app/MindWork AI Studio/Components/Pages/IconFinder/AssistantIconFinder.razor	
+++ b/app/MindWork AI Studio/Components/Pages/IconFinder/AssistantIconFinder.razor	
@@ -1,5 +1,4 @@
 @page "/assistant/icons"
-@using AIStudio.Settings
 @inherits AssistantBaseCore
 
 <MudTextField T="string" @bind-Text="@this.inputContext" Validation="@this.ValidatingContext" AdornmentIcon="@Icons.Material.Filled.Description" Adornment="Adornment.Start" Label="Your context" Variant="Variant.Outlined" Lines="3" AutoGrow="@true" MaxLines="12" Class="mb-3" UserAttributes="@USER_INPUT_ATTRIBUTES"/>
@@ -16,13 +15,7 @@
         <MudButton Href="@this.selectedIconSource.URL()" Target="_blank" Variant="Variant.Filled" Size="Size.Medium">Open website</MudButton>
     }
 </MudStack>
-
-<MudSelect T="Provider" @bind-Value="@this.providerSettings" Validation="@this.ValidatingProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="Provider" Class="mb-3 rounded-lg" Variant="Variant.Outlined">
-    @foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
-    {
-        <MudSelectItem Value="@provider"/>
-    }
-</MudSelect>
+<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
 
 <MudButton Variant="Variant.Filled" Class="mb-3" OnClick="() => this.FindIcon()">
     Find icon
diff --git a/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor b/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor
index 6ea597f4..98a7d4c0 100644
--- a/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor	
+++ b/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor	
@@ -1,5 +1,4 @@
 @page "/assistant/summarizer"
-@using AIStudio.Settings
 @using AIStudio.Tools
 @inherits AssistantBaseCore
 
@@ -11,12 +10,7 @@
 <MudTextField T="string" Disabled="@this.isAgentRunning" @bind-Text="@this.inputText" Validation="@this.ValidatingText" AdornmentIcon="@Icons.Material.Filled.DocumentScanner" Adornment="Adornment.Start" Label="Your input" Variant="Variant.Outlined" Lines="6" AutoGrow="@true" MaxLines="12" Class="mb-3" UserAttributes="@USER_INPUT_ATTRIBUTES"/>
 <EnumSelection T="CommonLanguages" NameFunc="@(language => language.Name())" @bind-Value="@this.selectedTargetLanguage" Icon="@Icons.Material.Filled.Translate" Label="Target language" AllowOther="@true" @bind-OtherInput="@this.customTargetLanguage" OtherValue="CommonLanguages.OTHER" LabelOther="Custom target language" ValidateOther="@this.ValidateCustomLanguage" />
 <EnumSelection T="Complexity" NameFunc="@(complexity => complexity.Name())" @bind-Value="@this.selectedComplexity" Icon="@Icons.Material.Filled.Layers" Label="Target complexity" AllowOther="@true" @bind-OtherInput="@this.expertInField" OtherValue="Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS" LabelOther="Your expertise" ValidateOther="@this.ValidateExpertInField" />
-<MudSelect T="Provider" Disabled="@this.isAgentRunning" @bind-Value="@this.providerSettings" Validation="@this.ValidatingProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="Provider" Class="mb-3 rounded-lg" Variant="Variant.Outlined">
-    @foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
-    {
-        <MudSelectItem Value="@provider"/>
-    }
-</MudSelect>
+<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
 
 <MudButton Variant="Variant.Filled" Class="mb-3" OnClick="() => this.SummarizeText()" Disabled="@this.isAgentRunning">
     Summarize
diff --git a/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor b/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor
index 0d30af06..7818c512 100644
--- a/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor	
+++ b/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor	
@@ -1,5 +1,4 @@
 @page "/assistant/translation"
-@using AIStudio.Settings
 @using AIStudio.Tools
 @inherits AssistantBaseCore
 
@@ -19,12 +18,7 @@ else
 }
 
 <EnumSelection T="CommonLanguages" NameFunc="@(language => language.NameSelecting())" @bind-Value="@this.selectedTargetLanguage" ValidateSelection="@this.ValidatingTargetLanguage" Icon="@Icons.Material.Filled.Translate" Label="Target language" AllowOther="@true" OtherValue="CommonLanguages.OTHER" @bind-OtherInput="@this.customTargetLanguage" ValidateOther="@this.ValidateCustomLanguage" LabelOther="Custom target language" />
-<MudSelect T="Provider" @bind-Value="@this.providerSettings" Disabled="@this.isAgentRunning" Validation="@this.ValidatingProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="Provider" Class="mb-3 rounded-lg" Variant="Variant.Outlined">
-    @foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
-    {
-        <MudSelectItem Value="@provider"/>
-    }
-</MudSelect>
+<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
 
 <MudButton Disabled="@this.isAgentRunning" Variant="Variant.Filled" Class="mb-3" OnClick="() => this.TranslateText(force: true)">
     Translate