diff --git a/src/GitHubExtension/Widgets/GitHubIssuesWidget.cs b/src/GitHubExtension/Widgets/GitHubIssuesWidget.cs
index 7d895e6..355012e 100644
--- a/src/GitHubExtension/Widgets/GitHubIssuesWidget.cs
+++ b/src/GitHubExtension/Widgets/GitHubIssuesWidget.cs
@@ -152,7 +152,7 @@ public override void LoadContentData()
 
             issuesData.Add("issues", issuesArray);
             issuesData.Add("selected_repo", repository?.FullName ?? string.Empty);
-            issuesData.Add("widgetTitle", WidgetTitle);
+            issuesData.Add("widgetTitle", GetActualTitle());
             issuesData.Add("is_loading_data", DataState == WidgetDataState.Unknown);
             issuesData.Add("issues_icon_data", _issuesIconData);
 
diff --git a/src/GitHubExtension/Widgets/GitHubPullsWidget.cs b/src/GitHubExtension/Widgets/GitHubPullsWidget.cs
index fad9d23..54691b8 100644
--- a/src/GitHubExtension/Widgets/GitHubPullsWidget.cs
+++ b/src/GitHubExtension/Widgets/GitHubPullsWidget.cs
@@ -123,7 +123,7 @@ public override void LoadContentData()
 
             pullsData.Add("pulls", pullsArray);
             pullsData.Add("selected_repo", repository?.FullName ?? string.Empty);
-            pullsData.Add("widgetTitle", WidgetTitle);
+            pullsData.Add("widgetTitle", GetActualTitle());
             pullsData.Add("is_loading_data", DataState == WidgetDataState.Unknown);
             pullsData.Add("pulls_icon_data", _pullsIconData);
 
diff --git a/src/GitHubExtension/Widgets/GitHubReleasesWidget.cs b/src/GitHubExtension/Widgets/GitHubReleasesWidget.cs
index 5b3d708..5358c8d 100644
--- a/src/GitHubExtension/Widgets/GitHubReleasesWidget.cs
+++ b/src/GitHubExtension/Widgets/GitHubReleasesWidget.cs
@@ -121,7 +121,7 @@ public override void LoadContentData()
 
             releasesData.Add("releases", releasesArray);
             releasesData.Add("selected_repo", repository?.FullName ?? string.Empty);
-            releasesData.Add("widgetTitle", WidgetTitle);
+            releasesData.Add("widgetTitle", GetActualTitle());
             releasesData.Add("is_loading_data", DataState == WidgetDataState.Unknown);
             releasesData.Add("releases_icon_data", _releasesIconData);
 
diff --git a/src/GitHubExtension/Widgets/GitHubRepositoryWidget.cs b/src/GitHubExtension/Widgets/GitHubRepositoryWidget.cs
index 067b36a..2311b42 100644
--- a/src/GitHubExtension/Widgets/GitHubRepositoryWidget.cs
+++ b/src/GitHubExtension/Widgets/GitHubRepositoryWidget.cs
@@ -5,7 +5,6 @@
 using System.Text.Json.Nodes;
 using GitHubExtension.Client;
 using GitHubExtension.DataManager;
-using GitHubExtension.Helpers;
 using GitHubExtension.Widgets.Enums;
 using Microsoft.Windows.Widgets.Providers;
 
@@ -15,6 +14,8 @@ public abstract class GitHubRepositoryWidget : GitHubWidget
 {
     protected string RepositoryUrl { get; set; } = string.Empty;
 
+    private string? _message;
+
     public GitHubRepositoryWidget()
         : base()
     {
@@ -66,14 +67,14 @@ public override void OnActionInvoked(WidgetActionInvokedArgs actionInvokedArgs)
 
         switch (verb)
         {
-            case WidgetAction.CheckUrl:
-                HandleCheckUrl(actionInvokedArgs);
-                break;
-
             case WidgetAction.Save:
-                UpdateTitle(JsonNode.Parse(actionInvokedArgs.Data));
-                base.OnActionInvoked(actionInvokedArgs);
-                CorrectUrl();
+                if (HandleCheckUrl(actionInvokedArgs))
+                {
+                    UpdateTitle(JsonNode.Parse(actionInvokedArgs.Data));
+                    base.OnActionInvoked(actionInvokedArgs);
+                    CorrectUrl();
+                }
+
                 break;
 
             default:
@@ -142,10 +143,11 @@ private void UpdateTitle(JsonNode? dataObj)
         }
 
         GetTitleFromDataObject(dataObj);
-        if (string.IsNullOrEmpty(WidgetTitle))
-        {
-            WidgetTitle = GetRepositoryFromUrl(RepositoryUrl).FullName;
-        }
+    }
+
+    protected string GetActualTitle()
+    {
+        return string.IsNullOrEmpty(WidgetTitle) ? GetRepositoryFromUrl(RepositoryUrl).FullName : WidgetTitle;
     }
 
     protected override void ResetWidgetInfoFromState()
@@ -207,7 +209,7 @@ public override void OnCustomizationRequested(WidgetCustomizationRequestedArgs c
         base.OnCustomizationRequested(customizationRequestedArgs);
     }
 
-    private void HandleCheckUrl(WidgetActionInvokedArgs args)
+    private bool HandleCheckUrl(WidgetActionInvokedArgs args)
     {
         // Set loading page while we fetch data from GitHub.
         Page = WidgetPageState.Loading;
@@ -223,7 +225,19 @@ private void HandleCheckUrl(WidgetActionInvokedArgs args)
             RepositoryUrl = dataObject["url"]?.GetValue<string>() ?? string.Empty;
             UpdateTitle(dataObject);
 
-            ConfigurationData = data;
+            var isGoodToSave = true;
+
+            try
+            {
+                GetRepositoryFromUrl(RepositoryUrl);
+                ConfigurationData = data;
+                _message = null;
+            }
+            catch (Exception ex)
+            {
+                _message = ex.Message;
+                isGoodToSave = false;
+            }
 
             var updateRequestOptions = new WidgetUpdateRequestOptions(Id)
             {
@@ -233,71 +247,29 @@ private void HandleCheckUrl(WidgetActionInvokedArgs args)
             };
 
             WidgetManager.GetDefault().UpdateWidget(updateRequestOptions);
+
+            // Already shown error message while updating above,
+            // can reset it to null here.
+            _message = null;
+            return isGoodToSave;
         }
+
+        UpdateWidget();
+
+        return false;
     }
 
     public string GetConfiguration(string dataUrl)
     {
         var configurationData = new JsonObject
         {
-            { "submitIcon", IconLoader.GetIconAsBase64("arrow.png") },
             { "widgetTitle", WidgetTitle },
+            { "url", dataUrl },
+            { "savedRepositoryUrl", SavedConfigurationData },
+            { "errorMessage", _message },
         };
 
-        if (dataUrl == string.Empty)
-        {
-            configurationData.Add("hasConfiguration", false);
-            var repositoryData = new JsonObject
-            {
-                { "url", string.Empty },
-            };
-
-            configurationData.Add("configuration", repositoryData);
-            configurationData.Add("savedRepositoryUrl", SavedConfigurationData);
-            configurationData.Add("saveEnabled", false);
-
-            return configurationData.ToString();
-        }
-        else
-        {
-            try
-            {
-                var repository = GetRepositoryFromUrl(dataUrl);
-                var repositoryData = new JsonObject
-                {
-                    { "name", repository.FullName },
-                    { "label", repository.Name },
-                    { "owner", repository.Owner.Login },
-                    { "milestone", string.Empty },
-                    { "project", repository.Description },
-                    { "url", RepositoryUrl },
-                    { "query", GetUnescapedIssueQuery() },
-                };
-
-                configurationData.Add("hasConfiguration", true);
-                configurationData.Add("configuration", repositoryData);
-                configurationData.Add("savedRepositoryUrl", SavedConfigurationData);
-                configurationData.Add("saveEnabled", true);
-            }
-            catch (Exception ex)
-            {
-                Log.Error(ex, $"Failed getting configuration information for input url: {dataUrl}");
-                configurationData.Add("hasConfiguration", false);
-
-                var repositoryData = new JsonObject
-                {
-                    { "url", RepositoryUrl },
-                };
-
-                configurationData.Add("errorMessage", ex.Message);
-                configurationData.Add("configuration", repositoryData);
-                configurationData.Add("saveEnabled", false);
-
-                return configurationData.ToString();
-            }
-
-            return configurationData.ToJsonString();
-        }
+        return configurationData.ToJsonString();
     }
 
     public override string GetData(WidgetPageState page)
diff --git a/src/GitHubExtension/Widgets/GitHubReviewWidget.cs b/src/GitHubExtension/Widgets/GitHubReviewWidget.cs
index 7a5c00a..c0420ac 100644
--- a/src/GitHubExtension/Widgets/GitHubReviewWidget.cs
+++ b/src/GitHubExtension/Widgets/GitHubReviewWidget.cs
@@ -1,70 +1,25 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-using System.Text.Json.Nodes;
-using GitHubExtension.DataManager;
 using GitHubExtension.Helpers;
-using Microsoft.Windows.Widgets.Providers;
 using Octokit;
 
 namespace GitHubExtension.Widgets;
 
 internal sealed class GitHubReviewWidget : GitHubUserWidget
 {
-    public GitHubReviewWidget()
-        : base()
-    {
-        // This widget does not allow customization, so this value will not change.
-        ShowCategory = SearchCategory.PullRequests;
-    }
-
-    public override void RequestContentData()
-    {
-        var request = new SearchIssuesRequest($"review-requested:{UserName}");
-
-        RequestContentData(request);
-    }
+    protected override string DefaultShowCategory => "PullRequests";
 
     protected override string GetTitleIconData()
     {
         return IconLoader.GetIconAsBase64("pulls.png");
     }
 
-    // This widget does not have "ShowCategory" as a variable.
-    // So we override this method to not care about this data.
-    protected override void ResetWidgetInfoFromState()
-    {
-        base.ResetWidgetInfoFromState();
-        ShowCategory = SearchCategory.PullRequests;
-    }
-
-    // Overriding this method because this widget only cares about the account.
-    public override void OnActionInvoked(WidgetActionInvokedArgs actionInvokedArgs)
+    public override void RequestContentData()
     {
-        if (actionInvokedArgs.Verb == "Submit")
-        {
-            var data = actionInvokedArgs.Data;
-            var dataObject = JsonNode.Parse(data);
-
-            if (dataObject == null)
-            {
-                return;
-            }
-
-            DeveloperLoginId = dataObject["account"]?.GetValue<string>() ?? string.Empty;
-            UpdateTitle(dataObject);
-
-            ConfigurationData = data;
+        var request = new SearchIssuesRequest($"review-requested:{UserName}");
 
-            // If we got here during the customization flow, we need to LoadContentData again
-            // so we can show the loading page rather than stale data.
-            LoadContentData();
-            UpdateActivityState();
-        }
-        else
-        {
-            base.OnActionInvoked(actionInvokedArgs);
-        }
+        RequestContentData(request);
     }
 
     public override string GetTemplatePath(WidgetPageState page)
diff --git a/src/GitHubExtension/Widgets/GitHubUserWidget.cs b/src/GitHubExtension/Widgets/GitHubUserWidget.cs
index ee8ee1b..27e98de 100644
--- a/src/GitHubExtension/Widgets/GitHubUserWidget.cs
+++ b/src/GitHubExtension/Widgets/GitHubUserWidget.cs
@@ -19,6 +19,8 @@ internal abstract class GitHubUserWidget : GitHubWidget
 
     protected SearchCategory ShowCategory { get; set; } = SearchCategory.Unknown;
 
+    protected virtual string DefaultShowCategory => string.Empty;
+
     private string _userName = string.Empty;
 
     protected string UserName
@@ -57,11 +59,17 @@ public override void OnWidgetContextChanged(WidgetContextChangedArgs contextChan
 
     protected void UpdateTitle(JsonNode dataObj)
     {
-        GetTitleFromDataObject(dataObj);
-        if (string.IsNullOrEmpty(WidgetTitle))
+        if (dataObj == null)
         {
-            WidgetTitle = UserName;
+            return;
         }
+
+        GetTitleFromDataObject(dataObj);
+    }
+
+    protected string GetActualTitle()
+    {
+        return string.IsNullOrEmpty(WidgetTitle) ? UserName : WidgetTitle;
     }
 
     protected override void ResetWidgetInfoFromState()
@@ -115,7 +123,7 @@ protected override void ResetWidgetInfoFromState()
         try
         {
             dataObject ??= JsonNode.Parse(ConfigurationData);
-            ShowCategory = EnumHelper.StringToSearchCategory(dataObject!["showCategory"]?.GetValue<string>() ?? string.Empty);
+            ShowCategory = EnumHelper.StringToSearchCategory(dataObject!["showCategory"]?.GetValue<string>() ?? DefaultShowCategory);
             DeveloperLoginId = dataObject!["account"]?.GetValue<string>() ?? string.Empty;
             UpdateTitle(dataObject);
         }
@@ -147,7 +155,7 @@ public override void OnActionInvoked(WidgetActionInvokedArgs actionInvokedArgs)
                 return;
             }
 
-            ShowCategory = EnumHelper.StringToSearchCategory(dataObject["showCategory"]?.GetValue<string>() ?? string.Empty);
+            ShowCategory = EnumHelper.StringToSearchCategory(dataObject["showCategory"]?.GetValue<string>() ?? DefaultShowCategory);
             DeveloperLoginId = dataObject["account"]?.GetValue<string>() ?? string.Empty;
             UpdateTitle(dataObject);
 
@@ -249,7 +257,7 @@ public override void LoadContentData()
             { "openCount", 0 },
             { "items", new JsonArray() },
             { "userName", UserName },
-            { "widgetTitle", WidgetTitle },
+            { "widgetTitle", GetActualTitle() },
             { "titleIconUrl", GetTitleIconData() },
             { "is_loading_data", true },
         };
@@ -302,7 +310,7 @@ public void LoadContentData(IEnumerable<Octokit.Issue> items)
             issuesData.Add("items", issuesArray);
             issuesData.Add("userName", UserName);
             issuesData.Add("titleIconUrl", GetTitleIconData());
-            issuesData.Add("widgetTitle", WidgetTitle);
+            issuesData.Add("widgetTitle", GetActualTitle());
 
             LastUpdated = DateTime.Now;
             ContentData = issuesData.ToJsonString();
diff --git a/src/GitHubExtension/Widgets/Templates/GitHubIssuesConfigurationTemplate.json b/src/GitHubExtension/Widgets/Templates/GitHubIssuesConfigurationTemplate.json
index 0333c9a..3359318 100644
--- a/src/GitHubExtension/Widgets/Templates/GitHubIssuesConfigurationTemplate.json
+++ b/src/GitHubExtension/Widgets/Templates/GitHubIssuesConfigurationTemplate.json
@@ -7,16 +7,10 @@
       "type": "Input.Text",
       "id": "url",
       "label": "%Widget_Template_Label/Url%",
-      "inlineAction": {
-        "type": "Action.Execute",
-        "tooltip": "%Widget_Template_Tooltip/Submit%",
-        "verb": "CheckUrl",
-        "iconUrl": "data:image/png;base64,${submitIcon}"
-      },
       "spacing": "Medium",
       "style": "Url",
       "placeholder": "%Widget_Template_Input/UrlPlaceholder%",
-      "value": "${$root.configuration.url}"
+      "value": "${url}"
     },
     {
       "type": "Input.Text",
@@ -115,8 +109,7 @@
                       "type": "Action.Execute",
                       "title": "%Widget_Template_Button/Save%",
                       "verb": "Save",
-                      "tooltip": "%Widget_Template_Tooltip/Save%",
-                      "isEnabled": "${$root.saveEnabled}"
+                      "tooltip": "%Widget_Template_Tooltip/Save%"
                     },
                     {
                       "type": "Action.Execute",
diff --git a/src/GitHubExtension/Widgets/Templates/GitHubPullsConfigurationTemplate.json b/src/GitHubExtension/Widgets/Templates/GitHubPullsConfigurationTemplate.json
index 881d356..15cbd87 100644
--- a/src/GitHubExtension/Widgets/Templates/GitHubPullsConfigurationTemplate.json
+++ b/src/GitHubExtension/Widgets/Templates/GitHubPullsConfigurationTemplate.json
@@ -7,16 +7,10 @@
       "type": "Input.Text",
       "id": "url",
       "label": "%Widget_Template_Label/Url%",
-      "inlineAction": {
-        "type": "Action.Execute",
-        "tooltip": "%Widget_Template_Tooltip/Submit%",
-        "verb": "CheckUrl",
-        "iconUrl": "data:image/png;base64,${submitIcon}"
-      },
       "spacing": "Medium",
       "style": "Url",
       "placeholder": "%Widget_Template_Input/UrlPlaceholder%",
-      "value": "${$root.configuration.url}"
+      "value": "${url}"
     },
     {
       "type": "Input.Text",
@@ -100,8 +94,7 @@
                       "type": "Action.Execute",
                       "title": "%Widget_Template_Button/Save%",
                       "verb": "Save",
-                      "tooltip": "%Widget_Template_Tooltip/Save%",
-                      "isEnabled": "${saveEnabled}"
+                      "tooltip": "%Widget_Template_Tooltip/Save%"
                     },
                     {
                       "type": "Action.Execute",
diff --git a/src/GitHubExtensionServer/Package-Can.appxmanifest b/src/GitHubExtensionServer/Package-Can.appxmanifest
index 6fb37d8..8f0db6d 100644
--- a/src/GitHubExtensionServer/Package-Can.appxmanifest
+++ b/src/GitHubExtensionServer/Package-Can.appxmanifest
@@ -212,7 +212,7 @@
                       </LightMode>
                     </ThemeResources>
                   </Definition>
-                  <Definition Id="GitHub_Reviews" DisplayName="ms-resource:Widget_DisplayName_Reviews" Description="ms-resource:Widget_Description_Reviews" IsCustomizable="false">
+                  <Definition Id="GitHub_Reviews" DisplayName="ms-resource:Widget_DisplayName_Reviews" Description="ms-resource:Widget_Description_Reviews" IsCustomizable="true">
                     <Capabilities>
                       <Capability>
                         <Size Name="medium" />
diff --git a/src/GitHubExtensionServer/Package-Dev.appxmanifest b/src/GitHubExtensionServer/Package-Dev.appxmanifest
index 92db75b..861e773 100644
--- a/src/GitHubExtensionServer/Package-Dev.appxmanifest
+++ b/src/GitHubExtensionServer/Package-Dev.appxmanifest
@@ -212,7 +212,7 @@
                       </LightMode>
                     </ThemeResources>
                   </Definition>
-                  <Definition Id="GitHub_Reviews" DisplayName="ms-resource:Widget_DisplayName_Reviews" Description="ms-resource:Widget_Description_Reviews" IsCustomizable="false">
+                  <Definition Id="GitHub_Reviews" DisplayName="ms-resource:Widget_DisplayName_Reviews" Description="ms-resource:Widget_Description_Reviews" IsCustomizable="true">
                     <Capabilities>
                       <Capability>
                         <Size Name="medium" />
diff --git a/src/GitHubExtensionServer/Package.appxmanifest b/src/GitHubExtensionServer/Package.appxmanifest
index 6895de1..785a937 100644
--- a/src/GitHubExtensionServer/Package.appxmanifest
+++ b/src/GitHubExtensionServer/Package.appxmanifest
@@ -212,7 +212,7 @@
                       </LightMode>
                     </ThemeResources>
                   </Definition>
-                  <Definition Id="GitHub_Reviews" DisplayName="ms-resource:Widget_DisplayName_Reviews" Description="ms-resource:Widget_Description_Reviews" IsCustomizable="false">
+                  <Definition Id="GitHub_Reviews" DisplayName="ms-resource:Widget_DisplayName_Reviews" Description="ms-resource:Widget_Description_Reviews" IsCustomizable="true">
                     <Capabilities>
                       <Capability>
                         <Size Name="medium" />