From ae79dd753b0ab4a7faac70f6778e4fa65b000668 Mon Sep 17 00:00:00 2001
From: Jonas Gauffin <jonas.gauffin@coderr.io>
Date: Fri, 29 Sep 2023 07:39:26 +0200
Subject: [PATCH 1/2] Merge with commercial version

---
 ...erver.Plugins.AzureDevOps.SqlServer.csproj |   18 +
 .../DevOps/SettingsMapper.cs                  |   13 +
 .../DevOps/SettingsRepository.cs              |   42 +
 .../Coderr.Server.Api.Client.Tests.csproj     |    0
 .../TryTheClient.cs                           |    0
 .../Coderr.Server.Api.Client.csproj           |    4 +-
 ...IncludeNonPublicMembersContractResolver.cs |    0
 .../ServerApiClient.cs                        |    0
 .../StringBuilderExtensions.cs                |    0
 .../Coderr.Server.Api/AuthorizeAttribute.cs   |    0
 .../Coderr.Server.Api.csproj                  |    0
 .../Coderr.Server.Api/CommandAttribute.cs     |    0
 .../Accounts/Commands/DeclineInvitation.cs    |    0
 .../Core/Accounts/Commands/RegisterAccount.cs |    0
 .../Accounts/Commands/RequestPasswordReset.cs |    0
 .../Core/Accounts/Events/AccountActivated.cs  |    0
 .../Core/Accounts/Events/AccountRegistered.cs |    0
 .../Accounts/Events/InvitationAccepted.cs     |    0
 .../Core/Accounts/Events/LoginFailed.cs       |    0
 .../Core/Accounts/NamespaceDoc.cs             |    0
 .../Core/Accounts/Queries/AccountDTO.cs       |    0
 .../Core/Accounts/Queries/AccountStateDTO.cs  |    0
 .../Accounts/Queries/FindAccountByUserName.cs |    0
 .../Queries/FindAccountByUserNameResult.cs    |    0
 .../Core/Accounts/Queries/GetAccountById.cs   |    0
 .../Accounts/Queries/GetAccountEmailById.cs   |    0
 .../Core/Accounts/Queries/ListAccounts.cs     |    0
 .../Accounts/Queries/ListAccountsResult.cs    |    0
 .../Queries/ListAccountsResultItem.cs         |    0
 .../Coderr.Server.Api/Core/Accounts/ReadMe.md |    0
 .../Core/Accounts/RegisterSimple.cs           |    0
 .../Accounts/Requests/AcceptInvitation.cs     |    0
 .../Core/Accounts/Requests/ChangePassword.cs  |    0
 .../Core/Accounts/Requests/ReadMe.md          |    4 +-
 .../Requests/ValidateNewLoginReply.cs         |    0
 .../Core/ApiKeys/Commands/CreateApiKey.cs     |    0
 .../Core/ApiKeys/Commands/DeleteApiKey.cs     |    0
 .../Core/ApiKeys/Commands/EditApiKey.cs       |    0
 .../Core/ApiKeys/Events/ApiKeyCreated.cs      |    0
 .../Core/ApiKeys/Events/ApiKeyRemoved.cs      |    0
 .../Core/ApiKeys/Queries/GetApiKey.cs         |    0
 .../Core/ApiKeys/Queries/GetApiKeyResult.cs   |    0
 .../Queries/GetApiKeyResultApplication.cs     |    0
 .../Core/ApiKeys/Queries/ListApiKeys.cs       |    0
 .../Core/ApiKeys/Queries/ListApiKeysResult.cs |    0
 .../ApiKeys/Queries/ListApiKeysResultItem.cs  |    0
 .../Coderr.Server.Api/Core/ApiKeys/ReadMe.md  |   64 +-
 .../Core/Applications/ApplicationListItem.cs  |    0
 .../Applications/Commands/AddTeamMember.cs    |    0
 .../Commands/CreateApplication.cs             |    0
 .../Commands/CreateApplicationGroup.cs        |    0
 .../Commands/DeleteApplication.cs             |    0
 .../Commands/DeleteApplicationGroup.cs        |    0
 .../Commands/MapApplicationsToGroup.cs        |    0
 .../Commands/MuteStatisticsQuestion.cs        |    0
 .../Applications/Commands/RemoveTeamMember.cs |    0
 .../Commands/RenameApplicationGroup.cs        |    0
 .../Commands/SetApplicationGroup.cs           |    0
 .../Commands/UpdateApplication.cs             |    0
 .../Core/Applications/Commands/UpdateRoles.cs |    0
 .../Applications/Events/ApplicationCreated.cs |    0
 .../Applications/Events/ApplicationDeleted.cs |    0
 .../Events/ApplicationGroupCreated.cs         |    0
 .../Events/UserAddedToApplication.cs          |    0
 .../Events/UserInvitedToApplication.cs        |    0
 .../Core/Applications/NamespaceDoc.cs         |    0
 .../Queries/GetApplicationGroupMap.cs         |    0
 .../Queries/GetApplicationGroupMapResult.cs   |    0
 .../GetApplicationGroupMapResultItem.cs       |    0
 .../Queries/GetApplicationGroups.cs           |    0
 .../Queries/GetApplicationGroupsResult.cs     |    0
 .../Queries/GetApplicationGroupsResultItem.cs |    0
 .../Queries/GetApplicationIdByKey.cs          |    0
 .../Queries/GetApplicationIdByKeyResult.cs    |    0
 .../Queries/GetApplicationInfo.cs             |    0
 .../Queries/GetApplicationInfoResult.cs       |    0
 .../Queries/GetApplicationList.cs             |    0
 .../Queries/GetApplicationOverview.cs         |    0
 .../Queries/GetApplicationOverviewResult.cs   |    0
 .../Queries/GetApplicationTeam.cs             |    0
 .../Queries/GetApplicationTeamMember.cs       |    0
 .../Queries/GetApplicationTeamResult.cs       |    0
 .../GetApplicationTeamResultInvitation.cs     |    0
 .../Queries/OverviewStatSummary.cs            |    0
 .../Applications/Queries/PartitionOverview.cs |    0
 .../Core/Applications/ReadMe.md               |    4 +-
 .../Core/Applications/TypeOfApplication.cs    |    0
 .../Commands/CreateEnvironment.cs             |    0
 .../Environments/Commands/ResetEnvironment.cs |    0
 .../Commands/UpdateEnvironment.cs             |    0
 .../Environments/Queries/GetEnvironments.cs   |    0
 .../Queries/GetEnvironmentsResult.cs          |    0
 .../Queries/GetEnvironmentsResultItem.cs      |    0
 .../Core/Feedback/Commands/SubmitFeedback.cs  |    0
 .../Core/Feedback/NamespaceDoc.cs             |    0
 .../Coderr.Server.Api/Core/Feedback/ReadMe.md |    0
 .../Core/Incidents/Commands/AssignIncident.cs |    0
 .../Core/Incidents/Commands/CloseIncident.cs  |    0
 .../Core/Incidents/Commands/DeleteIncident.cs |    0
 .../Core/Incidents/Commands/IgnoreIncident.cs |    0
 .../Incidents/Commands/NotifySubscribers.cs   |    0
 .../Core/Incidents/Commands/ReOpenIncident.cs |    0
 .../Core/Incidents/Events/IncidentAssigned.cs |    0
 .../Core/Incidents/Events/IncidentClosed.cs   |    0
 .../Core/Incidents/Events/IncidentDeleted.cs  |    0
 .../Core/Incidents/Events/IncidentIgnored.cs  |    0
 .../Core/Incidents/IncidentOrder.cs           |    0
 .../Core/Incidents/IncidentSummaryDTO.cs      |    0
 .../Core/Incidents/NamespaceDoc.cs            |    0
 .../Core/Incidents/Queries/FindIncidents.cs   |    0
 .../Incidents/Queries/FindIncidentsResult.cs  |    0
 .../Queries/FindIncidentsResultItem.cs        |    0
 .../Core/Incidents/Queries/GetCollection.cs   |    0
 .../Incidents/Queries/GetCollectionResult.cs  |    0
 .../Queries/GetCollectionResultItem.cs        |    0
 .../Core/Incidents/Queries/GetIncident.cs     |    0
 .../Queries/GetIncidentForClosePage.cs        |    0
 .../Queries/GetIncidentForClosePageResult.cs  |    0
 .../Incidents/Queries/GetIncidentResult.cs    |    0
 .../Queries/GetIncidentStatistics.cs          |    0
 .../Queries/GetIncidentStatisticsResult.cs    |    0
 .../Queries/HighlightedContextData.cs         |    0
 .../Core/Incidents/Queries/QuickFact.cs       |    0
 .../Core/Incidents/Queries/RelatedIncident.cs |    0
 .../Core/Incidents/Queries/ReportDay.cs       |    0
 .../Queries/SuggestedIncidentSolution.cs      |    0
 .../Core/Incidents/ReadMe.md                  |    0
 .../Invitations/Commands/DeleteInvitation.cs  |    0
 .../Core/Invitations/Commands/InviteUser.cs   |    0
 .../Invitations/Events/InvitationDeleted.cs   |    0
 .../Core/Invitations/NamespaceDoc.cs          |    0
 .../Invitations/Queries/GetInvitationByKey.cs |    0
 .../Queries/GetInvitationByKeyResult.cs       |    0
 .../Core/Invitations/ReadMe.md                |    0
 .../Core/Messaging/Commands/NamespaceDoc.cs   |    0
 .../Core/Messaging/Commands}/ReadMe.md        |   14 +-
 .../Core/Messaging/Commands/SendEmail.cs      |    0
 .../Core/Messaging/Commands/SendSms.cs        |    0
 .../Messaging/Commands/SendTemplateEmail.cs   |    0
 .../Core/Messaging/EmailAddress.cs            |    0
 .../Core/Messaging/EmailMessage.cs            |    0
 .../Core/Messaging/EmailResource.cs           |    0
 .../Core/Messaging/NamespaceDoc.cs            |    0
 .../Core/Messaging/ReadMe.md                  |    0
 .../Coderr.Server.Api/Core/NamespaceDoc.cs    |    0
 .../Core/Notifications/AddNotification.cs     |    0
 .../Coderr.Server.Api/Core/ReadMe.md          |    8 +-
 .../Core/Reports/ContextCollectionDTO.cs      |    0
 .../Core/Reports/NamespaceDoc.cs              |    0
 .../Core/Reports/Queries/GetReport.cs         |    0
 .../Reports/Queries/GetReportException.cs     |    0
 .../Core/Reports/Queries/GetReportList.cs     |    0
 .../Reports/Queries/GetReportListResult.cs    |    0
 .../Queries/GetReportListResultItem.cs        |    0
 .../Core/Reports/Queries/GetReportResult.cs   |    0
 .../GetReportResultContextCollection.cs       |    0
 .../Core/Reports/Queries/KeyValuePair.cs      |    0
 .../Coderr.Server.Api/Core/Reports/ReadMe.md  |    2 +-
 .../Core/Reports/ReportDTO.cs                 |    0
 .../Core/Reports/ReportExeptionDTO.cs         |    0
 .../Core/Reports/ReportExtensions.cs          |    0
 .../Settings/Commands/SaveAccountSetting.cs   |    0
 .../Settings/Commands/SaveAccountSettings.cs  |    0
 .../Settings/Queries/GetAccountSetting.cs     |    0
 .../Queries/GetAccountSettingResult.cs        |    0
 .../Settings/Queries/GetAccountSettings.cs    |    0
 .../Queries/GetAccountSettingsResult.cs       |    0
 .../Core/Support/NamespaceDoc.cs              |    0
 .../Coderr.Server.Api/Core/Support/ReadMe.md  |    0
 .../Core/Support/SendSupportRequest.cs        |    0
 .../Commands/DeleteBrowserSubscription.cs     |    0
 .../Commands/StoreBrowserSubscription.cs      |    0
 .../Users/Commands/UpdateNotifications.cs     |    0
 .../Users/Commands/UpdatePersonalSettings.cs  |    0
 .../Core/Users/NamespaceDoc.cs                |    0
 .../Core/Users/NotificationSettings.cs        |    0
 .../Core/Users/NotificationState.cs           |    0
 .../Core/Users/Queries/GetUserSettings.cs     |    0
 .../Users/Queries/GetUserSettingsResult.cs    |    0
 .../Coderr.Server.Api/Core/Users}/ReadMe.md   |   14 +-
 .../Coderr.Server.Api/EnumExtensions.cs       |    0
 .../Escalation/Events/IncidentEscalated.cs    |   43 +
 .../Coderr.Server.Api/EventAttribute.cs       |    0
 .../Coderr.Server.Api/IgnoreFieldAttribute.cs |    0
 .../SaveUserKeyMetricConfiguration.cs         |   12 +
 .../Queries/GetInsightResultApplication.cs    |   12 +
 .../Queries/GetInsightResultIndicator.cs      |   35 +
 .../Insights/Queries/GetInsights.cs           |   10 +
 .../Insights/Queries/GetInsightsResult.cs     |   17 +
 .../Insights/Queries/GetKeyMetric.cs          |   18 +
 .../Queries/GetKeyMetricDefinitions.cs        |    8 +
 .../Queries/GetKeyMetricDefinitionsResult.cs  |    7 +
 .../GetKeyMetricDefinitionsResultItem.cs      |   38 +
 .../Insights/Queries/GetKeyMetricResult.cs    |    7 +
 .../Queries/GetKeyMetricResultItem.cs         |   24 +
 .../Queries/GetUserKeyMetricConfigurations.cs |   24 +
 .../GetUserKeyMetricConfigurationsResult.cs   |    7 +
 ...etUserKeyMetricConfigurationsResultItem.cs |   11 +
 .../Insights/Queries/MetricToplistItem.cs     |   10 +
 .../Insights/Queries/TrendLine.cs             |   90 +
 .../Insights/Queries/TrendLineValue.cs        |   24 +
 .../Coderr.Server.Api/MessageAttribute.cs     |    0
 .../ContextData/Queries/GetSimilarities.cs    |    0
 .../Queries/GetSimilaritiesCollection.cs      |    0
 .../Queries/GetSimilaritiesResult.cs          |    0
 .../Queries/GetSimilaritiesSimilarity.cs      |    0
 .../Queries/GetSimilaritiesValue.cs           |    0
 .../Queries/GetOriginsForIncident.cs          |    0
 .../Queries/GetOriginsForIncidentResult.cs    |    0
 .../GetOriginsForIncidentResultItem.cs        |    0
 .../Queries/GetIncidentStateSummary.cs        |    0
 .../Queries/GetIncidentStateSummaryResult.cs  |    0
 .../History/Queries/GetIncidentsForState.cs   |    0
 .../Queries/GetIncidentsForStatesResult.cs    |    0
 .../GetIncidentsForStatesResultItem.cs        |    0
 .../Modules/Logs/Queries/GetLogs.cs           |    0
 .../Modules/Logs/Queries/GetLogsResult.cs     |    0
 .../Logs/Queries/GetLogsResultEntry.cs        |    0
 .../Logs/Queries/GetLogsResultEntryLevel.cs   |    0
 .../Modules/Logs/Queries/HasLogs.cs           |    0
 .../Modules/Logs/Queries/HasLogsReply.cs      |    0
 .../Modules/Mine/Queries/ListMyIncidents.cs   |    0
 .../Mine/Queries/ListMyIncidentsResult.cs     |    0
 .../Mine/Queries/ListMyIncidentsResultItem.cs |    0
 .../Mine/Queries/ListMySuggestedItem.cs       |    0
 .../Commands/SetOnboardingChoices.cs          |    0
 .../Onboarding/Queries/GetOnboardingState.cs  |    0
 .../Queries/GetOnboardingStateResult.cs       |    0
 .../Tagging/Events/TagAttachedToIncident.cs   |    0
 .../Modules/Tagging/Queries/GetTags.cs        |    0
 .../Tagging/Queries/GetTagsForApplication.cs  |    0
 .../Tagging/Queries/GetTagsForIncident.cs     |    0
 .../Modules/Tagging/TagDTO.cs                 |    0
 .../Triggers/Commands/CreateTrigger.cs        |    0
 .../Triggers/Commands/DeleteTrigger.cs        |    0
 .../Triggers/Commands/UpdateTrigger.cs        |    0
 .../Modules/Triggers/LastTriggerActionDTO.cs  |    0
 .../Queries/GetContextCollectionMetadata.cs   |    0
 .../GetContextCollectionMetadataItem.cs       |    0
 .../Modules/Triggers/Queries/GetTrigger.cs    |    0
 .../Modules/Triggers/Queries/GetTriggerDTO.cs |    0
 .../Queries/GetTriggersForApplication.cs      |    0
 .../Modules/Triggers/TriggerActionDataDTO.cs  |    0
 .../Modules/Triggers/TriggerContextRule.cs    |    0
 .../Modules/Triggers/TriggerDTO.cs            |    0
 .../Modules/Triggers/TriggerExceptionRule.cs  |    0
 .../Triggers/TriggerFilterCondition.cs        |    0
 .../Modules/Triggers/TriggerRuleAction.cs     |    0
 .../Modules/Triggers/TriggerRuleBase.cs       |    0
 .../Queries/GetApplicationVersions.cs         |    0
 .../Queries/GetApplicationVersionsResult.cs   |    0
 .../GetApplicationVersionsResultItem.cs       |    0
 .../Versions/Queries/GetVersionHistory.cs     |    0
 .../Queries/GetVersionHistoryResult.cs        |    0
 .../Queries/GetVersionHistoryResultItem.cs    |    0
 .../Queries/GetVersionHistoryResultMonth.cs   |    0
 .../Queries/GetVersionHistoryResultSet.cs     |    0
 .../Modules/Whitelists/Commands/AddEntry.cs   |    0
 .../Modules/Whitelists/Commands/EditEntry.cs  |    0
 .../Whitelists/Commands/RemoveEntry.cs        |    0
 .../Whitelists/Queries/GetWhitelistEntries.cs |    0
 .../Queries/GetWhitelistEntriesResult.cs      |    0
 .../Queries/GetWhitelistEntriesResultItem.cs  |    0
 .../GetWhitelistEntriesResultItemApp.cs       |    0
 .../GetWhitelistEntriesResultItemIp.cs        |    0
 .../Whitelists/Queries/ResultItemIpType.cs    |    0
 .../Coderr.Server.Api/NamespaceDoc.cs         |    0
 .../Partitions/Commands/CreatePartition.cs    |   16 +
 .../Partitions/Commands/DeletePartition.cs    |    8 +
 .../Partitions/Commands/UpdatePartition.cs    |   13 +
 .../Partitions/Queries/GetPartition.cs        |   10 +
 .../Queries/GetPartitionInsights.cs           |   68 +
 .../Queries/GetPartitionInsightsResult.cs     |    7 +
 .../GetPartitionInsightsResultApplication.cs  |   13 +
 .../GetPartitionInsightsResultIndicator.cs    |   21 +
 ...etPartitionInsightsResultIndicatorValue.cs |    7 +
 .../Partitions/Queries/GetPartitionResult.cs  |   13 +
 .../Partitions/Queries/GetPartitionValues.cs  |   38 +
 .../Queries/GetPartitionValuesResult.cs       |   13 +
 .../Queries/GetPartitionValuesResultItem.cs   |   26 +
 .../Partitions/Queries/GetPartitions.cs       |   23 +
 .../Partitions/Queries/GetPartitionsResult.cs |    7 +
 .../Queries/GetPartitionsResultItem.cs        |   11 +
 .../{ => App}/Coderr.Server.Api/ReadMe.md     |   42 +-
 .../Queries/GetFeedbackForApplication.cs      |    0
 .../GetFeedbackForApplicationResult.cs        |    0
 .../GetFeedbackForApplicationResultItem.cs    |    0
 .../Queries/GetFeedbackForDashboardPage.cs    |    0
 .../GetFeedbackForDashboardPageResult.cs      |    0
 .../GetFeedbackForDashboardPageResultItem.cs  |    0
 .../Feedback/Queries/GetIncidentFeedback.cs   |    0
 .../Queries/GetIncidentFeedbackResult.cs      |    0
 .../Queries/GetIncidentFeedbackResultItem.cs  |    0
 .../Web/Overview/Queries/GetOverview.cs       |    0
 .../Queries/GetOverviewApplicationResult.cs   |    0
 .../Web/Overview/Queries/GetOverviewResult.cs |    0
 .../Overview/Queries/OverviewStatSummary.cs   |    0
 .../Web/Overview/Queries/PartitionOverview.cs |    0
 .../WorkItems/Commands/CreateWorkItem.cs      |   41 +
 .../WorkItems/Queries/FindIntegration.cs      |   27 +
 .../Queries/FindIntegrationResult.cs          |   25 +
 .../WorkItems/Queries/FindWorkItem.cs         |   24 +
 .../WorkItems/Queries/FindWorkItemResult.cs   |   28 +
 .../Coderr.Server.App.Tests/App.config        |   12 +-
 .../Coderr.Server.App.Tests.csproj            |    0
 .../Coderr.Server.App.Tests/ConfigWrapper.cs  |    0
 .../ConfigurationCategoryExtensionsTests.cs   |    0
 .../DictionaryExtensionsTests.cs              |    0
 .../Configuration/TestEntitites/MySection.cs  |    0
 .../TestEntitites/NonExistantSection.cs       |    0
 .../Configuration/TestEntitites/SoCultural.cs |    0
 .../TestEntitites/WriteTestSection.cs         |    0
 .../Core/Accounts/AccountTests.cs             |    0
 .../RegisterAccountHandlerTests.cs            |    0
 .../Core/ApiKeys/ApiKeyTests.cs               |    0
 .../Commands/InviteUserHandlerTests.cs        |    0
 .../Commands/InvitationServiceTests.cs        |    0
 .../NSubstituteExtensions.cs                  |    0
 .../ObjectExtensions.cs                       |    0
 .../PrincipalHelper.cs                        |    0
 .../ReposExtensions.cs                        |    0
 .../Coderr.Server.App.Tests/TestStore.cs      |    0
 .../GetOverviewApplicationResultTests.cs      |    0
 .../ActiveDirectory/AzureDirectoryService.cs  |   31 +
 .../{ => App}/Coderr.Server.App/AppType.cs    |    0
 .../Coderr.Server.App.csproj                  |   16 +-
 .../Core/Accounts/AccountService.cs           |    0
 .../CommandHandlers/Entities/NamespaceDoc.cs  |    0
 .../CommandHandlers/RegisterAccountHandler.cs |    0
 .../CommandHandlers/RegisterSimpleHandler.cs  |    0
 .../RequestPasswordResetHandler.cs            |    0
 .../Templates/ResetPassword/Template.md       |   12 +-
 .../Core/Accounts/IAccountService.cs          |    0
 .../Core/Accounts/NamespaceDoc.cs             |    0
 .../Queries/FindAccountByUserNameHandler.cs   |    0
 .../Queries/GetAccountQueryHandler.cs         |    0
 .../Coderr.Server.App/Core/Accounts/ReadMe.md |    6 +-
 .../Coderr.Server.App/Core/ApiKeys/ApiKey.cs  |    0
 .../Events/ApplicationDeletedHandler.cs       |    0
 .../Core/ApiKeys/IApiKeyRepository.cs         |    0
 .../Coderr.Server.App/Core/ApiKeys/ReadMe.md  |   10 +-
 .../CommandHandlers/AddTeamMemberHandler.cs   |    0
 .../CreateApplicationHandler.cs               |    0
 .../DeleteApplicationHandler.cs               |    0
 .../MapApplicationsToGroupHandler.cs          |    0
 .../CommandHandlers/MuteStatsHandler.cs       |    0
 .../RemoveTeamMemberHandler.cs                |    0
 .../CommandHandlers/RenameGroupHandler.cs     |    0
 .../UpdateApplicationHandler.cs               |    0
 .../CommandHandlers/UpdateRolesHandler.cs     |    0
 .../UpdateTeamOnInvitationAccepted.cs         |    0
 .../GetApplicationInfoHandler.cs              |    0
 .../GetApplicationTeamHandler.cs              |    0
 .../QueryHandlers/GetMyApplications.cs        |    0
 .../Environments/ApplicationEnvironment.cs    |    0
 .../Core/Environments/Environment.cs          |    0
 .../Handlers/CreateEnvironmentHandler.cs      |    0
 .../Handlers/GetEnvironmentsHandler.cs        |    0
 .../Handlers/ResetEnvironmentHandler.cs       |    0
 .../Handlers/UpdateEnvironmentHandler.cs      |    0
 .../Environments/IEnvironmentRepository.cs    |    0
 .../ErrorReports/Queries/FindReportHandler.cs |    0
 .../Commands/AssignIncidentHandler.cs         |    0
 .../Commands/CloseIncidentHandler.cs          |    0
 .../Commands/DeleteIncidentHandler.cs         |    0
 .../Commands/IgnoreIncidentHandler.cs         |    0
 .../Commands/NotifySubscribersHandler.cs      |    0
 .../Commands/ReOpenIncidentHandler.cs         |    0
 .../Core/Incidents/Jobs/DeleteOldIncidents.cs |    0
 .../Core/Invitations/ApplicationInvitation.cs |    0
 .../AcceptInvitationHandler.cs                |    0
 .../DeleteInvitationHandler.cs                |    0
 .../CommandHandlers/InviteUserHandler.cs      |    0
 .../Core/Invitations/IInvitationRepository.cs |    0
 .../Core/Invitations/Invitation.cs            |    0
 .../Commands/AddNotificationHandler.cs        |    0
 .../DeleteBrowserSubscriptionHandler.cs       |    0
 .../StoreBrowserSubscriptionHandler.cs        |    0
 .../ApplicationDeletedHandler.cs              |    0
 .../Notifications/INotificationsRepository.cs |    0
 .../Jobs/DeleteReportsBelowReportLimit.cs     |    0
 .../Core/Reports/PagedReports.cs              |    0
 .../Core/Reports/Queries/GetReportHandler.cs  |    0
 .../Core/Support/SendSupportRequestHandler.cs |    0
 .../Users/EventHandlers/CreateOnNewAccount.cs |    0
 .../Users/WebApi/GetUserSettingsHandler.cs    |    0
 .../WebApi/UpdateNotificationsHandler.cs      |    0
 .../WebApi/UpdatePersonalSettingsHandler.cs   |    0
 .../Coderr.Server.App/CustomDictionary.xml    |   88 +-
 .../App/Coderr.Server.App/DateExtensions.cs   |   12 +
 .../Escalation/EscalateOnTagAttached.cs       |   53 +
 .../Coderr.Server.App/GlobalSuppressions.cs   |    0
 .../GlobalSuppressions.cs.orig                |    0
 .../CustomContextDataProvider.cs              |   57 +
 .../HighlightedData/RequestProvider.cs        |   82 +
 .../SuppliedHighlightedDataProvider.cs        |   50 +
 .../IncidentInsights/GetInsightsHandler.cs    |  395 +++
 .../IIncidentProgressRepository.cs            |   17 +
 .../IncidentProgressCacheKey.cs               |   53 +
 .../IncidentProgressRepository.cs             |  119 +
 .../IncidentInsights/InsightConfiguration.cs  |   23 +
 .../AggregateIncidentEventsSubscriber.cs      |   96 +
 .../Subscribers/FillFromHistoryJob.cs         |   69 +
 .../Insights/ContextExtensions.cs             |   22 +
 .../Insights/DecimalExtensions.cs             |   30 +
 .../Insights/IndicatorValueComparison.cs      |    9 +
 .../Keyfigures/Application/ItemWithCount.cs   |   26 +
 .../Application/ItemWithDuration.cs           |   34 +
 .../Keyfigures/Application/MonthDuration.cs   |   22 +
 .../Application/VersionIndicator.cs           |  111 +
 .../Data/KeyPerformanceIndicatorRepository.cs |   37 +
 .../Data/KeyPerformanceIndicatorValue.cs      |   59 +
 .../KeyPerformanceIndicatorValueMapper.cs     |   22 +
 .../IKeyPerformanceIndicatorGenerator.cs      |    9 +
 .../Keyfigures/KeyPerformanceIndicator.cs     |  110 +
 .../KeyPerformanceIndicatorContext.cs         |   88 +
 .../KeyPerformanceIndicatorScore.cs           |   24 +
 .../KeyPerformanceIndicatorTopListItem.cs     |   18 +
 .../Insights/Keyfigures/MathExtensions.cs     |   66 +
 .../Keyfigures/TrendLineExtensions.cs         |   87 +
 .../Insights/Metrics/GetKeyMetricHandler.cs   |   23 +
 .../Insights/Metrics/IKeyMetricGenerator.cs   |    9 +
 .../Insights/Metrics/KeyMetricDataResult.cs   |   12 +
 .../Metrics/KeyMetricDataResultItem.cs        |   12 +
 .../Metrics/KeyMetricDefinitionAttribute.cs   |   20 +
 .../Metrics/KeyMetricGeneratorContext.cs      |   32 +
 .../Insights/Metrics/Metric.cs                |   17 +
 .../Count/AssignedIncidentsMetricGenerator.cs |  133 +
 .../Count/ClosedIncidentsMetricGenerator.cs   |  133 +
 .../Count/NewIncidentsMetricGenerator.cs      |  128 +
 .../Metrics/DbEntities/CountRow.cs            |   17 +
 .../Metrics/DbEntities/DurationRow.cs         |   19 +
 .../Duration/NewDurationMetricGenerator.cs    |  126 +
 .../Duration/WorkDurationMetricGenerator.cs   |  126 +
 .../Metrics/IMetricGenerationContext.cs       |   91 +
 .../Metrics/IMetricGenerator.cs               |   14 +
 .../App/Coderr.Server.App/Metrics/Metric.cs   |   50 +
 .../Metrics/MetricAttribute.cs                |   14 +
 .../Metrics/MetricConfiguration.cs            |   61 +
 .../Metrics/MetricDefinition.cs               |    9 +
 .../Metrics/MetricExtensions.cs               |   57 +
 .../Metrics/TimeDefinition.cs                 |  106 +
 .../Metrics/Users/CloserMetricGenerator.cs    |    6 +
 .../History/Events/IncidentAssignedHandler.cs |    0
 .../History/Events/IncidentClosedHandler.cs   |    0
 .../History/Events/IncidentCreatedHandler.cs  |    0
 .../History/Events/IncidentIgnoredHandler.cs  |    0
 .../History/Events/IncidentReOpenedHandler.cs |    0
 .../Queries/GetIncidentStateSummaryHandler.cs |    0
 .../Modules/Logs/Handlers/GetLogsHandler.cs   |    0
 .../Modules/Logs/Handlers/HasLogsHandler.cs   |    0
 .../Messaging/Commands/DotNetSmtpSettings.cs  |    0
 .../Messaging/Commands/SendEmailHandler.cs    |    0
 .../Commands/SendTemplateEmailHandler.cs      |    0
 .../Modules/Messaging/ITemplateParser.cs      |    0
 .../Modules/Messaging/Template.cs             |    0
 .../Messaging/Templating/DateFormatter.cs     |    0
 .../Templating/Formatting/JObjectReflector.cs |    0
 .../Formatting/ObjectToDictionaryConverter.cs |    0
 .../Formatting/StringFormatExtensions.cs      |    0
 .../Templating/Formatting/StringFormatter.cs  |    0
 .../Messaging/Templating/Formatting/Token.cs  |    0
 .../Templating/Formatting/Tokenizer.cs        |    0
 .../Messaging/Templating/ImageHelper.cs       |    0
 .../Messaging/Templating/Layout/Template.html |    0
 .../Messaging/Templating/Layout/logo2.png     |  Bin
 .../Modules/Messaging/Templating/Size.cs      |    0
 .../Messaging/Templating/TemplateLoader.cs    |    0
 .../Messaging/Templating/TemplateParser.cs    |    0
 .../Modules/Mine/IRecommendationProvider.cs   |    0
 .../Modules/Mine/IRecommendationService.cs    |    0
 .../Modules/Mine/RecommendIncidentContext.cs  |    0
 .../Modules/Mine/RecommendationService.cs     |    0
 .../Modules/Mine/RecommendedIncident.cs       |    0
 .../Modules/MonthlyStats/AppResult.cs         |    0
 .../ApplicationUsageStatisticsDto.cs          |    0
 .../Modules/MonthlyStats/CollectStatsJob.cs   |    0
 .../MonthlyStats/UsageStatisticsDto.cs        |    0
 .../MonthlyStats/UsageStatsSettings.cs        |    0
 .../Commands/SetOnboardingChoicesHandler.cs   |    0
 .../Modules/Onboarding/OnboardingSettings.cs  |    0
 .../Queries/GetOnboardingStateHandler.cs      |    0
 .../Handlers/GetTagsForApplicationHandler.cs  |    0
 .../Handlers/GetTagsForIncidentHandler.cs     |    0
 .../Tagging/Handlers/GetTagsHandler.cs        |    0
 .../Triggers/ActionConfigurationData.cs       |    0
 .../Triggers/Commands/CreateTriggerHandler.cs |    0
 .../Commands/DtoToDomainConverters.cs         |    0
 .../Triggers/Commands/UpdateTriggerHandler.cs |    0
 .../DomainTriggerRuleJsonConverter.cs         |    0
 .../Modules/Triggers/FilterCondition.cs       |    0
 .../Modules/Triggers/FilterResult.cs          |    0
 .../Modules/Triggers/ITriggerRepository.cs    |    0
 .../Modules/Triggers/JsonCreationConverter.cs |    0
 .../Modules/Triggers/LastTriggerAction.cs     |    0
 .../Triggers/Queries/DomainToDtoConverters.cs |    0
 .../Triggers/Queries/GetTriggerHandler.cs     |    0
 .../Triggers/Rules/ContextCollectionRule.cs   |    0
 .../Modules/Triggers/Rules/ExceptionRule.cs   |    0
 .../Modules/Triggers/Rules/RuleBase.cs        |    0
 .../Modules/Triggers/Trigger.cs               |    0
 .../Modules/Versions/NewVersionReported.cs    |    0
 .../Versions/VersionQuickFactProvider.cs      |    0
 .../Whitelists/IWhitelistRepository.cs        |    0
 .../Modules/Whitelists/IWhitelistService.cs   |    0
 .../Modules/Whitelists/IpType.cs              |    0
 .../Modules/Whitelists/Whitelist.cs           |    0
 .../Modules/Whitelists/WhitelistService.cs    |    0
 .../Modules/Whitelists/WhitelistedDomainIp.cs |    0
 .../Commands/CreatePartitionHandler.cs        |   33 +
 .../Commands/DeletePartitionHandler.cs        |   22 +
 .../Commands/UpdatePartitionHandler.cs        |   32 +
 .../Events/ProvidePartitionsAsFacts.cs        |   39 +
 .../Events/SuggestPartitionIncidents.cs       |   60 +
 .../Coderr.Server.App/Partitions/Inflector.cs |  213 ++
 .../Queries/GetPartitionDefinitions.cs        |    6 +
 .../Queries/GetPartitionDefinitionsResult.cs  |    7 +
 .../GetPartitionDefinitionsResultItem.cs      |   10 +
 .../Partitions/Queries/GetPartitionHandler.cs |   33 +
 .../Queries/GetPartitionsHandler.cs           |   37 +
 .../Queries/GetUserPartitionConfigurations.cs |   23 +
 .../GetUserPartitionConfigurationsResult.cs   |    7 +
 ...etUserPartitionConfigurationsResultItem.cs |   11 +
 .../SqlServer/MissingTable.cs                 |   22 +
 .../SqlServer/ZombieConnections.cs            |   51 +
 .../Web/LiveWriterSolutionProvider.cs         |   21 +
 .../PossibleSolutions/Web/SiteManifest.cs     |   80 +
 .../PossibleSolutions/Web/WellKnownUri.cs     |   28 +
 .../{ => App}/Coderr.Server.App/ReadMe.md     |    8 +-
 .../Tags/Events/NotifyOnAttachedTags.cs       |  139 +
 .../Tags/Services/RecommendUsingTags.cs       |   50 +
 .../Commands/CreateWorkItemHandler.cs         |   23 +
 .../AssignWorkItemWhenIncidentAssigned.cs     |   43 +
 .../Events/CloseWorkItemWhenIncidentClosed.cs |   45 +
 .../Queries/FindIntegrationHandler.cs         |   26 +
 .../WorkItems/Queries/FindWorkItemHandler.cs  |   28 +
 .../WorkItems/WorkItemIntegrationMapping.cs   |    8 +
 .../WorkItems/WorkItemServiceProvider.cs      |  132 +
 .../WorkItems/WorkItemServiceRegistrar.cs     |   28 +
 .../codeRR.Server.App.csproj.DotSettings      |    0
 .../Coderr.Server.Domain.csproj               |    0
 .../Core/Account/Account.cs                   |    0
 .../Core/Account/AccountState.cs              |    0
 .../Core/Account/IAccountRepository.cs        |    0
 .../Core/Applications/Application.cs          |    0
 .../Core/Applications/ApplicationRole.cs      |    0
 .../Applications/ApplicationTeamMember.cs     |    0
 .../Applications/IApplicationRepository.cs    |    0
 .../Core/Applications/TypeOfApplication.cs    |    0
 .../Core/Applications/UserApplication.cs      |    0
 .../ErrorReportContextCollection.cs           |    0
 .../Core/ErrorReports/ErrorReportEntity.cs    |    0
 .../Core/ErrorReports/ErrorReportException.cs |    0
 .../Core/ErrorReports/IReportsRepository.cs   |    0
 .../Core/ErrorReports/ReportMapping.cs        |    0
 .../Core/ErrorReports/ReportsExtensions.cs    |    0
 .../Core/Feedback/IFeedbackRepository.cs      |    0
 .../Core/Feedback/UserFeedback.cs             |    0
 .../Core/Incidents/EscalationState.cs         |    0
 .../Core/Incidents/Events/IncidentCreated.cs  |    0
 .../Core/Incidents/Events/IncidentReOpened.cs |    0
 .../Core/Incidents/IIncidentRepository.cs     |    0
 .../Core/Incidents/Incident.cs                |    0
 .../Core/Incidents/IncidentSolution.cs        |    0
 .../Core/Incidents/IncidentState.cs           |    0
 .../Core/User/IUserRepository.cs              |    0
 .../Coderr.Server.Domain/Core/User/User.cs    |    0
 .../EntityNotFoundException.cs                |    0
 .../ApplicationVersions/ApplicationVersion.cs |    0
 .../ApplicationVersionMonth.cs                |    0
 .../IApplicationVersionRepository.cs          |    0
 .../Modules/ErrorOrigins/ErrorOrigin.cs       |    0
 .../Modules/History/HistoryEntry.cs           |    0
 .../Modules/History/IHistoryRepository.cs     |    0
 .../Modules/Logs/ILogsRepository.cs           |    0
 .../Modules/Logs/LogEntry.cs                  |    0
 .../Modules/Logs/LogLevel.cs                  |    0
 .../Partitions/ApplicationPartitionValue.cs   |   58 +
 .../Partitions/IPartitionRepository.cs        |   39 +
 .../Partitions/IncidentPartitionSummary.cs    |   58 +
 .../Partitions/IncidentPartitionValue.cs      |   60 +
 .../Modules/Partitions/IncidentToTag.cs       |   13 +
 .../Modules/Partitions/PartitionDefinition.cs |  126 +
 .../Modules/ReportSpikes/ErrorReportSpike.cs  |    0
 .../Similarities/SimilaritiesReport.cs        |    0
 .../Modules/Similarities/Similarity.cs        |    0
 .../Similarities/SimilarityCollection.cs      |    0
 .../Modules/Similarities/SimilarityValue.cs   |    0
 .../Statistics/IncidentProgressTracker.cs     |   69 +
 .../Modules/Tags/ITagsRepository.cs           |    0
 .../Coderr.Server.Domain/Modules/Tags/Tag.cs  |    0
 .../UserNotifications/BrowserSubscription.cs  |    0
 .../IUserNotificationsRepository.cs           |    0
 .../UserNotifications/NotificationState.cs    |    0
 .../UserNotificationSettings.cs               |    0
 .../{ => App}/Coderr.Server.Domain/ReadMe.md  |   10 +-
 .../Coderr.Server.WebPush.csproj              |   18 +
 .../Model/NotificationAction.cs               |    0
 .../Model/PushNotification.cs                 |    0
 .../Model/PushSubscription.cs                 |    0
 .../Model/VapidDetails.cs                     |    0
 .../{ => App}/Coderr.Server.WebPush/ReadMe.md |    0
 .../Coderr.Server.WebPush/Util/ECKeyHelper.cs |    0
 .../Util/EncryptionResult.cs                  |    0
 .../Coderr.Server.WebPush/Util/Encryptor.cs   |    0
 .../Coderr.Server.WebPush/Util/HmacSha256.cs  |    0
 .../Coderr.Server.WebPush/Util/JwsSigner.cs   |    0
 .../Util/UrlBase64Helper.cs                   |    0
 .../Coderr.Server.WebPush/Util/VapidHelper.cs |    0
 .../Util/VapidHttpHeaders.cs                  |    0
 .../Coderr.Server.WebPush/WebPushClient.cs    |    0
 .../Coderr.Server.WebPush/WebPushException.cs |    0
 .../Coderr.Server.WebSite/.gitignore          |    0
 .../Controllers/AccountController.cs          |    0
 .../Controllers/BootController.cs             |    0
 .../Controllers/MessagingController.cs        |    0
 .../Controllers/SetupController.cs            |    1 +
 .../Installation/Controllers/SqlController.cs |    0
 .../InstallAuthorizationFilter.cs             |    0
 .../Installation/Models/AccountViewModel.cs   |    0
 .../Installation/Models/BasicsViewModel.cs    |    0
 .../Installation/Models/EmailViewModel.cs     |    0
 .../Models/ErrorTrackingViewModel.cs          |    0
 .../Installation/Models/QueueViewModel.cs     |    0
 .../Installation/Models/SupportViewModel.cs   |    0
 .../Installation/Views/Account/Admin.cshtml   |    0
 .../Installation/Views/Messaging/Email.cshtml |    0
 .../Installation/Views/Setup/Basics.cshtml    |    0
 .../Installation/Views/Setup/Completed.cshtml |    0
 .../Views/Setup/ErrorTracking.cshtml          |    0
 .../Installation/Views/Setup/Index.cshtml     |    0
 .../Installation/Views/Setup/Stats.cshtml     |    0
 .../Installation/Views/Setup/Support.cshtml   |    0
 .../Views/Shared/_JQueryReplacement.cshtml    |    0
 .../Installation/Views/Shared/_Layout.cshtml  |    0
 .../Areas/Installation/Views/Sql/Index.cshtml |    0
 .../Installation/Views/Sql/Tables.cshtml      |    0
 .../Installation/Views/_ViewImports.cshtml    |    0
 .../Installation/Views/_ViewStart.cshtml      |    0
 .../Areas/Installation/WizardStepInfo.cs      |    0
 .../Areas/Installation/WizardSteps.cs         |    0
 .../ClientApp/.editorconfig                   |    0
 .../ClientApp/.gitignore                      |    0
 .../Coderr.Server.WebSite/ClientApp/README.md |    0
 .../ClientApp/angular.json                    |   28 +-
 .../ClientApp/browserslist                    |    0
 .../common/manage/azure/devops/connection.css |   32 +
 .../common/manage/azure/devops/connection.ts  |  322 ++
 .../manage/azure/devops/connection.vue.html   |  165 ++
 .../ClientApp/common/manage/azure/home.ts     |   34 +
 .../common/manage/azure/home.vue.html         |   14 +
 .../common/services/WorkItemService.ts        |   56 +
 .../components/analyze/incidents/impact.ts    |   37 +
 .../analyze/incidents/impact.vue.html         |   39 +
 .../components/analyze/logs/incident-logs.css |   33 +
 .../components/analyze/logs/incident-logs.ts  |   58 +
 .../analyze/logs/incident-logs.vue.html       |   47 +
 .../manage/system/groups/groups.css           |    3 +
 .../components/manage/system/groups/groups.ts |   56 +
 .../manage/system/groups/groups.vue.html      |   71 +
 .../components/onboarding/home/next.ts        |   44 +
 .../components/onboarding/home/next.vue.html  |  104 +
 .../components/onboarding/home/start.css      |   30 +
 .../ClientApp/dto/Common/Azure/DevOps.ts      |  121 +
 .../ClientApp/dto/Common/Demo.ts              |   17 +
 .../ClientApp/dto}/Common/Insights.ts         |    0
 .../ClientApp/dto/Common/Logs.ts              |   23 +
 .../ClientApp/dto}/Common/WorkItems.ts        |    0
 .../ClientApp/dto}/Premise/ActiveDirectory.ts |    0
 .../ClientApp/e2e/protractor.conf.js          |    0
 .../ClientApp/e2e/src/app.e2e-spec.ts         |    0
 .../ClientApp/e2e/src/app.po.ts               |    0
 .../ClientApp/e2e/tsconfig.e2e.json           |    0
 .../ClientApp/ngserve.cmd                     |    0
 .../ClientApp/package-lock.json               | 2608 +++++++----------
 .../ClientApp/package.json                    |   36 +-
 .../ClientApp/src/Dropdown.js                 |    0
 .../ClientApp/src/Dropdown.js.map             |    0
 .../ClientApp/src/Dropdown.ts                 |    0
 .../ClientApp/src/Guide.js                    |    0
 .../ClientApp/src/Guide.js.map                |    0
 .../ClientApp/src/Guide.ts                    |    0
 .../api-authorization.module.spec.ts          |    0
 .../api-authorization.module.ts               |    0
 .../api-authorization/authorize.guard.spec.ts |    0
 .../src/api-authorization/authorize.guard.ts  |    0
 .../authorize.interceptor.spec.ts             |    0
 .../authorize.interceptor.ts                  |    0
 .../authorize.service.spec.ts                 |    0
 .../api-authorization/authorize.service.ts    |   18 +-
 .../ClientApp/src/app/PromiseWrapper.ts       |    0
 .../src/app/_controls/controls.module.ts      |    0
 .../app/_controls/guide/guide.component.html  |    0
 .../app/_controls/guide/guide.component.scss  |    0
 .../app/_controls/guide/guide.component.ts    |    0
 .../app/_controls/guide/guide.service.spec.ts |    0
 .../src/app/_controls/guide/guide.service.ts  |    0
 .../app/_controls/modal/modal.component.html  |    0
 .../app/_controls/modal/modal.component.scss  |    0
 .../app/_controls/modal/modal.component.ts    |    0
 .../src/app/_controls/modal/modal.service.ts  |    0
 .../src/app/accounts/account.module.ts        |   10 +-
 .../src/app/accounts/account.service.spec.ts  |    0
 .../src/app/accounts/account.service.ts       |    2 +-
 .../src/app/accounts/activate.component.html  |    0
 .../src/app/accounts/activate.component.ts    |    0
 .../src/app/accounts/login.component.html     |    4 +-
 .../src/app/accounts/login.component.spec.ts  |    0
 .../src/app/accounts/login.component.ts       |    1 +
 .../src/app/accounts/logout.component.html    |    0
 .../src/app/accounts/logout.component.ts      |    0
 .../src/app/accounts/register.component.html  |    0
 .../src/app/accounts/register.component.ts    |    0
 .../settings/navbar/navbar.component.html     |    0
 .../settings/navbar/navbar.component.scss     |    0
 .../settings/navbar/navbar.component.spec.ts  |    0
 .../settings/navbar/navbar.component.ts       |    0
 .../notifications.component.html              |    0
 .../notifications.component.scss              |    0
 .../notifications.component.spec.ts           |    0
 .../notifications/notifications.component.ts  |    0
 .../settings/profile/profile.component.html   |    0
 .../settings/profile/profile.component.scss   |    0
 .../profile/profile.component.spec.ts         |    0
 .../settings/profile/profile.component.ts     |    0
 .../accounts/settings/settings.component.html |    0
 .../accounts/settings/settings.component.scss |    0
 .../settings/settings.component.spec.ts       |    0
 .../accounts/settings/settings.component.ts   |    0
 .../admin-main/admin-main.component.html      |    0
 .../admin-main/admin-main.component.scss      |    0
 .../admin-main/admin-main.component.spec.ts   |    0
 .../admin/admin-main/admin-main.component.ts  |    0
 .../src/app/admin/admin.component.html        |    0
 .../src/app/admin/admin.component.spec.ts     |    0
 .../src/app/admin/admin.component.ts          |    1 +
 .../ClientApp/src/app/admin/admin.module.ts   |    0
 .../app/admin/apikeys/api-key.model.spec.ts   |    0
 .../src/app/admin/apikeys/api-key.model.ts    |    0
 .../admin/apikeys/api-keys.service.spec.ts    |    0
 .../src/app/admin/apikeys/api-keys.service.ts |    0
 .../apikeys/create/create.component.html      |    0
 .../apikeys/create/create.component.scss      |    0
 .../apikeys/create/create.component.spec.ts   |    0
 .../admin/apikeys/create/create.component.ts  |    0
 .../apikeys/details/details.component.html    |    0
 .../apikeys/details/details.component.scss    |    0
 .../apikeys/details/details.component.spec.ts |    0
 .../apikeys/details/details.component.ts      |    0
 .../admin/apikeys/edit/edit.component.html    |    0
 .../admin/apikeys/edit/edit.component.scss    |    0
 .../admin/apikeys/edit/edit.component.spec.ts |    0
 .../app/admin/apikeys/edit/edit.component.ts  |    0
 .../admin/apikeys/list/list.component.html    |    0
 .../admin/apikeys/list/list.component.scss    |    0
 .../admin/apikeys/list/list.component.spec.ts |    0
 .../app/admin/apikeys/list/list.component.ts  |    0
 .../admin/app-create/create.component.html    |    0
 .../admin/app-create/create.component.scss    |    0
 .../admin/app-create/create.component.spec.ts |    0
 .../app/admin/app-create/create.component.ts  |    1 +
 .../app/admin/groups/add/add.component.html   |    0
 .../app/admin/groups/add/add.component.scss   |    0
 .../admin/groups/add/add.component.spec.ts    |    0
 .../src/app/admin/groups/add/add.component.ts |    0
 .../groups/application-groups.service.spec.ts |    0
 .../groups/application-groups.service.ts      |    0
 .../groups/details/details.component.html     |    0
 .../groups/details/details.component.scss     |    0
 .../groups/details/details.component.spec.ts  |    0
 .../admin/groups/details/details.component.ts |    0
 .../app/admin/groups/edit/edit.component.html |    0
 .../app/admin/groups/edit/edit.component.scss |    0
 .../admin/groups/edit/edit.component.spec.ts  |    0
 .../app/admin/groups/edit/edit.component.ts   |    0
 .../src/app/admin/groups/group.model.spec.ts  |    0
 .../src/app/admin/groups/group.model.ts       |    0
 .../src/app/admin/groups/group.module.ts      |    0
 .../app/admin/groups/list/list.component.html |    0
 .../app/admin/groups/list/list.component.scss |    0
 .../admin/groups/list/list.component.spec.ts  |    0
 .../app/admin/groups/list/list.component.ts   |    1 +
 .../app/admin/navbar/navbar.component.html    |    0
 .../app/admin/navbar/navbar.component.scss    |    0
 .../app/admin/navbar/navbar.component.spec.ts |    0
 .../src/app/admin/navbar/navbar.component.ts  |    0
 .../admin/whitelist/add/add.component.html    |    0
 .../admin/whitelist/add/add.component.scss    |    0
 .../admin/whitelist/add/add.component.spec.ts |    0
 .../app/admin/whitelist/add/add.component.ts  |    0
 .../whitelist/details/details.component.html  |    0
 .../whitelist/details/details.component.scss  |    0
 .../details/details.component.spec.ts         |    0
 .../whitelist/details/details.component.ts    |    0
 .../admin/whitelist/edit/edit.component.html  |    0
 .../admin/whitelist/edit/edit.component.scss  |    0
 .../whitelist/edit/edit.component.spec.ts     |    0
 .../admin/whitelist/edit/edit.component.ts    |    0
 .../admin/whitelist/list/list.component.html  |    0
 .../admin/whitelist/list/list.component.scss  |    0
 .../whitelist/list/list.component.spec.ts     |    0
 .../admin/whitelist/list/list.component.ts    |    0
 .../admin/whitelist/whitelist.model.spec.ts   |    0
 .../app/admin/whitelist/whitelist.model.ts    |    0
 .../app/admin/whitelist/whitelist.module.ts   |    0
 .../admin/whitelist/whitelist.service.spec.ts |    0
 .../app/admin/whitelist/whitelist.service.ts  |    0
 .../ClientApp/src/app/app.component.html      |    0
 .../ClientApp/src/app/app.component.ts        |    0
 .../ClientApp/src/app/app.module.ts           |    0
 .../ClientApp/src/app/app.server.module.ts    |    0
 .../admin/configure/configure.component.html  |    0
 .../admin/configure/configure.component.scss  |    0
 .../configure/configure.component.spec.ts     |    0
 .../admin/configure/configure.component.ts    |    0
 .../admin/edit/edit.component.html            |    0
 .../admin/edit/edit.component.scss            |    0
 .../admin/edit/edit.component.spec.ts         |    0
 .../applications/admin/edit/edit.component.ts |    0
 .../environments/edit/edit.component.html     |    0
 .../environments/edit/edit.component.scss     |    0
 .../environments/edit/edit.component.spec.ts  |    0
 .../admin/environments/edit/edit.component.ts |    1 +
 .../environments/environment.service.spec.ts  |    0
 .../admin/environments/environment.service.ts |    1 +
 .../admin/environments/environments.module.ts |    0
 .../environments/list/list.component.html     |    0
 .../environments/list/list.component.scss     |    0
 .../environments/list/list.component.spec.ts  |    0
 .../admin/environments/list/list.component.ts |    1 +
 .../admin/environments/new/new.component.html |    0
 .../admin/environments/new/new.component.scss |    0
 .../environments/new/new.component.spec.ts    |    0
 .../admin/environments/new/new.component.ts   |    0
 .../admin/home/home.component.html            |    0
 .../admin/home/home.component.scss            |    0
 .../admin/home/home.component.spec.ts         |    0
 .../applications/admin/home/home.component.ts |    1 +
 .../admin/members/list/list.component.html    |   38 +-
 .../admin/members/list/list.component.scss    |    0
 .../admin/members/list/list.component.spec.ts |    0
 .../admin/members/list/list.component.ts      |    4 +-
 .../admin/members/members.component.html      |    0
 .../admin/members/members.component.scss      |    0
 .../admin/members/members.component.spec.ts   |    0
 .../admin/members/members.component.ts        |    0
 .../admin/members/new/new.component.html      |    0
 .../admin/members/new/new.component.scss      |    0
 .../admin/members/new/new.component.spec.ts   |    0
 .../admin/members/new/new.component.ts        |    0
 .../admin/partitions/edit/edit.component.html |    0
 .../admin/partitions/edit/edit.component.scss |    0
 .../partitions/edit/edit.component.spec.ts    |    0
 .../admin/partitions/edit/edit.component.ts   |    2 +
 .../admin/partitions/list/list.component.html |    0
 .../admin/partitions/list/list.component.scss |    0
 .../partitions/list/list.component.spec.ts    |    0
 .../admin/partitions/list/list.component.ts   |    0
 .../admin/partitions/new/new.component.html   |    0
 .../admin/partitions/new/new.component.scss   |    0
 .../partitions/new/new.component.spec.ts      |    0
 .../admin/partitions/new/new.component.ts     |    0
 .../partitions/partition.service.spec.ts      |    0
 .../admin/partitions/partition.service.ts     |    0
 .../admin/partitions/partitions.module.ts     |    0
 .../applications/application.model.spec.ts    |    0
 .../src/app/applications/application.model.ts |    0
 .../app/applications/application.module.ts    |    0
 .../applications/application.service.spec.ts  |    0
 .../app/applications/application.service.ts   |    6 +-
 .../insights/insightchart.component.html      |    0
 .../insights/insightchart.component.scss      |    0
 .../insights/insightchart.component.spec.ts   |    0
 .../charts/insights/insightchart.component.ts |    1 +
 .../charts/metric/metric.component.html       |    0
 .../charts/metric/metric.component.scss       |    0
 .../charts/metric/metric.component.spec.ts    |    0
 .../charts/metric/metric.component.ts         |    3 +
 .../charts/summary/summary.component.html     |    0
 .../charts/summary/summary.component.scss     |    0
 .../charts/summary/summary.component.spec.ts  |    0
 .../charts/summary/summary.component.ts       |    0
 .../details/details.component.html            |    0
 .../details/details.component.scss            |    0
 .../details/details.component.spec.ts         |    0
 .../applications/details/details.component.ts |    0
 .../details/home/home.component.html          |    0
 .../details/home/home.component.scss          |    0
 .../details/home/home.component.spec.ts       |    0
 .../details/home/home.component.ts            |    0
 .../details/navbar/navbar.component.html      |    0
 .../details/navbar/navbar.component.scss      |    0
 .../details/navbar/navbar.component.spec.ts   |    0
 .../details/navbar/navbar.component.ts        |    0
 .../groups/selector.component.html            |    0
 .../groups/selector.component.scss            |    0
 .../groups/selector.component.spec.ts         |    0
 .../applications/groups/selector.component.ts |    0
 .../dashboard/dashboard.component.html        |    0
 .../dashboard/dashboard.component.scss        |    0
 .../dashboard/dashboard.component.spec.ts     |    0
 .../insights/dashboard/dashboard.component.ts |    0
 .../insights/details/details.component.html   |    0
 .../insights/details/details.component.scss   |    0
 .../details/details.component.spec.ts         |    0
 .../insights/details/details.component.ts     |    0
 .../ClientApp/src/app/cloud/cloud.module.ts   |    0
 .../src/app/commercial/c/c.module.ts          |    0
 .../src/app/commercial/commercial.module.ts   |    0
 .../app/commercial/devops/devops.module.ts    |    0
 .../devops/manage/manage.component.html       |    8 +-
 .../devops/manage/manage.component.scss       |    0
 .../devops/manage/manage.component.spec.ts    |    0
 .../devops/manage/manage.component.ts         |    0
 .../commercial/security/security.module.ts    |    0
 .../demo-errors/demo-errors.component.html    |    0
 .../demo-errors/demo-errors.component.scss    |    0
 .../demo-errors/demo-errors.component.spec.ts |    0
 .../home/demo-errors/demo-errors.component.ts |    0
 .../src/app/home/home.component.html          |    0
 .../ClientApp/src/app/home/home.component.ts  |    0
 .../ClientApp/src/app/home/home.module.ts     |    0
 .../latest-errors.component.html              |    0
 .../latest-errors.component.scss              |    0
 .../latest-errors.component.spec.ts           |    0
 .../latest-errors/latest-errors.component.ts  |    0
 .../home/my-errors/my-errors.component.html   |    0
 .../home/my-errors/my-errors.component.scss   |    0
 .../my-errors/my-errors.component.spec.ts     |    0
 .../app/home/my-errors/my-errors.component.ts |    0
 .../src/app/home/tips/tips.component.html     |    0
 .../src/app/home/tips/tips.component.scss     |    0
 .../src/app/home/tips/tips.component.spec.ts  |    0
 .../src/app/home/tips/tips.component.ts       |    0
 .../src/app/incidents/IncidentConverter.ts    |    1 +
 .../insights/insightchart.component.html      |    0
 .../insights/insightchart.component.scss      |    0
 .../insights/insightchart.component.spec.ts   |    0
 .../charts/insights/insightchart.component.ts |    0
 .../charts/summary/summary.component.html     |    0
 .../charts/summary/summary.component.scss     |    0
 .../charts/summary/summary.component.spec.ts  |    0
 .../charts/summary/summary.component.ts       |    0
 .../bugreports/bugreports.component.html      |    0
 .../bugreports/bugreports.component.scss      |    0
 .../bugreports/bugreports.component.spec.ts   |    0
 .../bugreports/bugreports.component.ts        |    0
 .../details/close/close.component.html        |    0
 .../details/close/close.component.scss        |    0
 .../details/close/close.component.spec.ts     |    0
 .../details/close/close.component.ts          |    3 +
 .../incidents/details/details.component.html  |    0
 .../incidents/details/details.component.scss  |    0
 .../details/details.component.spec.ts         |    0
 .../incidents/details/details.component.ts    |    0
 .../details/home/home.component.html          |    0
 .../details/home/home.component.scss          |    0
 .../details/home/home.component.spec.ts       |    0
 .../incidents/details/home/home.component.ts  |    0
 .../details/impact/impact.component.html      |    0
 .../details/impact/impact.component.scss      |    0
 .../details/impact/impact.component.spec.ts   |    0
 .../details/impact/impact.component.ts        |    0
 .../details/logs/logs.component.html          |    0
 .../details/logs/logs.component.scss          |    0
 .../details/logs/logs.component.spec.ts       |    0
 .../incidents/details/logs/logs.component.ts  |    2 +
 .../details/navbar/navbar.component.html      |    0
 .../details/navbar/navbar.component.scss      |    0
 .../details/navbar/navbar.component.spec.ts   |    0
 .../details/navbar/navbar.component.ts        |    4 +
 .../details/origins/origins.component.html    |    0
 .../details/origins/origins.component.scss    |    0
 .../details/origins/origins.component.spec.ts |    0
 .../details/origins/origins.component.ts      |    1 +
 .../details/reports/reports.component.html    |    0
 .../details/reports/reports.component.scss    |    0
 .../details/reports/reports.component.spec.ts |    0
 .../details/reports/reports.component.ts      |    0
 .../feedback/feedback.component.html          |    0
 .../feedback/feedback.component.scss          |    0
 .../feedback/feedback.component.spec.ts       |    0
 .../incidents/feedback/feedback.component.ts  |    0
 .../src/app/incidents/incident.model.spec.ts  |    0
 .../src/app/incidents/incident.model.ts       |    0
 .../src/app/incidents/incidents.module.ts     |    0
 .../app/incidents/incidents.service.spec.ts   |    0
 .../src/app/incidents/incidents.service.ts    |   10 +
 .../recommend/recommend.component.html        |    0
 .../recommend/recommend.component.scss        |    0
 .../recommend/recommend.component.spec.ts     |    0
 .../recommend/recommend.component.ts          |    0
 .../src/app/incidents/report.service.spec.ts  |    0
 .../src/app/incidents/report.service.ts       |    0
 .../incidents/search/home/home.component.html |    0
 .../incidents/search/home/home.component.scss |    0
 .../search/home/home.component.spec.ts        |    0
 .../incidents/search/home/home.component.ts   |    0
 .../search/navbar/navbar.component.html       |    0
 .../search/navbar/navbar.component.scss       |    0
 .../search/navbar/navbar.component.spec.ts    |    0
 .../search/navbar/navbar.component.ts         |    4 +
 .../incidents/search/search.component.html    |    0
 .../incidents/search/search.component.scss    |    0
 .../incidents/search/search.component.spec.ts |    0
 .../app/incidents/search/search.component.ts  |    3 +
 .../app/incidents/stubs/stubs.component.html  |    0
 .../app/incidents/stubs/stubs.component.scss  |    0
 .../incidents/stubs/stubs.component.spec.ts   |    0
 .../app/incidents/stubs/stubs.component.ts    |    0
 .../src/app/nav-menu/nav-menu.component.html  |    0
 .../src/app/nav-menu/nav-menu.component.scss  |    0
 .../src/app/nav-menu/nav-menu.component.ts    |    5 +
 .../src/app/nav-menu/nav-menu.service.spec.ts |    0
 .../src/app/nav-menu/nav-menu.service.ts      |    4 +-
 .../manage/security/security.component.css    |   29 +
 .../manage/security/security.component.html   |  126 +
 .../manage/security/security.component.ts     |  236 ++
 .../src/app/premise/premise.module.ts         |    0
 .../app/premise/teams/add/add.component.html  |    0
 .../app/premise/teams/add/add.component.scss  |    0
 .../premise/teams/add/add.component.spec.ts   |    0
 .../app/premise/teams/add/add.component.ts    |    0
 .../premise/teams/edit/edit.component.html    |    0
 .../premise/teams/edit/edit.component.scss    |    0
 .../premise/teams/edit/edit.component.spec.ts |    0
 .../app/premise/teams/edit/edit.component.ts  |    0
 .../premise/teams/list/list.component.html    |    0
 .../premise/teams/list/list.component.scss    |    0
 .../premise/teams/list/list.component.spec.ts |    0
 .../app/premise/teams/list/list.component.ts  |    0
 .../src/app/premise/teams/team.model.spec.ts  |    0
 .../src/app/premise/teams/team.model.ts       |    0
 .../src/app/premise/teams/teams.module.ts     |    0
 .../ClientApp/src/app/services/HubEntity.ts   |    0
 .../src/app/services/chart.service.spec.ts    |    0
 .../src/app/services/chart.service.ts         |    0
 .../src/app/services/signal-r.service.spec.ts |    0
 .../src/app/services/signal-r.service.ts      |    2 +
 .../app/services/work-item.service.spec.ts    |    0
 .../src/app/services/work-item.service.ts     |    0
 .../ClientApp/src/app/utils/HttpClient.ts     |    0
 .../ClientApp/src/app/utils/ModalDialog.ts    |    0
 .../ClientApp/src/app/utils/SubjectList.ts    |    0
 .../src/app/utils/modal.dialog.service.ts     |    0
 .../src/app/utils/settings.service.spec.ts    |    0
 .../src/app/utils/settings.service.ts         |    2 +-
 .../ClientApp/src/app/validation.ts           |    0
 .../ClientApp/src/assets/.gitkeep             |    0
 .../ClientApp/src/assets/Spinner-1s-200px.svg |    0
 .../src/environments/environment.prod.ts      |    0
 .../ClientApp/src/environments/environment.ts |    0
 .../ClientApp/src/index.html                  |    0
 .../ClientApp/src/karma.conf.js               |    0
 .../ClientApp/src/main.ts                     |    0
 .../ClientApp/src/pipes/ago.pipe.ts           |    1 +
 .../ClientApp/src/pipes/iso-date.pipe.ts      |    0
 .../ClientApp/src/pipes/pipe.module.ts        |    0
 .../ClientApp/src/polyfills.ts                |   10 -
 .../src/server-api/Common/Azure/DevOps.ts     |    0
 .../ClientApp/src/server-api/Common/Demo.ts   |    0
 .../src/server-api/Common/Insights.ts         |   45 +
 .../ClientApp/src/server-api/Common/Logs.ts   |    0
 .../ClientApp/src/server-api/Common/Mine.ts   |    0
 .../src/server-api/Common/Partitions.ts       |    0
 .../src/server-api/Common/WorkItems.ts        |   28 +
 .../ClientApp/src/server-api/Core/Accounts.ts |    0
 .../ClientApp/src/server-api/Core/ApiKeys.ts  |    0
 .../src/server-api/Core/Applications.ts       |    0
 .../src/server-api/Core/Environments.ts       |    0
 .../ClientApp/src/server-api/Core/Feedback.ts |    0
 .../src/server-api/Core/Incidents.ts          |    0
 .../src/server-api/Core/Invitations.ts        |    0
 .../src/server-api/Core/Messaging.ts          |    0
 .../src/server-api/Core/Notifications.ts      |    0
 .../ClientApp/src/server-api/Core/Reports.ts  |    0
 .../ClientApp/src/server-api/Core/Support.ts  |    0
 .../ClientApp/src/server-api/Core/Users.ts    |    0
 .../src/server-api/Core/Whitelist.ts          |    0
 .../src/server-api/Modules/ContextData.ts     |    0
 .../src/server-api/Modules/ErrorOrigins.ts    |    0
 .../src/server-api/Modules/History.ts         |    0
 .../src/server-api/Modules/Onboarding.ts      |    0
 .../src/server-api/Modules/Tagging.ts         |    0
 .../src/server-api/Modules/Triggers.ts        |    0
 .../src/server-api/Modules/Versions.ts        |    0
 .../src/server-api/Premise/ActiveDirectory.ts |   69 +
 .../ClientApp/src/server-api/Web/Feedback.ts  |    0
 .../ClientApp/src/server-api/Web/Overview.ts  |    0
 .../server-api/server-client.service.spec.ts  |    0
 .../src/server-api/server-client.service.ts   |    3 +
 .../src/styles/_partials/_mixins.scss         |    0
 .../src/styles/_partials/backgrounds.scss     |    0
 .../src/styles/_partials/buttons.scss         |    0
 .../src/styles/_partials/checkbox.scss        |    0
 .../styles/_partials/coderr-variables.scss    |    0
 .../ClientApp/src/styles/_partials/forms.scss |    0
 .../ClientApp/src/styles/_partials/image.scss |    0
 .../src/styles/_partials/layout.scss          |    0
 .../ClientApp/src/styles/_partials/radio.scss |    0
 .../ClientApp/src/styles/_partials/reset.scss |    0
 .../src/styles/_partials/tables.scss          |    0
 .../src/styles/_partials/topnav.scss          |    0
 .../src/styles/_partials/typography.scss      |    0
 .../ClientApp/src/styles/site.scss            |    0
 .../ClientApp/src/test.ts                     |    4 +-
 .../ClientApp/src/tsconfig.app.json           |    0
 .../ClientApp/src/tsconfig.server.json        |    0
 .../ClientApp/src/tsconfig.spec.json          |    0
 .../ClientApp/src/tslint.json                 |    0
 .../ClientApp/tsconfig.json                   |    0
 .../ClientApp/tslint.json                     |    0
 .../Coderr.Server.WebSite.csproj              |   22 +-
 .../Controllers/AccountController.cs          |    6 +-
 .../Controllers/AuthenticationController.cs   |    0
 .../Controllers/CqsController.cs              |    4 +-
 .../Controllers/FeedbackReceiverController.cs |    0
 .../Controllers/GoController.cs               |    2 +-
 .../Controllers/HomeController.cs             |    0
 .../Controllers/OnboardingController.cs       |    0
 .../Controllers/PushController.cs             |    2 +-
 .../Controllers/ReportReceiverController.cs   |    4 +-
 .../Coderr.Server.WebSite/Dockerfile_Linux    |    0
 .../Coderr.Server.WebSite/Dockerfile_Windows  |    0
 .../Coderr.Server.WebSite/Hubs/CoderrHub.cs   |    0
 .../Coderr.Server.WebSite/Hubs/HubEntity.cs   |    0
 .../Coderr.Server.WebSite/Hubs/HubEvent.cs    |    0
 .../Coderr.Server.WebSite/Hubs/HubSession.cs  |    0
 .../Hubs/HubSubscribe.cs                      |    0
 .../Hubs/WebSocketHub.cs                      |    0
 .../Identity/AuthenticationSchemeProvider2.cs |    0
 .../Identity/DbTransactionExtensions.cs       |    0
 .../Identity/LookupNormalizer.cs              |    0
 .../Identity/MyIdentityErrorDescriber.cs      |    0
 .../Identity/MySigninManager.cs               |    0
 .../Identity/MyUserManager.cs                 |    0
 .../Identity/UserClaimStore.cs                |    0
 .../Identity/UserClaimsFactory.cs             |    0
 .../Identity/UserConfirmation.cs              |    0
 .../Identity/UserStore.cs                     |    0
 .../Adapters/ConfigurationSectionWrapper.cs   |    0
 .../Adapters/ConfigurationWrapper.cs          |    0
 .../CqsObjectMapperConfigurationContext.cs    |    0
 .../Adapters/DependencyInjectionAdapter.cs    |    0
 .../Adapters/HandlerScopeWrapper.cs           |    0
 .../Adapters/Logging/FakeLogScope.cs          |    0
 .../Adapters/Logging/MicrosoftLogAdapter.cs   |    0
 .../Logging/MicrosoftLogFactoryAdapter.cs     |    0
 .../Adapters/ReportConfigWrapper.cs           |    0
 .../Adapters/ServiceScopeWrapper.cs           |    0
 .../ApiKeyAuthentication/ApiKeyAuthOptions.cs |    0
 .../ApiKeyAuthenticator.cs                    |    0
 .../Infrastructure/AppModuleStarter.cs        |    7 +
 .../Infrastructure/Boot/PrincipalWrapper.cs   |    0
 .../Infrastructure/CoderrStartup.cs           |   45 +-
 .../Cqs/Adapters/AzureQueueProvider.cs        |   25 +
 .../Cqs/Adapters/ExecuteDirectlyMessageBus.cs |    0
 ...onPublicAndUseCamelCaseContractResolver.cs |    0
 .../Cqs/Adapters/RoutingMessageBus.cs         |    0
 .../Cqs/Adapters/ScopeCommitter.cs            |    0
 .../Cqs/Adapters/ScopeFactory.cs              |    0
 .../Infrastructure/Cqs/CqsObjectMapper.cs     |    0
 .../Infrastructure/Cqs/RegisterCqsServices.cs |    0
 .../Filters/PrincipalActionFilter.cs          |    0
 .../Filters/TransactionalAttribute.cs         |    0
 .../Infrastructure/JwtHelper.cs               |    0
 .../Infrastructure/JwtSettings.cs             |    0
 .../Infrastructure/KeyValuePairConverter.cs   |    0
 .../Infrastructure/Logging/MyLogAdapter.cs    |   85 +
 ...tionServiceManagerSettingsWithDefaultOn.cs |    0
 .../Modules/ApplicationServices.cs            |    0
 .../Modules/BackgroundJobsForAnalyzer.cs      |    0
 .../Modules/BackgroundJobsForApp.cs           |    0
 .../Modules/DbConnectionConfig.cs             |    0
 .../Modules/RegisterContainerServices.cs      |    0
 .../Infrastructure/MyUow.cs                   |  148 +
 .../PendingRequestTrackingMiddleware.cs       |    0
 .../Infrastructure/Premise/PremiseStart.cs    |   98 +
 .../Infrastructure/PrincipalActionFilter.cs   |   21 +
 .../Infrastructure/WebPush/PushClient.cs      |    0
 .../WebPush/WebPushAppModule.cs               |    0
 .../WebPush/WebPushReportModule.cs            |    1 +
 .../WebSockets/IWebSocketHub.cs               |    0
 .../ModelStateExtensions.cs                   |    0
 .../Models/Accounts/AcceptViewModel.cs        |    0
 .../Models/Accounts/IsTrueAttribute.cs        |    0
 .../Models/Accounts/LoginResult.cs            |    0
 .../Models/Accounts/LoginViewmodel.cs         |    0
 .../Models/Accounts/RegisterResult.cs         |    0
 .../Models/Accounts/RegisterViewModel.cs      |    0
 .../Accounts/RequestPasswordResetViewModel.cs |    0
 .../Models/Accounts/ResetPasswordViewModel.cs |    0
 .../Models/ApplicationUser.cs                 |    0
 .../Models/AuthenticatedUser.cs               |    0
 .../Models/ErrorMessage.cs                    |    0
 .../Models/Users/AccountViewModels.cs         |    0
 .../Models/Users/AuthenticatedUser.cs         |    0
 .../PendingRequestTrackingMiddleware.cs       |   32 +
 .../Coderr.Server.WebSite/Program.cs          |    7 +-
 .../Properties/launchSettings.json            |   18 +-
 .../Properties/serviceDependencies.json       |    0
 .../Properties/serviceDependencies.local.json |    0
 .../ScaffoldingReadMe.txt                     |    3 +
 .../Coderr.Server.WebSite/Startup.cs          |    5 +-
 .../TracingQueueProvider.cs                   |  637 ++++
 .../Views/Account/Accept.cshtml               |    0
 .../Views/Account/Activate.cshtml             |    0
 .../Views/Account/ActivationRequested.cshtml  |    0
 .../Views/Account/ChangePassword.cshtml       |    0
 .../Views/Account/InvitationNotFound.cshtml   |    0
 .../Account/PasswordRequestReceived.cshtml    |    0
 .../Views/Account/Register.cshtml             |  122 +-
 .../Views/Account/RequestPasswordReset.cshtml |    0
 .../Views/Account/ResetPassword.cshtml        |    0
 .../Views/Authentication/Login.cshtml         |    4 +
 .../Views/Home/Index.cshtml                   |    0
 .../Views/Home/Mine.html                      |   64 +
 .../Views/Shared/_Layout.cshtml               |    4 +
 .../Views/_ViewImports.cshtml                 |    0
 .../Views/_ViewStart.cshtml                   |    0
 .../appsettings.Development.json              |   40 +
 .../appsettings.OnPremiseDev.json             |   25 +
 .../appsettings.Publish.json                  |    5 +
 .../appsettings.Test.json                     |    0
 .../Coderr.Server.WebSite/appsettings.json    |    4 +-
 .../Coderr.Server.WebSite/compilenpm.cmd      |    0
 .../Coderr.Server.WebSite/log4net.config      |    0
 .../Coderr.Server.WebSite/log4net.prod.config |    0
 .../log4net.production.config                 |    0
 .../Coderr.Server.WebSite/log4net.test.config |    0
 .../Coderr.Server.WebSite/publish_clean.cmd   |    0
 .../Coderr.Server.WebSite/publish_upgrade.cmd |    5 +
 .../App/Coderr.Server.WebSite/tempkey.rsa     |    1 +
 .../wwwroot/favicon-16x16.png                 |  Bin
 .../wwwroot/favicon-32x32.png                 |  Bin
 .../wwwroot/favicon-96x96.png                 |  Bin
 .../Coderr.Server.WebSite/wwwroot/favicon.ico |  Bin
 .../wwwroot/images/Spinner-1s-200px.svg       |    0
 .../wwwroot/images/navico.png                 |  Bin
 .../wwwroot/service-worker.js                 |    0
 .../wwwroot/styles.0833d9396d7aae04dcd9.css   |    0
 .../Coderr.Server.WebSite/wwwroot/styles.css  |    0
 .../wwwroot/styles.css.map                    |    0
 .../Incidents/QuickFactContext.cs             |   21 -
 .../Coderr - Backup.Server.SqlServer.csproj   |   43 -
 .../Coderr.Server.SqlServer.csproj            |   39 -
 src/Server/Coderr.Server.Web.Tests/App.config |    6 -
 .../Coderr.Server.Web.Tests.csproj            |   55 -
 .../Helpers/Extensions/WebDriverExtensions.cs |   62 -
 .../Helpers/IisExpressHelper.cs               |  166 --
 .../Helpers/Selenium/BrowserAttribute.cs      |   22 -
 .../Helpers/Selenium/BrowserType.cs           |    9 -
 .../Helpers/Selenium/DriverFactory.cs         |   33 -
 .../Helpers/xUnit/TestCaseOrderer.cs          |   49 -
 .../Helpers/xUnit/TestPriorityAttribute.cs    |   14 -
 .../Pages/Account/ActivationRequestedPage.cs  |   17 -
 .../Pages/Account/LoginPage.cs                |  127 -
 .../Pages/Account/LogoutPage.cs               |   18 -
 .../Pages/Account/RegisterPage.cs             |  105 -
 .../Pages/ApplicationPage.cs                  |   29 -
 .../Coderr.Server.Web.Tests/Pages/BasePage.cs |   57 -
 .../Pages/ConfigureApplicationPage.cs         |   41 -
 .../Coderr.Server.Web.Tests/Pages/HomePage.cs |   49 -
 .../Coderr.Server.Web.Tests/Pages/IPage.cs    |    8 -
 .../Pages/IncidentsPage.cs                    |   29 -
 .../Pages/PageHelper.cs                       |   25 -
 .../Tests/AdminUserTests.cs                   |   35 -
 .../Tests/ConfigureApplicationPageTests.cs    |   53 -
 .../Tests/HomePageTests.cs                    |   34 -
 .../Tests/IncidentsPageTests.cs               |   41 -
 .../Tests/LoggedInTest.cs                     |   32 -
 .../Tests/LoginPageTests.cs                   |  103 -
 .../Tests/NavigationTests.cs                  |   73 -
 .../Tests/RegisterPageTests.cs                |   52 -
 .../Tests/UserTests.cs                        |   50 -
 src/Server/Coderr.Server.Web.Tests/WebTest.cs |  152 -
 .../applicationhost.config                    | 1048 -------
 .../applicationhost.tt                        | 1048 -------
 .../Coderr.Server.WebPush.csproj              |   19 -
 .../appsettings.Development.json              |   10 -
 .../Coderr.Server.WebSite/publish_upgrade.cmd |    5 -
 src/Server/Coderr.Server.sln                  |  316 +-
 .../Boot/ConfigurationContext.cs              |    0
 .../Boot/ContainerServiceAttribute.cs         |    0
 .../Boot/IAppModule.cs                        |    0
 .../Boot/IConfiguration.cs                    |    0
 .../Boot/IConfigurationSection.cs             |    0
 .../Boot/RegisterExtensions.cs                |    0
 .../Boot/StartContext.cs                      |    0
 .../Coderr.Server.Abstractions.csproj         |    4 +-
 .../Config/ConfigurationCategoryExtensions.cs |    0
 .../Config/ConfigurationStore.cs              |    0
 .../Config/IConfiguration.cs                  |    0
 .../Config/IConfigurationSection.cs           |    0
 .../Directory/IDirectoryEntry.cs              |   11 +
 .../Directory/IDirectoryService.cs            |   12 +
 .../Coderr.Server.Abstractions/HostConfig.cs  |    0
 .../IConnectionFactory.cs                     |    0
 .../IGotTransaction.cs                        |    0
 .../IPAddressExtension.cs                     |    0
 .../HighlightedContextDataProviderContext.cs  |    0
 .../IHighlightedContextDataProvider.cs        |    0
 .../Incidents/IQuickfactProvider.cs           |    0
 .../Incidents/ISolutionProvider.cs            |    0
 .../Incidents/QuickFactContext.cs             |    0
 .../Incidents/SolutionProviderContext.cs      |    0
 .../Coderr.Server.Abstractions/QueueConfig.cs |    0
 .../Reports/ReportConfig.cs                   |    0
 .../Security/ClaimsExtensions.cs              |    0
 .../Security/CoderrClaims.cs                  |    0
 .../Security/CoderrRoles.cs                   |    0
 .../Security/IPrincipalAccessor.cs            |    0
 .../ServerConfig.cs                           |    0
 .../Coderr.Server.Abstractions/ServerType.cs  |    0
 .../WorkItems/IUserMappingRepository.cs       |   12 +
 .../WorkItems/IWorkItemRepository.cs          |   18 +
 .../WorkItems/IWorkItemService.cs             |   36 +
 .../WorkItems/IWorkItemServiceProvider.cs     |   16 +
 .../WorkItems/IWorkItemServiceRegistrar.cs    |   14 +
 .../WorkItems/WorkItemDTO.cs                  |   73 +
 .../WorkItems/WorkItemMapping.cs              |   49 +
 .../WorkItems/WorkItemState.cs                |   33 +
 .../WorkItems/WorkItemUserMapping.cs          |   21 +
 .../Coderr.Server.Infrastructure.Tests.csproj |    0
 .../Messaging/Disk/Queue/DiskFileTests.cs     |    0
 .../UnitTest1.cs                              |    0
 .../ApplicationVersionComparer.cs             |    0
 .../Coderr.Server.Infrastructure.csproj       |   10 +-
 .../CoderrDtoSerializer.cs                    |    0
 .../Configuration/BaseConfiguration.cs        |    0
 .../Configuration/CoderrConfigSection.cs      |    0
 .../ConfigDictionaryExtensions.cs             |    0
 .../Configuration/Database/DatabaseStore.cs   |    0
 .../IDatabaseUtilities.cs                     |    0
 .../IPrincipalAccessor.cs                     |    0
 .../IUrlHelper.cs                             |    0
 .../Messaging/Disk/ClaimDto.cs                |    0
 .../Messaging/Disk/DequeueTracking.cs         |    0
 .../Messaging/Disk/DiskEntry.cs               |    0
 .../Messaging/Disk/DiskQueueAdapter.cs        |    0
 .../Disk/DotNetCqs/DiskQueueProvider.cs       |    0
 .../Disk/DotNetCqs/DiskQueueSession.cs        |    0
 .../Messaging/Disk/Dtos/AdoNetMessageDTO.cs   |    0
 .../Messaging/Disk/Dtos/ClaimDto.cs           |    0
 .../Messaging/Disk/Dtos/IdentityDto.cs        |    0
 .../Messaging/Disk/JsonNetDiskSerializer.cs   |    0
 .../Messaging/Disk/Queue/BufferStream.cs      |    0
 .../Messaging/Disk/Queue/DiskFile.cs          |    0
 .../Messaging/Disk/Queue/DiskQueue.cs         |    0
 .../Disk/Queue/IContentSerializer.cs          |    0
 .../Messaging/Disk/Queue/ReadState.cs         |    0
 .../Messaging/Disk/Queue/Record.cs            |    0
 .../Disk/Queue/SegmentedReadStream.cs         |    0
 .../Messaging/Disk/QueueLockFile.cs           |    0
 .../Messaging/IRouteRegistrar.cs              |    0
 ...onPublicAndUseCamelCaseContractResolver.cs |    0
 .../Messaging/MessageRouter.cs                |    0
 .../Messaging/MessagingSerializer.cs          |    0
 .../Messaging/QueueManager.cs                 |    0
 .../ShutdownRequestCompletedEventArgs.cs      |    0
 .../Messaging/ShuttingDownEventArgs.cs        |    0
 .../Messaging/Tests/TestMessageWrapper.cs     |    0
 .../Messaging/Tests/TestQueue.cs              |    0
 .../Messaging/Tests/TestQueueProvider.cs      |    0
 .../Messaging/Tests/TestQueueSession.cs       |    0
 .../Net/MimeMapping.cs                        |    0
 .../Plugins/Configuration.cs                  |    0
 .../Plugins/IPlugin.cs                        |    0
 .../Plugins/MenuConfiguration.cs              |    0
 .../Plugins/MenuItem.cs                       |    0
 .../Security/AuthenticationTypes.cs           |    0
 .../UpdatesLoggedInAccountAttribute.cs        |    0
 .../SetupTools.cs                             |    0
 .../TypeHelper.cs                             |    0
 .../Analysis/IncidentBeingAnalyzedMapper.cs   |    0
 .../Coderr.Server.SqlServer.Tests.csproj      |    6 +-
 .../CommonIntegrationTest.cs                  |   38 +
 .../Core/Accounts/AccountRepositoryTests.cs   |    0
 .../Commands/CreateApiKeyHandlerTests.cs      |    0
 .../Commands/DeleteApiKeyHandlerTests.cs      |    0
 .../ApiKeys/Queries/GetApiKeyHandlerTests.cs  |    0
 .../Queries/ListApiKeysHandlerTests.cs        |    0
 .../Helpers/DatabaseManager.cs                |    0
 .../Helpers/TestDataManager.cs                |    0
 .../NewIncidentsIndicatorTests.cs             |   32 +
 .../Applications/WorkTimeIndicatorTests.cs    |   32 +
 .../Insights/Users/CloserIndicatorTests.cs    |   31 +
 .../Insights/Users/OptimistIndicatorTests.cs  |   31 +
 .../Users/ProcastinatorIndicatorTests.cs      |   30 +
 .../IntegrationTest.cs                        |    0
 .../Mine/ListMyIncidentsQueryHandlerTests.cs  |   46 +
 .../Models/TestUser.cs                        |    0
 .../Geolocation/ErrorOriginRepositoryTests.cs |    0
 .../GetPartitionInsightsHandlerTests.cs       |   60 +
 .../SuggestPartitionIncidentsTests.cs         |   77 +
 .../SimpleDbTest.cs                           |  134 +
 .../TestConfigStore.cs                        |    0
 .../Xunit/MethodLogger.cs                     |    0
 ...itTestAssemblyRunnerWithAssemblyFixture.cs |    0
 ...TestCollectionRunnerWithAssemblyFixture.cs |    0
 ...estFrameworkExecutorWithAssemblyFixture.cs |    0
 .../XunitTestFrameworkWithAssemblyFixture.cs  |    0
 .../Coderr.Server.SqlServer.Tests/app.config  |   14 +-
 ...R.Server.SqlServer.Tests.v3.ncrunchproject |    0
 .../liveTables.sql                            |   42 +
 .../log4net.config                            |   38 +-
 .../Coderr.Server.SqlServer.csproj            |   30 +
 .../Core/Accounts/AccountMapper.cs            |    0
 .../Core/Accounts/AccountRepository.cs        |    0
 .../GetAccountEmailByIdHandler.cs             |    0
 .../QueryHandlers/ListAccountsHandler.cs      |    0
 .../Core/ApiKeys/ApiKeyRepository.cs          |    0
 .../ApiKeys/Commands/CreateApiKeyHandler.cs   |    0
 .../ApiKeys/Commands/DeleteApiKeyHandler.cs   |    0
 .../ApiKeys/Commands/EditApiKeyHandler.cs     |    0
 .../Core/ApiKeys/Mappings/ApiKeyMapper.cs     |    0
 .../Core/ApiKeys/Mappings/IntMapper.cs        |    0
 .../Core/ApiKeys/Queries/GetApiKeyHandler.cs  |    0
 .../ApiKeys/Queries/ListApiKeysHandler.cs     |    0
 .../Core/Applications/ApplicationGroup.cs     |    0
 .../Core/Applications/ApplicationGroupMap.cs  |    0
 .../Applications/ApplicationGroupMapMapper.cs |    0
 .../Applications/ApplicationGroupMapper.cs    |    0
 .../Core/Applications/ApplicationMapper.cs    |    0
 .../Applications/ApplicationRepository.cs     |    0
 .../CreateApplicationGroupHandler.cs          |    0
 .../DeleteApplicationGroupHandler.cs          |    0
 .../GetApplicationByAppKeyHandler.cs          |    0
 .../Queries/GetApplicationGroupMapHandler.cs  |    0
 .../Queries/GetApplicationGroupsHandler.cs    |    0
 .../Queries/GetApplicationIdByKeyHandler.cs   |    0
 .../Queries/GetApplicationOverviewHandler.cs  |    0
 .../SetApplicationGroupHandler.cs             |    0
 .../ApplicationEnvironmentMapper.cs           |    0
 .../DeleteAbandonedEnvironments.cs            |    0
 .../Core/Environments/EnvironmentMapper.cs    |    0
 .../Environments/EnvironmentRepository.cs     |    0
 .../GetEnvironmentsResultItemMapper.cs        |    0
 .../CheckForFeedbackNotificationsToSend.cs    |    0
 .../Core/Feedback/DeleteAbandonedFeedback.cs  |    0
 .../Core/Feedback/FeedbackEntityMapper.cs     |    0
 .../Core/Feedback/FeedbackRepository.cs       |    0
 .../Core/Feedback/SubmitFeedbackHandler.cs    |    0
 .../Core/Incidents/DeleteAbandonedFeedback.cs |    0
 .../Incidents/DeleteAbandonedSimilarities.cs  |    0
 .../Core/Incidents/IncidentMapper.cs          |    0
 .../Core/Incidents/IncidentRepository.cs      |    0
 .../Core/Incidents/IncidentSummaryMapper.cs   |    0
 .../Queries/FindIncidentResultItemMapper.cs   |    0
 .../Incidents/Queries/FindIncidentsHandler.cs |    0
 .../Incidents/Queries/GetCollectionHandler.cs |    0
 .../Queries/GetIncidentForClosePage.cs        |    0
 .../GetIncidentForClosePageResultMapper.cs    |    0
 .../Incidents/Queries/GetIncidentHandler.cs   |    0
 .../Queries/GetIncidentResultMapper.cs        |    0
 .../Queries/GetIncidentStatisticsHandler.cs   |    0
 .../Incidents/Queries/GetReportListHandler.cs |    0
 .../Queries/GetReportListResultItemMapper.cs  |    0
 .../Core/Incidents/ReportDayMapper.cs         |    0
 .../Invitations/GetInvitationByKeyHandler.cs  |    0
 .../Core/Invitations/InvitationMapping.cs     |    0
 .../Core/Invitations/InvitationRepository.cs  |    0
 .../BrowserSubscriptionMapper.cs              |    0
 .../Notifications/NotificationRepository.cs   |    0
 .../Core/Notifications/NotificationService.cs |    0
 .../UserNotificationSettingsMap.cs            |    0
 .../Core/Reports/ErrorReportDtoMapper.cs      |    0
 .../Core/Reports/ErrorReportRepository.cs     |    0
 .../Core/Reports/ReportMappingMapper.cs       |    0
 .../Core/Settings/AccountSetting.cs           |    0
 .../Core/Settings/AccountSettingMapper.cs     |    0
 .../Core/Settings/GetAccountSettingHandler.cs |    0
 .../Settings/GetAccountSettingsHandler.cs     |    0
 .../Settings/SaveAccountSettingHandler.cs     |    0
 .../Settings/SaveAccountSettingsHandler.cs    |    0
 .../Core/Users/ApplicationTeamMemberMapper.cs |    0
 .../Core/Users/UserMapper.cs                  |    0
 .../Core/Users/UserRepository.cs              |    0
 .../DateTimeExtensions.cs                     |    0
 .../Coderr.Server.SqlServer/DbConverters.cs   |    0
 .../Insights/AppCountGeneratorExtensions.cs   |  141 +
 .../AppDurationGeneratorExtensions.cs         |  108 +
 .../Applications/AssignedCountIndicator.cs    |   70 +
 .../Applications/NewIncidentsIndicator.cs     |  187 ++
 .../Applications/RespondTimeIndicator.cs      |   80 +
 .../Applications/SolvedCountIndicator.cs      |   82 +
 .../Applications/WorkTimeIndicator.cs         |   73 +
 .../Insights/CounterIndicator.cs              |  130 +
 .../Insights/DurationIndicator.cs             |   76 +
 .../Insights/GeneratorExtensions.cs           |  567 ++++
 .../Insights/IncidentProgressTrackerMapper.cs |   15 +
 .../Insights/Partitions/PartitionInsight.cs   |  158 +
 .../SystemCountGeneratorExtensions.cs         |  102 +
 .../SystemDurationGeneratorExtensions.cs      |   97 +
 .../Insights/Users/CloserIndicator.cs         |   85 +
 .../Insights/Users/ProcastinatorIndicator.cs  |   64 +
 .../Insights/Users/TheOptimist.cs             |   54 +
 .../Logs/LogsRepository.cs                    |    0
 .../Migrations/MigrationRunner.cs             |    0
 .../Migrations/MigrationScripts.cs            |    0
 .../Geolocation/ErrorOriginListItem.cs        |    0
 .../Modules/Geolocation/ErrorOriginMapper.cs  |    0
 .../Geolocation/ErrorOriginRepository.cs      |    0
 .../GetOriginsForIncidentHandler.cs           |    0
 .../Modules/History/DeleteAbandonedHistory.cs |    0
 .../History/GetIncidentsForStatesHandler.cs   |    0
 .../Modules/History/HistoryEntryMapper.cs     |    0
 .../Modules/History/HistoryRepository.cs      |    0
 .../IncidentWithMostReportsProvider.cs        |    0
 .../Mine/ListMyIncidentsQueryHandler.cs       |    0
 .../Mine/ListMyIncidentsResultItemMapper.cs   |    0
 .../Modules/Mine/ListMySuggestedItemMapper.cs |    0
 .../ReportSpikes/ErrorReportSpikeMapper.cs    |    0
 .../ContextCollectionPropertyDbEntity.cs      |    0
 .../ContextCollectionPropertyValueDbEntity.cs |    0
 .../Mappers/SimilarityCollectionMapper.cs     |    0
 .../Similarities/Mappers/SimilarityMapper.cs  |    0
 .../Mappers/SimilarityValueMapper.cs          |    0
 .../Queries/GetSimilaritiesHandler.cs         |    0
 .../Similarities/SimilarityRepository.cs      |    0
 .../Modules/Tagging/DoInitialRun.cs           |    0
 .../Modules/Tagging/TagsRepository.cs         |    0
 .../Modules/Triggers/AppTriggerRepository.cs  |    0
 .../Triggers/CollectionMetadataMapper.cs      |    0
 .../Modules/Triggers/DeleteTriggerHandler.cs  |    0
 .../GetContextCollectionMetadataHandler.cs    |    0
 .../GetTriggersForApplicationHandler.cs       |    0
 .../ReportAnalyzerTriggerRepository.cs        |    0
 .../Modules/Triggers/TriggerDtoMapper.cs      |    0
 .../Modules/Triggers/TriggerMapper.cs         |    0
 .../Versions/ApplicationVersionConfig.cs      |    0
 .../ApplicationVersionConfigMapper.cs         |    0
 .../Versions/ApplicationVersionMapper.cs      |    0
 .../Versions/ApplicationVersionMonthMapper.cs |    0
 .../Versions/DeleteAbandonedFeedback.cs       |    0
 .../Queries/GetApplicationVersionsHandler.cs  |    0
 .../Queries/GetVersionHistoryHandler.cs       |    0
 .../Modules/Versions/Queries/VersionRange.cs  |    0
 .../Modules/Versions/Queries/Versions.cs      |    0
 .../Modules/Versions/VersionRepository.cs     |    0
 .../Modules/Whitelists/AddEntryHandler.cs     |    0
 .../Modules/Whitelists/EditEntryHandler.cs    |    0
 .../Whitelists/GetWhitelistEntriesHandler.cs  |    0
 .../Modules/Whitelists/RemoveDomainHandler.cs |    0
 .../Modules/Whitelists/WhitelistRepository.cs |    0
 .../WhitelistedDomainApplication.cs           |    0
 .../WhitelistedDomainApplicationMapper.cs     |    0
 .../Whitelists/WhitelistedDomainIpMapper.cs   |    0
 .../Whitelists/WhitelistedDomainMapper.cs     |    0
 .../ApplicationPartitionValuesMapper.cs       |   15 +
 .../Partitions/DeleteAbandonedPartitions.cs   |   45 +
 .../Partitions/GetPartitionInsightsHandler.cs |  191 ++
 .../Partitions/GetPartitionValuesHandler.cs   |   50 +
 .../GetPartitionValuesResultItemMapper.cs     |   14 +
 .../Partitions/InboundDtoMapper.cs            |   13 +
 .../IncidentPartitionValuesMapper.cs          |   16 +
 .../Partitions/PartitionDefinitionMapper.cs   |   18 +
 .../Partitions/PartitionsRepository.cs        |  356 +++
 .../Coderr.Server.SqlServer/ReadMe.md         |   12 +-
 .../ReportAnalyzer/AnalyticsRepository.cs     |    0
 .../Environments/EnvironmentFilter.cs         |    0
 .../ReportAnalyzer/ErrorReportEntityMapper.cs |    0
 .../ReportAnalyzer/ErrorReportRepository.cs   |    0
 .../Feedback/LookupReportsForFeedback.cs      |    0
 .../ProcessInboundCollectionsHandler.cs       |    0
 .../IncidentBeingAnalyzedMapper.cs            |    0
 .../ErrorReportContextCollectionProperty.cs   |    0
 ...orReportContextCollectionPropertyMapper.cs |    0
 .../ReportAnalyzer/Jobs/Importer.cs           |    0
 .../ReportAnalyzer/Jobs/InboundCollection.cs  |    0
 .../Jobs/InboundCollectionMapper.cs           |    0
 .../Spikes/ReportSpikeRepository.cs           |    0
 .../Spikes/SpikeAggregationMapper.cs          |    0
 .../Schema/Common/Common.v01.sql              |   38 +
 .../Schema/Common/Common.v02.sql              |   19 +
 .../Schema/Common/Common.v03.sql              |   21 +
 .../Schema/Common/Common.v04.sql              |    7 +
 .../Schema/Common/Common.v05.sql              |    7 +
 .../Schema/Common/Common.v06.sql              |    4 +
 .../Schema/Common/Common.v07.sql              |   12 +
 .../Schema/Common/Common.v08.sql}             |    0
 .../Schema/Common/Common.v09.sql              |    5 +
 .../Schema/Common/Common.v10.sql              |   31 +
 .../Schema/Common/Common.v11.sql              |   13 +
 .../Schema/Common/Common.v12.sql              |    2 +
 .../Schema/Common/Common.v13.sql              |    4 +
 .../Schema/Common/Common.v14.sql              |    6 +
 .../Schema/Common/CommonSchemaPointer.cs      |    6 +
 .../Schema/Oss}/Coderr.v01.sql                |    0
 .../Schema/Oss}/Coderr.v02.sql                |    0
 .../Schema/Oss}/Coderr.v03.sql                |    0
 .../Schema/Oss}/Coderr.v04.sql                |    0
 .../Schema/Oss}/Coderr.v05.sql                |    0
 .../Schema/Oss}/Coderr.v06.sql                |    0
 .../Schema/Oss}/Coderr.v07.sql                |    0
 .../Schema/Oss}/Coderr.v08.sql                |    0
 .../Schema/Oss}/Coderr.v09.sql                |    0
 .../Schema/Oss}/Coderr.v10.sql                |    0
 .../Schema/Oss}/Coderr.v11.sql                |    0
 .../Schema/Oss}/Coderr.v12.sql                |    0
 .../Schema/Oss}/Coderr.v13.sql                |    0
 .../Schema/Oss}/Coderr.v14.sql                |    0
 .../Schema/Oss}/Coderr.v15.sql                |    0
 .../Schema/Oss}/Coderr.v16.sql                |    0
 .../Schema/Oss}/Coderr.v17.sql                |    0
 .../Schema/Oss}/Coderr.v18.sql                |    0
 .../Schema/Oss}/Coderr.v19.sql                |    0
 .../Schema/Oss}/Coderr.v20.sql                |    0
 .../Schema/Oss}/Coderr.v21.sql                |    0
 .../Schema/Oss}/Coderr.v22.sql                |    0
 .../Schema/Oss}/Coderr.v23.sql                |    0
 .../Schema/Oss}/Coderr.v24.sql                |    0
 .../Schema/Oss}/Coderr.v25.sql                |    0
 .../Schema/Oss}/Coderr.v26.sql                |    0
 .../Schema/Oss}/Coderr.v27.sql                |    0
 .../Schema/Oss}/Coderr.v28.sql                |    0
 .../Schema/Oss/Coderr.v29.sql                 |    1 +
 .../Schema/Oss}/Coderr.v30.sql                |    0
 .../Schema/Oss}/Coderr.v31.sql                |    0
 .../Schema/Oss}/Coderr.v32.sql                |    0
 .../Schema/Oss}/Coderr.v33.sql                |    0
 .../Schema/Oss}/Coderr.v34.sql                |    0
 .../Schema/Oss}/Coderr.v35.sql                |    0
 .../Schema/Oss}/Coderr.v36.sql                |    0
 .../Schema/Oss}/CoderrMigrationPointer.cs     |    2 +-
 .../Coderr.Server.SqlServer/SqlServerTools.cs |    0
 .../Tools/ConnectionStringHelper.cs           |    0
 .../Tools/DbCommandExtensions.cs              |    0
 .../Tools/EntitySerializer.cs                 |    0
 .../UnitOfWorkWithTransaction.cs              |    0
 .../Queries/GetApplicationFeedbackHandler.cs  |    0
 .../GetApplicationFeedbackResultItemMapper.cs |    0
 .../GetIncidentFeedbackItemsHandler.cs        |    0
 .../Queries/GetOverviewFeedbackHandler.cs     |    0
 .../GetOverviewFeedbackResultItemMapper.cs    |    0
 .../Web/Overview/GetOverviewHandler.cs        |    0
 .../WorkItems/UserMappingRepository.cs        |   34 +
 .../WorkItemIntegrationMappingMapper.cs       |   13 +
 .../WorkItems/WorkItemMapper.cs               |   12 +
 .../WorkItems/WorkItemRepository.cs           |   77 +
 .../WorkItems/WorkItemUserMappingMap.cs       |   22 +
 ...derr.Server.Plugins.AzureDevOps.Api.csproj |   15 +
 .../Connection/Commands/SaveAzureSettings.cs  |   46 +
 .../Connection/Queries/GetAreaPaths.cs        |   34 +
 .../Connection/Queries/GetAreaPathsResult.cs  |   13 +
 .../Queries/GetAreaPathsResultItem.cs         |   23 +
 .../Connection/Queries/GetAzureSettings.cs    |   22 +
 .../Queries/GetAzureSettingsResult.cs         |   36 +
 .../Connection/Queries/GetIterations.cs       |   37 +
 .../Connection/Queries/GetIterationsResult.cs |   13 +
 .../Queries/GetIterationsResultItem.cs        |   23 +
 .../Connection/Queries/GetProjects.cs         |   33 +
 .../Connection/Queries/GetProjectsResult.cs   |   13 +
 .../Queries/GetProjectsResultItem.cs          |   18 +
 .../Queries/GetSettingResultItem.cs           |    8 +
 .../Connection/Queries/GetWorkItemStates.cs   |   40 +
 .../Queries/GetWorkItemStatesResult.cs        |    7 +
 .../Queries/GetWorkItemStatesResultItem.cs    |    7 +
 .../Connection/Queries/GetWorkItemTypes.cs    |   37 +
 .../Queries/GetWorkItemTypesResult.cs         |    7 +
 .../Queries/GetWorkItemTypesResultItem.cs     |    8 +
 .../Coderr.Server.Plugins.AzureDevOps/Boot.cs |   30 +
 .../Clients/AzureDevOpsClient.cs              |   50 +
 .../Clients/ClassificationNode.cs             |   12 +
 .../Clients/Fields.cs                         |   64 +
 .../Clients/IWorkItemClient.cs                |   32 +
 .../Clients/PatchDocumentExtensions.cs        |   23 +
 .../Clients/QueryExecutor.cs                  |   97 +
 .../Clients/SettingsClient.cs                 |  148 +
 .../Clients/WorkItemClient.cs                 |  169 ++
 ...derr.Server.Plugins.AzureDevOps.App.csproj |   21 +
 .../Commands/SaveAzureSettingsHandler.cs      |   45 +
 .../Connections/ISettingsRepository.cs        |   14 +
 .../Jobs/AddEscalatedErrorsToBacklog.cs       |   33 +
 .../Queries/GetAreaPathsHandler.cs            |   29 +
 .../Queries/GetAzureSettingsHandler.cs        |   41 +
 .../Queries/GetIterationsHandler.cs           |   30 +
 .../Connections/Queries/GetProjectsHandler.cs |   44 +
 .../Queries/GetWorkItemStatesHandler.cs       |   27 +
 .../Queries/GetWorkItemTypesHandler.cs        |   27 +
 .../Connections/Settings.cs                   |   57 +
 .../WorkItems/AzureDevOpsWorkItemService.cs   |  122 +
 .../WorkItems/Jobs/MapUsersJob.cs             |  101 +
 .../WorkItems/Jobs/SynchronizeWorkItemsJob.cs |  160 +
 .../Boot/ConfigurationContext.cs              |    0
 .../Boot/IConfiguration.cs                    |    0
 .../Boot/IConfigurationSection.cs             |    0
 .../Boot/IReportAnalyzerModule.cs             |    0
 .../Boot/StartContext.cs                      |    0
 ....Server.ReportAnalyzer.Abstractions.csproj |   14 +-
 .../Commands/StoreLogEntries.cs               |    0
 .../Commands/StoreLogEntriesEntry.cs          |    0
 .../Commands/StoreLogEntriesLogLevel.cs       |    0
 .../ErrorReports/CollectionExtensions.cs      |    0
 .../ErrorReports/ContextCollectionDTO.cs      |    0
 .../ErrorReports/IReportConfig.cs             |    0
 .../ErrorReports/ReportDTO.cs                 |    0
 .../ErrorReports/ReportExeptionDTO.cs         |    0
 .../Feedback/FeedbackAttachedToIncident.cs    |    0
 .../IDomainQueue.cs                           |    0
 .../ISaveable.cs                              |    0
 .../Inbound/Commands/InvalidReport.cs         |    0
 .../Inbound/Commands/NamespaceDoc.cs          |    0
 .../Inbound/Commands/ProcessFeedback.cs       |    0
 .../Inbound/Commands/ProcessReport.cs         |    0
 .../Commands/ProcessReportContextInfoDto.cs   |    0
 .../Commands/ProcessReportExceptionDto.cs     |    0
 .../Inbound/Commands/ProcessReportLogEntry.cs |    0
 .../Inbound/Commands/ReadMe.md                |    0
 .../Inbound/Models/NamespaceDoc.cs            |    0
 .../Inbound/Models/NewReportContextInfo.cs    |    0
 .../Inbound/Models/NewReportDTO.cs            |    0
 .../Inbound/Models/NewReportException.cs      |    0
 .../Inbound/Models/NewReportLogEntry.cs       |    0
 .../Incidents/IncidentSummaryDTO.cs           |    0
 .../Incidents/ProcessContextCollections.cs    |    0
 .../Incidents/ReportAddedToIncident.cs        |    0
 .../Commands/SendBrowserNotification.cs       |    0
 .../Commands/SendBrowserNotificationAction.cs |    0
 .../Handlers/GetVersionFromReportTests.cs     |    0
 .../Coderr.Server.ReportAnalyzer.Tests.csproj |    2 +-
 .../Domain/Reports/HashCodeGeneratorTests.cs  |    0
 .../StoreLocationFromNewReportTests.cs        |    0
 .../HashCodeGeneratorTests.cs                 |    0
 .../HttpErrorGeneratorTests.cs                |    0
 .../HashCodeGeneratorTests.cs                 |    0
 .../HttpErrorGeneratorTests.cs                |    0
 .../Processing/WmiDateConverterTests.cs       |    0
 .../Tagging/IdentifyTagsFromIncidentTests.cs  |    0
 .../AnalysisUnitOfWork.cs                     |    0
 .../Handlers/GetVersionFromReport.cs          |    0
 .../Boot/Adapters/ConfigWrapper.cs            |    0
 .../Boot/Adapters/DomainQueueWrapper.cs       |    0
 .../Adapters/MessagingPrincipalWrapper.cs     |    0
 .../Boot/Adapters/ScopeWrapper.cs             |    0
 .../Adapters/ServerConfigSectionWrapper.cs    |    0
 .../Boot/Adapters/ServerConfigWrapper.cs      |    0
 .../Boot/IAnalysisModule.cs                   |    0
 .../Boot/RegisterExtensions.cs                |    0
 .../Boot/ReportAnalyzerBootstrapper.cs        |    0
 .../Boot/ReportAnalyzerModuleStarter.cs       |    0
 .../Starters/RegisterContainerServices.cs     |    0
 .../Boot/Starters/ReportQueueModule.cs        |    6 +-
 .../Coderr.ReportAnalyzer.csproj.DotSettings  |    0
 .../Coderr.Server.ReportAnalyzer.csproj       |   10 +-
 .../Handlers/OriginsConfiguration.cs          |    0
 .../Handlers/StoreLocationFromNewReport.cs    |    0
 .../ErrorOrigins/IErrorOriginRepository.cs    |    0
 .../ErrorOrigins/LookupInboundOrigins.cs      |    0
 .../ErrorReports/ErrorHashCode.cs             |    0
 .../ErrorReports/HashCodeGenerator.cs         |    0
 .../HashcodeGenerators/HashCodeUtility.cs     |    0
 .../HashcodeGenerators/HttpErrorGenerator.cs  |    0
 .../HashcodeGenerators/LiveWriterGenerator.cs |    0
 .../HashcodeGenerators/TransactionLogFull.cs  |    0
 .../ErrorReports/IHashCodeGenerator.cs        |    0
 .../ErrorReports/IHashCodeSubGenerator.cs     |    0
 .../ErrorReports/ReportDecompressor.cs        |    0
 .../Handlers/AttachFeedbackToIncident.cs      |    0
 .../Handlers/StoreFeedbackFromNewReports.cs   |    0
 .../Feedback/IUserFeedbackRepository.cs       |    0
 .../Feedback/NewFeedback.cs                   |    0
 .../IAnalyticsRepository.cs                   |    0
 .../Inbound/DuplicateChecker.cs               |    0
 .../Inbound/FilterResult.cs                   |    0
 .../Inbound/FilterService.cs                  |    0
 .../Handlers/ProcessFeedbackHandler.cs        |    0
 .../Inbound/Handlers/ProcessReportHandler.cs  |    0
 .../Inbound/Handlers/ReOpenIncidentHandler.cs |    0
 .../Handlers/Reports/IReportAnalyzer.cs       |    0
 .../Handlers/Reports/ReportAnalyzer.cs        |    0
 .../Handlers/Reports/ReportDtoConverter.cs    |    0
 .../Inbound/IFilterService.cs                 |    0
 ...IncludeNonPublicMembersContractResolver.cs |    0
 .../Inbound/ReadMe.md                         |    8 +-
 .../Inbound/ReportDecompressor.cs             |    0
 .../Inbound/ReportFilter.cs                   |    0
 .../Inbound/ReportValidator.cs                |    0
 .../Inbound/SaveReportHandler.cs              |    0
 .../Incidents/IncidentBeingAnalyzed.cs        |    0
 .../Incidents/IncidentCreatedHandler.cs       |    0
 .../Incidents/IncidentHashMapEntry.cs         |    0
 .../Incidents/IncidentState.cs                |    0
 ...IncludeNonPublicMembersContractResolver.cs |    0
 .../AggregateIncidentEventsSubscriber.cs      |  110 +
 .../Logs/StoreLogEntriesHandler.cs            |    0
 .../Scanners/TryToAnalyzeInvalidReports.cs    |    0
 .../Events/FindPartitionsInNewReports.cs      |   99 +
 .../Partitions/InboundDTO.cs                  |   18 +
 .../Partitions/Jobs/FindIncidentsToTagJob.cs  |   47 +
 .../Jobs/ProcessInboundPartitionValuesJob.cs  |  163 ++
 .../ReportSpikes/Entities/SpikeAggregation.cs |    0
 .../IncreaseSpikeCountOnReportAdded.cs        |    0
 .../ReportSpikes/IReportSpikeRepository.cs    |    0
 .../ReportSpikes/Jobs/FindSpikesToNotifyOn.cs |    0
 .../ReportSpikes/NewSpike.cs                  |    0
 .../ReportsExtensions.cs                      |    0
 .../Adapters/ApplicationInfoAdapter.cs        |    0
 .../Similarities/Adapters/CustomField.cs      |    0
 .../Adapters/ExceptionPropertiesAdapter.cs    |    0
 .../Adapters/IAdapterRepository.cs            |    0
 .../Similarities/Adapters/IValueAdapter.cs    |    0
 .../Similarities/Adapters/NamespaceDoc.cs     |    0
 .../Adapters/Normalizers/MemoryNormalizer.cs  |    0
 .../Adapters/Normalizers/NumberNormalizer.cs  |    0
 .../Adapters/Old/ProcessorTimeAdapter.cs      |    0
 .../Adapters/OperatingSystemAdapter.cs        |    0
 .../OperatingSystems/OperatingSystemSku.cs    |    0
 .../OperatingSystems/OsProductSuite.cs        |    0
 .../Adapters/Runner/AdapterRepository.cs      |    0
 .../Similarities/Adapters/UserAgentAdapter.cs |    0
 .../Adapters/ValueAdapterContext.cs           |    0
 .../DeleteAbandonedSimilarities.cs            |    0
 .../Processing/ISimilarityRepository.cs       |    0
 .../Handlers/Processing/NamespaceDoc.cs       |    0
 .../Handlers/Processing/WmiDateConverter.cs   |    0
 .../UpdateSimilaritiesFromNewReport.cs        |    0
 .../Similarities/SimilarityAnalyzer.cs        |    0
 .../AssemblyScanningTagIdentifierProvider.cs  |    0
 .../Handlers/IdentifyTagsFromIncident.cs      |    0
 .../Handlers/IncidentReopenedHandler.cs       |    0
 .../Tagging/ITagIdentifier.cs                 |    0
 .../Tagging/ITagIdentifierProvider.cs         |    0
 .../Tagging/Identifiers/AdoNetIdentifier.cs   |    0
 .../AspNetMvcAndWebApiIdentifier.cs           |    0
 .../Tagging/Identifiers/CSharpIdentifier.cs   |    0
 .../Tagging/Identifiers/ConsoleApplication.cs |    0
 .../Tagging/Identifiers/Datacontract.cs       |    0
 .../Identifiers/EntityFrameworkIdentifier.cs  |    0
 .../Tagging/Identifiers/JsonNetIdentifier.cs  |    0
 .../Tagging/Identifiers/LinqIdentifier.cs     |    0
 .../Tagging/Identifiers/MarkdownSharp.cs      |    0
 .../Tagging/Identifiers/NHibernate.cs         |    0
 .../Tagging/Identifiers/RazorIdentifier.cs    |    0
 .../Identifiers/SqlServerIdentifier.cs        |    0
 .../Tagging/Identifiers/WcfIdentifier.cs      |    0
 .../Tagging/Identifiers/WinFormsIdentifier.cs |    0
 .../Tagging/IocIdentifierProvider.cs          |    0
 .../Tagging/TagIdentifierContext.cs           |    0
 .../Triggers/ActionConfigurationData.cs       |    0
 .../Triggers/ActionExecutionContext.cs        |    0
 .../Triggers/Actions/HttpPostAction.cs        |    0
 .../Triggers/Actions/ITriggerAction.cs        |    0
 .../Triggers/Actions/NotifyActionType.cs      |    0
 .../Actions/NotifyUsersActionSettings.cs      |    0
 .../Triggers/Actions/SendEmail.cs             |    0
 .../Triggers/Actions/SendSmsAction.cs         |    0
 .../Triggers/Actions/Tools/GSMEncoding.cs     |    0
 .../Triggers/CollectionMetadata.cs            |    0
 .../Triggers/FilterCondition.cs               |    0
 .../Triggers/FilterContext.cs                 |    0
 .../Triggers/FilterResult.cs                  |    0
 .../Triggers/Filters/NamespaceDoc.cs          |    0
 .../Handlers/Actions/ITriggerActionFactory.cs |    0
 .../Handlers/TriggerFiltersOnReportAdded.cs   |    0
 .../UpdateCollectionsOnReportAdded.cs         |    0
 .../Triggers/ITriggerRepository.cs            |    0
 .../Triggers/ITriggerRule.cs                  |    0
 .../Triggers/LastTriggerAction.cs             |    0
 .../Triggers/Rules/ContextCollectionRule.cs   |    0
 .../Triggers/Rules/ExceptionRule.cs           |    0
 .../Triggers/Rules/RuleBase.cs                |    0
 .../ServiceLocatorTriggerActionFactory.cs     |    0
 .../Triggers/Trigger.cs                       |    0
 .../Triggers/TriggerActionNameAttribute.cs    |    0
 .../Triggers/TriggerExecutionContext.cs       |    0
 .../BrowserNotificationConfig.cs              |    0
 .../UserNotifications/Dtos/Notification.cs    |    0
 .../Dtos/NotificationAction.cs                |    0
 ...kForNotificationsToSendOnReportReceived.cs |    0
 ...kForNotificationsToSendOnReportRecevied.cs |    0
 .../SendBrowserNotificationHandler.cs         |    0
 .../Handlers/Tasks/SendIncidentEmail.cs       |    0
 .../Handlers/Tasks/SendIncidentSms.cs         |    0
 .../UserNotifications/INotificationService.cs |    0
 .../UserNotifications/IWebPushClient.cs       |    0
 .../InvalidSubscriptionException.cs           |    0
 ...R.Server.ReportAnalyzer.csproj.DotSettings |    0
 1878 files changed, 16703 insertions(+), 5882 deletions(-)
 create mode 100644 src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/Coderr.Server.Plugins.AzureDevOps.SqlServer.csproj
 create mode 100644 src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/DevOps/SettingsMapper.cs
 create mode 100644 src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/DevOps/SettingsRepository.cs
 rename src/Server/{ => App}/Coderr.Server.Api.Client.Tests/Coderr.Server.Api.Client.Tests.csproj (100%)
 rename src/Server/{ => App}/Coderr.Server.Api.Client.Tests/TryTheClient.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api.Client/Coderr.Server.Api.Client.csproj (93%)
 rename src/Server/{ => App}/Coderr.Server.Api.Client/Json/IncludeNonPublicMembersContractResolver.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api.Client/ServerApiClient.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api.Client/StringBuilderExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/AuthorizeAttribute.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Coderr.Server.Api.csproj (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/CommandAttribute.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Commands/DeclineInvitation.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Commands/RegisterAccount.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Commands/RequestPasswordReset.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Events/AccountActivated.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Events/AccountRegistered.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Events/InvitationAccepted.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Events/LoginFailed.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/AccountDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/AccountStateDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserName.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserNameResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/GetAccountById.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/GetAccountEmailById.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/ListAccounts.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/ReadMe.md (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/RegisterSimple.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Requests/AcceptInvitation.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Requests/ChangePassword.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Requests/ReadMe.md (98%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Accounts/Requests/ValidateNewLoginReply.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Commands/CreateApiKey.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Commands/DeleteApiKey.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Commands/EditApiKey.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyCreated.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyRemoved.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKey.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResultApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeys.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ApiKeys/ReadMe.md (94%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/ApplicationListItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/AddTeamMember.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/CreateApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/CreateApplicationGroup.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/DeleteApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/DeleteApplicationGroup.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/MapApplicationsToGroup.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/MuteStatisticsQuestion.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/RemoveTeamMember.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/RenameApplicationGroup.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/SetApplicationGroup.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/UpdateApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Commands/UpdateRoles.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Events/ApplicationCreated.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Events/ApplicationDeleted.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Events/ApplicationGroupCreated.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Events/UserAddedToApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Events/UserInvitedToApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMap.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroups.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKey.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKeyResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfo.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfoResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationList.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverview.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverviewResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeam.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamMember.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResultInvitation.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/OverviewStatSummary.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/Queries/PartitionOverview.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/ReadMe.md (98%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Applications/TypeOfApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Environments/Commands/CreateEnvironment.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Environments/Commands/ResetEnvironment.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Environments/Commands/UpdateEnvironment.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Environments/Queries/GetEnvironments.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Feedback/Commands/SubmitFeedback.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Feedback/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Feedback/ReadMe.md (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Commands/AssignIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Commands/CloseIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Commands/DeleteIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Commands/IgnoreIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Commands/NotifySubscribers.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Commands/ReOpenIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Events/IncidentAssigned.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Events/IncidentClosed.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Events/IncidentDeleted.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Events/IncidentIgnored.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/IncidentOrder.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/IncidentSummaryDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/FindIncidents.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetCollection.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePage.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePageResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatistics.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatisticsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/HighlightedContextData.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/QuickFact.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/RelatedIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/ReportDay.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/Queries/SuggestedIncidentSolution.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Incidents/ReadMe.md (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Invitations/Commands/DeleteInvitation.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Invitations/Commands/InviteUser.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Invitations/Events/InvitationDeleted.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Invitations/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKey.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKeyResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Invitations/ReadMe.md (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/Commands/NamespaceDoc.cs (100%)
 rename src/Server/{Coderr.Server.Api/Core/Users => App/Coderr.Server.Api/Core/Messaging/Commands}/ReadMe.md (96%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/Commands/SendEmail.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/Commands/SendSms.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/Commands/SendTemplateEmail.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/EmailAddress.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/EmailMessage.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/EmailResource.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Messaging/ReadMe.md (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Notifications/AddNotification.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/ReadMe.md (96%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/ContextCollectionDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/Queries/GetReport.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/Queries/GetReportException.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/Queries/GetReportList.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/Queries/GetReportListResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/Queries/GetReportListResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/Queries/GetReportResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/Queries/GetReportResultContextCollection.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/Queries/KeyValuePair.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/ReadMe.md (98%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/ReportDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/ReportExeptionDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Reports/ReportExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSetting.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Settings/Queries/GetAccountSetting.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Support/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Support/ReadMe.md (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Support/SendSupportRequest.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/Commands/DeleteBrowserSubscription.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/Commands/StoreBrowserSubscription.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/Commands/UpdateNotifications.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/Commands/UpdatePersonalSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/NotificationSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/NotificationState.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/Queries/GetUserSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Core/Users/Queries/GetUserSettingsResult.cs (100%)
 rename src/Server/{Coderr.Server.Api/Core/Messaging/Commands => App/Coderr.Server.Api/Core/Users}/ReadMe.md (96%)
 rename src/Server/{ => App}/Coderr.Server.Api/EnumExtensions.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.Api/Escalation/Events/IncidentEscalated.cs
 rename src/Server/{ => App}/Coderr.Server.Api/EventAttribute.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/IgnoreFieldAttribute.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Commands/SaveUserKeyMetricConfiguration.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightResultApplication.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightResultIndicator.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsights.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightsResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetric.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitions.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitionsResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitionsResultItem.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricResultItem.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurations.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurationsResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurationsResultItem.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/MetricToplistItem.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/TrendLine.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Insights/Queries/TrendLineValue.cs
 rename src/Server/{ => App}/Coderr.Server.Api/MessageAttribute.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilarities.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesCollection.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesSimilarity.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesValue.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummary.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummaryResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForState.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Logs/Queries/GetLogs.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntry.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntryLevel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Logs/Queries/HasLogs.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Logs/Queries/HasLogsReply.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidents.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Mine/Queries/ListMySuggestedItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Onboarding/Commands/SetOnboardingChoices.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingState.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingStateResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Tagging/Events/TagAttachedToIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Tagging/Queries/GetTags.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Tagging/TagDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/Commands/CreateTrigger.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/Commands/DeleteTrigger.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/Commands/UpdateTrigger.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/LastTriggerActionDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadata.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadataItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/Queries/GetTrigger.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggerDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggersForApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/TriggerActionDataDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/TriggerContextRule.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/TriggerDTO.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/TriggerExceptionRule.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/TriggerFilterCondition.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/TriggerRuleAction.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Triggers/TriggerRuleBase.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistory.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultMonth.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultSet.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Commands/AddEntry.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Commands/EditEntry.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Commands/RemoveEntry.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntries.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemApp.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemIp.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Modules/Whitelists/Queries/ResultItemIpType.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/NamespaceDoc.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Commands/CreatePartition.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Commands/DeletePartition.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Commands/UpdatePartition.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartition.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsights.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultApplication.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultIndicator.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultIndicatorValue.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValues.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValuesResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValuesResultItem.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitions.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionsResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionsResultItem.cs
 rename src/Server/{ => App}/Coderr.Server.Api/ReadMe.md (98%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPage.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedback.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResultItem.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Overview/Queries/GetOverview.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Overview/Queries/GetOverviewApplicationResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Overview/Queries/GetOverviewResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Overview/Queries/OverviewStatSummary.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Api/Web/Overview/Queries/PartitionOverview.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.Api/WorkItems/Commands/CreateWorkItem.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindIntegration.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindIntegrationResult.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindWorkItem.cs
 create mode 100644 src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindWorkItemResult.cs
 rename src/Server/{ => App}/Coderr.Server.App.Tests/App.config (96%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Coderr.Server.App.Tests.csproj (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/ConfigWrapper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Configuration/ConfigurationCategoryExtensionsTests.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Configuration/DictionaryExtensionsTests.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Configuration/TestEntitites/MySection.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Configuration/TestEntitites/NonExistantSection.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Configuration/TestEntitites/SoCultural.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Configuration/TestEntitites/WriteTestSection.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Core/Accounts/AccountTests.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Core/Accounts/CommandHandlers/RegisterAccountHandlerTests.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Core/ApiKeys/ApiKeyTests.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Core/Applications/Commands/InviteUserHandlerTests.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Core/Invitations/Commands/InvitationServiceTests.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/NSubstituteExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/ObjectExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/PrincipalHelper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/ReposExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/TestStore.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App.Tests/Web/Overview/Queries/GetOverviewApplicationResultTests.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.App/ActiveDirectory/AzureDirectoryService.cs
 rename src/Server/{ => App}/Coderr.Server.App/AppType.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Coderr.Server.App.csproj (71%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/AccountService.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/CommandHandlers/Entities/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterAccountHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterSimpleHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/CommandHandlers/RequestPasswordResetHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/CommandHandlers/Templates/ResetPassword/Template.md (96%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/IAccountService.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/NamespaceDoc.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/Queries/FindAccountByUserNameHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/Queries/GetAccountQueryHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Accounts/ReadMe.md (97%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/ApiKeys/ApiKey.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/ApiKeys/Events/ApplicationDeletedHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/ApiKeys/IApiKeyRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/ApiKeys/ReadMe.md (95%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/AddTeamMemberHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/CreateApplicationHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/DeleteApplicationHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/MapApplicationsToGroupHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/MuteStatsHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/RemoveTeamMemberHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/RenameGroupHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateApplicationHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateRolesHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/EventHandlers/UpdateTeamOnInvitationAccepted.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationInfoHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationTeamHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Applications/QueryHandlers/GetMyApplications.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Environments/ApplicationEnvironment.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Environments/Environment.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Environments/Handlers/CreateEnvironmentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Environments/Handlers/GetEnvironmentsHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Environments/Handlers/ResetEnvironmentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Environments/Handlers/UpdateEnvironmentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Environments/IEnvironmentRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/ErrorReports/Queries/FindReportHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Incidents/Commands/AssignIncidentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Incidents/Commands/CloseIncidentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Incidents/Commands/DeleteIncidentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Incidents/Commands/IgnoreIncidentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Incidents/Commands/NotifySubscribersHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Incidents/Commands/ReOpenIncidentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Incidents/Jobs/DeleteOldIncidents.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Invitations/ApplicationInvitation.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Invitations/CommandHandlers/AcceptInvitationHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Invitations/CommandHandlers/DeleteInvitationHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Invitations/CommandHandlers/InviteUserHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Invitations/IInvitationRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Invitations/Invitation.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Notifications/Commands/AddNotificationHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Notifications/Commands/DeleteBrowserSubscriptionHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Notifications/Commands/StoreBrowserSubscriptionHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Notifications/EventHandlers/ApplicationDeletedHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Notifications/INotificationsRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Reports/Jobs/DeleteReportsBelowReportLimit.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Reports/PagedReports.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Reports/Queries/GetReportHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Support/SendSupportRequestHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Users/EventHandlers/CreateOnNewAccount.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Users/WebApi/GetUserSettingsHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Users/WebApi/UpdateNotificationsHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Core/Users/WebApi/UpdatePersonalSettingsHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/CustomDictionary.xml (95%)
 create mode 100644 src/Server/App/Coderr.Server.App/DateExtensions.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Escalation/EscalateOnTagAttached.cs
 rename src/Server/{ => App}/Coderr.Server.App/GlobalSuppressions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/GlobalSuppressions.cs.orig (100%)
 create mode 100644 src/Server/App/Coderr.Server.App/HighlightedData/CustomContextDataProvider.cs
 create mode 100644 src/Server/App/Coderr.Server.App/HighlightedData/RequestProvider.cs
 create mode 100644 src/Server/App/Coderr.Server.App/HighlightedData/SuppliedHighlightedDataProvider.cs
 create mode 100644 src/Server/App/Coderr.Server.App/IncidentInsights/GetInsightsHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/IncidentInsights/IIncidentProgressRepository.cs
 create mode 100644 src/Server/App/Coderr.Server.App/IncidentInsights/IncidentProgressCacheKey.cs
 create mode 100644 src/Server/App/Coderr.Server.App/IncidentInsights/IncidentProgressRepository.cs
 create mode 100644 src/Server/App/Coderr.Server.App/IncidentInsights/InsightConfiguration.cs
 create mode 100644 src/Server/App/Coderr.Server.App/IncidentInsights/Subscribers/AggregateIncidentEventsSubscriber.cs
 create mode 100644 src/Server/App/Coderr.Server.App/IncidentInsights/Subscribers/FillFromHistoryJob.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/ContextExtensions.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/DecimalExtensions.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/IndicatorValueComparison.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/ItemWithCount.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/ItemWithDuration.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/MonthDuration.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/VersionIndicator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorRepository.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorValue.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorValueMapper.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/IKeyPerformanceIndicatorGenerator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorContext.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorScore.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorTopListItem.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/MathExtensions.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Keyfigures/TrendLineExtensions.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Metrics/GetKeyMetricHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Metrics/IKeyMetricGenerator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDataResult.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDataResultItem.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDefinitionAttribute.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricGeneratorContext.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Insights/Metrics/Metric.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/Count/AssignedIncidentsMetricGenerator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/Count/ClosedIncidentsMetricGenerator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/Count/NewIncidentsMetricGenerator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/DbEntities/CountRow.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/DbEntities/DurationRow.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/Duration/NewDurationMetricGenerator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/Duration/WorkDurationMetricGenerator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/IMetricGenerationContext.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/IMetricGenerator.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/Metric.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/MetricAttribute.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/MetricConfiguration.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/MetricDefinition.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/MetricExtensions.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/TimeDefinition.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Metrics/Users/CloserMetricGenerator.cs
 rename src/Server/{ => App}/Coderr.Server.App/Modules/History/Events/IncidentAssignedHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/History/Events/IncidentClosedHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/History/Events/IncidentCreatedHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/History/Events/IncidentIgnoredHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/History/Events/IncidentReOpenedHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/History/Queries/GetIncidentStateSummaryHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Logs/Handlers/GetLogsHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Logs/Handlers/HasLogsHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Commands/DotNetSmtpSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Commands/SendEmailHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Commands/SendTemplateEmailHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/ITemplateParser.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Template.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/DateFormatter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Formatting/JObjectReflector.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Formatting/ObjectToDictionaryConverter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Token.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Tokenizer.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/ImageHelper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Layout/Template.html (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Layout/logo2.png (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/Size.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/TemplateLoader.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Messaging/Templating/TemplateParser.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Mine/IRecommendationProvider.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Mine/IRecommendationService.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Mine/RecommendIncidentContext.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Mine/RecommendationService.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Mine/RecommendedIncident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/MonthlyStats/AppResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/MonthlyStats/ApplicationUsageStatisticsDto.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/MonthlyStats/CollectStatsJob.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/MonthlyStats/UsageStatisticsDto.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/MonthlyStats/UsageStatsSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Onboarding/Commands/SetOnboardingChoicesHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Onboarding/OnboardingSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Onboarding/Queries/GetOnboardingStateHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForApplicationHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForIncidentHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/ActionConfigurationData.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Commands/CreateTriggerHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Commands/DtoToDomainConverters.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Commands/UpdateTriggerHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/DomainTriggerRuleJsonConverter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/FilterCondition.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/FilterResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/ITriggerRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/JsonCreationConverter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/LastTriggerAction.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Queries/DomainToDtoConverters.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Queries/GetTriggerHandler.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Rules/ContextCollectionRule.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Rules/ExceptionRule.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Rules/RuleBase.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Triggers/Trigger.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Versions/NewVersionReported.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Versions/VersionQuickFactProvider.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Whitelists/IWhitelistRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Whitelists/IWhitelistService.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Whitelists/IpType.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Whitelists/Whitelist.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Whitelists/WhitelistService.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.App/Modules/Whitelists/WhitelistedDomainIp.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Commands/CreatePartitionHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Commands/DeletePartitionHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Commands/UpdatePartitionHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Events/ProvidePartitionsAsFacts.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Events/SuggestPartitionIncidents.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Inflector.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitions.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitionsResult.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitionsResultItem.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionsHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurations.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurationsResult.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurationsResultItem.cs
 create mode 100644 src/Server/App/Coderr.Server.App/PossibleSolutions/SqlServer/MissingTable.cs
 create mode 100644 src/Server/App/Coderr.Server.App/PossibleSolutions/SqlServer/ZombieConnections.cs
 create mode 100644 src/Server/App/Coderr.Server.App/PossibleSolutions/Web/LiveWriterSolutionProvider.cs
 create mode 100644 src/Server/App/Coderr.Server.App/PossibleSolutions/Web/SiteManifest.cs
 create mode 100644 src/Server/App/Coderr.Server.App/PossibleSolutions/Web/WellKnownUri.cs
 rename src/Server/{ => App}/Coderr.Server.App/ReadMe.md (96%)
 create mode 100644 src/Server/App/Coderr.Server.App/Tags/Events/NotifyOnAttachedTags.cs
 create mode 100644 src/Server/App/Coderr.Server.App/Tags/Services/RecommendUsingTags.cs
 create mode 100644 src/Server/App/Coderr.Server.App/WorkItems/Commands/CreateWorkItemHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/WorkItems/Events/AssignWorkItemWhenIncidentAssigned.cs
 create mode 100644 src/Server/App/Coderr.Server.App/WorkItems/Events/CloseWorkItemWhenIncidentClosed.cs
 create mode 100644 src/Server/App/Coderr.Server.App/WorkItems/Queries/FindIntegrationHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/WorkItems/Queries/FindWorkItemHandler.cs
 create mode 100644 src/Server/App/Coderr.Server.App/WorkItems/WorkItemIntegrationMapping.cs
 create mode 100644 src/Server/App/Coderr.Server.App/WorkItems/WorkItemServiceProvider.cs
 create mode 100644 src/Server/App/Coderr.Server.App/WorkItems/WorkItemServiceRegistrar.cs
 rename src/Server/{ => App}/Coderr.Server.App/codeRR.Server.App.csproj.DotSettings (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Coderr.Server.Domain.csproj (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Account/Account.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Account/AccountState.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Account/IAccountRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Applications/Application.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Applications/ApplicationRole.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Applications/ApplicationTeamMember.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Applications/IApplicationRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Applications/TypeOfApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Applications/UserApplication.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/ErrorReports/ErrorReportContextCollection.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/ErrorReports/ErrorReportEntity.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/ErrorReports/ErrorReportException.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/ErrorReports/IReportsRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/ErrorReports/ReportMapping.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/ErrorReports/ReportsExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Feedback/IFeedbackRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Feedback/UserFeedback.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Incidents/EscalationState.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Incidents/Events/IncidentCreated.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Incidents/Events/IncidentReOpened.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Incidents/IIncidentRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Incidents/Incident.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Incidents/IncidentSolution.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/Incidents/IncidentState.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/User/IUserRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Core/User/User.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/EntityNotFoundException.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersion.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersionMonth.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/ApplicationVersions/IApplicationVersionRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/ErrorOrigins/ErrorOrigin.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/History/HistoryEntry.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/History/IHistoryRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Logs/ILogsRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Logs/LogEntry.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Logs/LogLevel.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.Domain/Modules/Partitions/ApplicationPartitionValue.cs
 create mode 100644 src/Server/App/Coderr.Server.Domain/Modules/Partitions/IPartitionRepository.cs
 create mode 100644 src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentPartitionSummary.cs
 create mode 100644 src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentPartitionValue.cs
 create mode 100644 src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentToTag.cs
 create mode 100644 src/Server/App/Coderr.Server.Domain/Modules/Partitions/PartitionDefinition.cs
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/ReportSpikes/ErrorReportSpike.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Similarities/SimilaritiesReport.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Similarities/Similarity.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Similarities/SimilarityCollection.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Similarities/SimilarityValue.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.Domain/Modules/Statistics/IncidentProgressTracker.cs
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Tags/ITagsRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/Tags/Tag.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/UserNotifications/BrowserSubscription.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/UserNotifications/IUserNotificationsRepository.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/UserNotifications/NotificationState.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/Modules/UserNotifications/UserNotificationSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.Domain/ReadMe.md (97%)
 create mode 100644 src/Server/App/Coderr.Server.WebPush/Coderr.Server.WebPush.csproj
 rename src/Server/{ => App}/Coderr.Server.WebPush/Model/NotificationAction.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Model/PushNotification.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Model/PushSubscription.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Model/VapidDetails.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/ReadMe.md (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Util/ECKeyHelper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Util/EncryptionResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Util/Encryptor.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Util/HmacSha256.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Util/JwsSigner.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Util/UrlBase64Helper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Util/VapidHelper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/Util/VapidHttpHeaders.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/WebPushClient.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebPush/WebPushException.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/.gitignore (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Controllers/AccountController.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Controllers/BootController.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Controllers/MessagingController.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Controllers/SetupController.cs (99%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Controllers/SqlController.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/InstallAuthorizationFilter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Models/AccountViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Models/BasicsViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Models/EmailViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Models/ErrorTrackingViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Models/QueueViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Models/SupportViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Account/Admin.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Messaging/Email.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Basics.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Completed.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Setup/ErrorTracking.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Index.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Stats.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Support.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_JQueryReplacement.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_Layout.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Index.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Tables.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/_ViewImports.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/Views/_ViewStart.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/WizardStepInfo.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Areas/Installation/WizardSteps.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/.editorconfig (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/.gitignore (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/README.md (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/angular.json (83%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/browserslist (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.css
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.ts
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.vue.html
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/home.ts
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/home.vue.html
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/common/services/WorkItemService.ts
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/incidents/impact.ts
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/incidents/impact.vue.html
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.css
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.ts
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.vue.html
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.css
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.ts
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.vue.html
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/next.ts
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/next.vue.html
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/start.css
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Azure/DevOps.ts
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Demo.ts
 rename src/Server/{Coderr.Server.WebSite/ClientApp/src/server-api => App/Coderr.Server.WebSite/ClientApp/dto}/Common/Insights.ts (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Logs.ts
 rename src/Server/{Coderr.Server.WebSite/ClientApp/src/server-api => App/Coderr.Server.WebSite/ClientApp/dto}/Common/WorkItems.ts (100%)
 rename src/Server/{Coderr.Server.WebSite/ClientApp/src/server-api => App/Coderr.Server.WebSite/ClientApp/dto}/Premise/ActiveDirectory.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/e2e/protractor.conf.js (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/e2e/src/app.e2e-spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/e2e/src/app.po.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/e2e/tsconfig.e2e.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/ngserve.cmd (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/package-lock.json (92%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/package.json (62%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/Dropdown.js (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/Dropdown.js.map (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/Dropdown.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/Guide.js (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/Guide.js.map (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/Guide.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.ts (94%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/PromiseWrapper.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/controls.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.module.ts (90%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.ts (99%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.html (96%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.ts (95%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.ts (96%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.ts (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.ts (98%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/app.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/app.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/app.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/app.server.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.ts (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.ts (99%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environments.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.ts (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.ts (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.html (54%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.ts (98%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.ts (95%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partitions.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/application.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.ts (98%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.ts (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.ts (94%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/cloud/cloud.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/commercial/c/c.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/commercial/commercial.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/devops.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.html (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/commercial/security/security.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/home.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/IncidentConverter.ts (99%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.ts (92%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.ts (96%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.ts (93%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.ts (98%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.ts (94%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.ts (93%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.ts (98%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.ts (94%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.ts (92%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.css
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.html
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.ts
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/premise.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/teams.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/services/HubEntity.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.ts (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/utils/HttpClient.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/utils/ModalDialog.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/utils/SubjectList.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/utils/modal.dialog.service.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.ts (92%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/app/validation.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/assets/.gitkeep (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/assets/Spinner-1s-200px.svg (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/environments/environment.prod.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/environments/environment.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/index.html (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/karma.conf.js (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/main.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/pipes/ago.pipe.ts (99%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/pipes/iso-date.pipe.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/pipes/pipe.module.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/polyfills.ts (82%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Azure/DevOps.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Demo.ts (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Insights.ts
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Logs.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Mine.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Partitions.ts (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/WorkItems.ts
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Accounts.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/ApiKeys.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Applications.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Environments.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Feedback.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Incidents.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Invitations.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Messaging.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Notifications.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Reports.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Support.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Users.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Whitelist.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ContextData.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ErrorOrigins.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/History.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Onboarding.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Tagging.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Triggers.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Versions.ts (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Premise/ActiveDirectory.ts
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Feedback.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Overview.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.spec.ts (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.ts (91%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/_mixins.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/backgrounds.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/buttons.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/checkbox.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/coderr-variables.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/forms.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/image.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/layout.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/radio.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/reset.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/tables.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/topnav.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/_partials/typography.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/styles/site.scss (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/test.ts (88%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/tsconfig.app.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/tsconfig.server.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/tsconfig.spec.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/src/tslint.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/tsconfig.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ClientApp/tslint.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Coderr.Server.WebSite.csproj (81%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/AccountController.cs (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/AuthenticationController.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/CqsController.cs (99%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/FeedbackReceiverController.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/GoController.cs (92%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/HomeController.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/OnboardingController.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/PushController.cs (99%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Controllers/ReportReceiverController.cs (97%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Dockerfile_Linux (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Dockerfile_Windows (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Hubs/CoderrHub.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Hubs/HubEntity.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Hubs/HubEvent.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Hubs/HubSession.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Hubs/HubSubscribe.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Hubs/WebSocketHub.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/AuthenticationSchemeProvider2.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/DbTransactionExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/LookupNormalizer.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/MyIdentityErrorDescriber.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/MySigninManager.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/MyUserManager.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/UserClaimStore.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/UserClaimsFactory.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/UserConfirmation.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Identity/UserStore.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationSectionWrapper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationWrapper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/CqsObjectMapperConfigurationContext.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/DependencyInjectionAdapter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/HandlerScopeWrapper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/FakeLogScope.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogAdapter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogFactoryAdapter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/ReportConfigWrapper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Adapters/ServiceScopeWrapper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthOptions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthenticator.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/AppModuleStarter.cs (88%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Boot/PrincipalWrapper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/CoderrStartup.cs (88%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/AzureQueueProvider.cs
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ExecuteDirectlyMessageBus.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/IncludeNonPublicAndUseCamelCaseContractResolver.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/RoutingMessageBus.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeCommitter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeFactory.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Cqs/CqsObjectMapper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Cqs/RegisterCqsServices.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Filters/PrincipalActionFilter.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Filters/TransactionalAttribute.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/JwtHelper.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/JwtSettings.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/KeyValuePairConverter.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/Infrastructure/Logging/MyLogAdapter.cs
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServiceManagerSettingsWithDefaultOn.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServices.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForAnalyzer.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForApp.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Modules/DbConnectionConfig.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/Modules/RegisterContainerServices.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/Infrastructure/MyUow.cs
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/PendingRequestTrackingMiddleware.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/Infrastructure/Premise/PremiseStart.cs
 create mode 100644 src/Server/App/Coderr.Server.WebSite/Infrastructure/PrincipalActionFilter.cs
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/WebPush/PushClient.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushAppModule.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushReportModule.cs (89%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Infrastructure/WebSockets/IWebSocketHub.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/ModelStateExtensions.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Accounts/AcceptViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Accounts/IsTrueAttribute.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Accounts/LoginResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Accounts/LoginViewmodel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Accounts/RegisterResult.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Accounts/RegisterViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Accounts/RequestPasswordResetViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Accounts/ResetPasswordViewModel.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/ApplicationUser.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/AuthenticatedUser.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/ErrorMessage.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Users/AccountViewModels.cs (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Models/Users/AuthenticatedUser.cs (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/PendingRequestTrackingMiddleware.cs
 rename src/Server/{ => App}/Coderr.Server.WebSite/Program.cs (93%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Properties/launchSettings.json (59%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Properties/serviceDependencies.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Properties/serviceDependencies.local.json (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/ScaffoldingReadMe.txt
 rename src/Server/{ => App}/Coderr.Server.WebSite/Startup.cs (97%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/TracingQueueProvider.cs
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/Accept.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/Activate.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/ActivationRequested.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/ChangePassword.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/InvitationNotFound.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/PasswordRequestReceived.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/Register.cshtml (52%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/RequestPasswordReset.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Account/ResetPassword.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Authentication/Login.cshtml (89%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Home/Index.cshtml (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/Views/Home/Mine.html
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/Shared/_Layout.cshtml (92%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/_ViewImports.cshtml (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/Views/_ViewStart.cshtml (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/appsettings.Development.json
 create mode 100644 src/Server/App/Coderr.Server.WebSite/appsettings.OnPremiseDev.json
 rename src/Server/{ => App}/Coderr.Server.WebSite/appsettings.Publish.json (81%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/appsettings.Test.json (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/appsettings.json (72%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/compilenpm.cmd (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/log4net.config (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/log4net.prod.config (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/log4net.production.config (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/log4net.test.config (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/publish_clean.cmd (100%)
 create mode 100644 src/Server/App/Coderr.Server.WebSite/publish_upgrade.cmd
 create mode 100644 src/Server/App/Coderr.Server.WebSite/tempkey.rsa
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/favicon-16x16.png (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/favicon-32x32.png (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/favicon-96x96.png (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/favicon.ico (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/images/Spinner-1s-200px.svg (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/images/navico.png (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/service-worker.js (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/styles.0833d9396d7aae04dcd9.css (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/styles.css (100%)
 rename src/Server/{ => App}/Coderr.Server.WebSite/wwwroot/styles.css.map (100%)
 delete mode 100644 src/Server/Coderr.Server.PluginApi/Incidents/QuickFactContext.cs
 delete mode 100644 src/Server/Coderr.Server.SqlServer/Coderr - Backup.Server.SqlServer.csproj
 delete mode 100644 src/Server/Coderr.Server.SqlServer/Coderr.Server.SqlServer.csproj
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/App.config
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Coderr.Server.Web.Tests.csproj
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Helpers/Extensions/WebDriverExtensions.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Helpers/IisExpressHelper.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/BrowserAttribute.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/BrowserType.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/DriverFactory.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Helpers/xUnit/TestCaseOrderer.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Helpers/xUnit/TestPriorityAttribute.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/Account/ActivationRequestedPage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/Account/LoginPage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/Account/LogoutPage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/Account/RegisterPage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/ApplicationPage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/BasePage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/ConfigureApplicationPage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/HomePage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/IPage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/IncidentsPage.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Pages/PageHelper.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/AdminUserTests.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/ConfigureApplicationPageTests.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/HomePageTests.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/IncidentsPageTests.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/LoggedInTest.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/LoginPageTests.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/NavigationTests.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/RegisterPageTests.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/Tests/UserTests.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/WebTest.cs
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/applicationhost.config
 delete mode 100644 src/Server/Coderr.Server.Web.Tests/applicationhost.tt
 delete mode 100644 src/Server/Coderr.Server.WebPush/Coderr.Server.WebPush.csproj
 delete mode 100644 src/Server/Coderr.Server.WebSite/appsettings.Development.json
 delete mode 100644 src/Server/Coderr.Server.WebSite/publish_upgrade.cmd
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Boot/ConfigurationContext.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Boot/ContainerServiceAttribute.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Boot/IAppModule.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Boot/IConfiguration.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Boot/IConfigurationSection.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Boot/RegisterExtensions.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Boot/StartContext.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Coderr.Server.Abstractions.csproj (80%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Config/ConfigurationCategoryExtensions.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Config/ConfigurationStore.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Config/IConfiguration.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Config/IConfigurationSection.cs (100%)
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/Directory/IDirectoryEntry.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/Directory/IDirectoryService.cs
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/HostConfig.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/IConnectionFactory.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/IGotTransaction.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/IPAddressExtension.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Incidents/HighlightedContextDataProviderContext.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Incidents/IHighlightedContextDataProvider.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Incidents/IQuickfactProvider.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Incidents/ISolutionProvider.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Incidents/QuickFactContext.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Incidents/SolutionProviderContext.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/QueueConfig.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Reports/ReportConfig.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Security/ClaimsExtensions.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Security/CoderrClaims.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Security/CoderrRoles.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/Security/IPrincipalAccessor.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/ServerConfig.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Abstractions/ServerType.cs (100%)
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/IUserMappingRepository.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemRepository.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemService.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemServiceProvider.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemServiceRegistrar.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemDTO.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemMapping.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemState.cs
 create mode 100644 src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemUserMapping.cs
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure.Tests/Coderr.Server.Infrastructure.Tests.csproj (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure.Tests/Messaging/Disk/Queue/DiskFileTests.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure.Tests/UnitTest1.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/ApplicationVersionComparer.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Coderr.Server.Infrastructure.csproj (67%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/CoderrDtoSerializer.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Configuration/BaseConfiguration.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Configuration/CoderrConfigSection.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Configuration/ConfigDictionaryExtensions.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Configuration/Database/DatabaseStore.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/IDatabaseUtilities.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/IPrincipalAccessor.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/IUrlHelper.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/ClaimDto.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/DequeueTracking.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/DiskEntry.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/DiskQueueAdapter.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueProvider.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueSession.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/AdoNetMessageDTO.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/ClaimDto.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/IdentityDto.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/JsonNetDiskSerializer.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Queue/BufferStream.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskFile.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskQueue.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Queue/IContentSerializer.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Queue/ReadState.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Queue/Record.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/Queue/SegmentedReadStream.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Disk/QueueLockFile.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/IRouteRegistrar.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/IncludeNonPublicAndUseCamelCaseContractResolver.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/MessageRouter.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/MessagingSerializer.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/QueueManager.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/ShutdownRequestCompletedEventArgs.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/ShuttingDownEventArgs.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Tests/TestMessageWrapper.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Tests/TestQueue.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueProvider.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueSession.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Net/MimeMapping.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Plugins/Configuration.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Plugins/IPlugin.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Plugins/MenuConfiguration.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Plugins/MenuItem.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Security/AuthenticationTypes.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/Security/UpdatesLoggedInAccountAttribute.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/SetupTools.cs (100%)
 rename src/Server/{ => Common}/Coderr.Server.Infrastructure/TypeHelper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Analysis/IncidentBeingAnalyzedMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Coderr.Server.SqlServer.Tests.csproj (82%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/CommonIntegrationTest.cs
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Core/Accounts/AccountRepositoryTests.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/CreateApiKeyHandlerTests.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/DeleteApiKeyHandlerTests.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/GetApiKeyHandlerTests.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/ListApiKeysHandlerTests.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Helpers/DatabaseManager.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Helpers/TestDataManager.cs (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Applications/NewIncidentsIndicatorTests.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Applications/WorkTimeIndicatorTests.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/CloserIndicatorTests.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/OptimistIndicatorTests.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/ProcastinatorIndicatorTests.cs
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/IntegrationTest.cs (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/Mine/ListMyIncidentsQueryHandlerTests.cs
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Models/TestUser.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Modules/Geolocation/ErrorOriginRepositoryTests.cs (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/Partitions/GetPartitionInsightsHandlerTests.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/Partitions/SuggestPartitionIncidentsTests.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/SimpleDbTest.cs
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/TestConfigStore.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Xunit/MethodLogger.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Xunit/XunitTestAssemblyRunnerWithAssemblyFixture.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Xunit/XunitTestCollectionRunnerWithAssemblyFixture.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkExecutorWithAssemblyFixture.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkWithAssemblyFixture.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/app.config (98%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/codeRR.Server.SqlServer.Tests.v3.ncrunchproject (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer.Tests/liveTables.sql
 rename src/Server/{ => Data}/Coderr.Server.SqlServer.Tests/log4net.config (97%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Coderr.Server.SqlServer.csproj
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Accounts/AccountMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Accounts/AccountRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/GetAccountEmailByIdHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/ListAccountsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/ApiKeys/ApiKeyRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/ApiKeys/Commands/CreateApiKeyHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/ApiKeys/Commands/DeleteApiKeyHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/ApiKeys/Commands/EditApiKeyHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/ApiKeyMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/IntMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/ApiKeys/Queries/GetApiKeyHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/ApiKeys/Queries/ListApiKeysHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/ApplicationGroup.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMap.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/ApplicationMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/ApplicationRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/CreateApplicationGroupHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/DeleteApplicationGroupHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/GetApplicationByAppKeyHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupMapHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationIdByKeyHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationOverviewHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Applications/SetApplicationGroupHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Environments/ApplicationEnvironmentMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Environments/DeleteAbandonedEnvironments.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Environments/EnvironmentMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Environments/EnvironmentRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Environments/GetEnvironmentsResultItemMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Feedback/CheckForFeedbackNotificationsToSend.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Feedback/DeleteAbandonedFeedback.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Feedback/FeedbackEntityMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Feedback/FeedbackRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Feedback/SubmitFeedbackHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedFeedback.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedSimilarities.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/IncidentMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/IncidentRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/IncidentSummaryMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentResultItemMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/GetCollectionHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePage.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePageResultMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentResultMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentStatisticsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListResultItemMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Incidents/ReportDayMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Invitations/GetInvitationByKeyHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Invitations/InvitationMapping.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Invitations/InvitationRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Notifications/BrowserSubscriptionMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Notifications/NotificationRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Notifications/NotificationService.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Notifications/UserNotificationSettingsMap.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Reports/ErrorReportDtoMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Reports/ErrorReportRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Reports/ReportMappingMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Settings/AccountSetting.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Settings/AccountSettingMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Users/ApplicationTeamMemberMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Users/UserMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Core/Users/UserRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/DateTimeExtensions.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/DbConverters.cs (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/AppCountGeneratorExtensions.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/AppDurationGeneratorExtensions.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/AssignedCountIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/NewIncidentsIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/RespondTimeIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/SolvedCountIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/WorkTimeIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/CounterIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/DurationIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/GeneratorExtensions.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/IncidentProgressTrackerMapper.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Partitions/PartitionInsight.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/SystemCountGeneratorExtensions.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/SystemDurationGeneratorExtensions.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Users/CloserIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Users/ProcastinatorIndicator.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Insights/Users/TheOptimist.cs
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Logs/LogsRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Migrations/MigrationRunner.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Migrations/MigrationScripts.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginListItem.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Geolocation/GetOriginsForIncidentHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/History/DeleteAbandonedHistory.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/History/GetIncidentsForStatesHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/History/HistoryEntryMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/History/HistoryRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Mine/Incidents/IncidentWithMostReportsProvider.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsQueryHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsResultItemMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Mine/ListMySuggestedItemMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/ReportSpikes/ErrorReportSpikeMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyDbEntity.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyValueDbEntity.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityCollectionMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityValueMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Similarities/Queries/GetSimilaritiesHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Similarities/SimilarityRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Tagging/DoInitialRun.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Tagging/TagsRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Triggers/AppTriggerRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Triggers/CollectionMetadataMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Triggers/DeleteTriggerHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Triggers/GetContextCollectionMetadataHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Triggers/GetTriggersForApplicationHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Triggers/ReportAnalyzerTriggerRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Triggers/TriggerDtoMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Triggers/TriggerMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfig.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfigMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMonthMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/DeleteAbandonedFeedback.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/Queries/GetApplicationVersionsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/Queries/GetVersionHistoryHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/Queries/VersionRange.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/Queries/Versions.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Versions/VersionRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/AddEntryHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/EditEntryHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/GetWhitelistEntriesHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/RemoveDomainHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplication.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplicationMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainIpMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainMapper.cs (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/ApplicationPartitionValuesMapper.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/DeleteAbandonedPartitions.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionInsightsHandler.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionValuesHandler.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionValuesResultItemMapper.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/InboundDtoMapper.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/IncidentPartitionValuesMapper.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/PartitionDefinitionMapper.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Partitions/PartitionsRepository.cs
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReadMe.md (98%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/AnalyticsRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Environments/EnvironmentFilter.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportEntityMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Feedback/LookupReportsForFeedback.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Handlers/ProcessInboundCollectionsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/IncidentBeingAnalyzedMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionProperty.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionPropertyMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/Importer.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollection.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollectionMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/ReportSpikeRepository.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/SpikeAggregationMapper.cs (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v01.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v02.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v03.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v04.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v05.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v06.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v07.sql
 rename src/Server/{Coderr.Server.SqlServer/Schema/Coderr.v29.sql => Data/Coderr.Server.SqlServer/Schema/Common/Common.v08.sql} (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v09.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v10.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v11.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v12.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v13.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v14.sql
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Common/CommonSchemaPointer.cs
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v01.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v02.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v03.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v04.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v05.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v06.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v07.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v08.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v09.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v10.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v11.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v12.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v13.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v14.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v15.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v16.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v17.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v18.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v19.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v20.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v21.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v22.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v23.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v24.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v25.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v26.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v27.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v28.sql (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v29.sql
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v30.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v31.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v32.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v33.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v34.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v35.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/Coderr.v36.sql (100%)
 rename src/Server/{Coderr.Server.SqlServer/Schema => Data/Coderr.Server.SqlServer/Schema/Oss}/CoderrMigrationPointer.cs (73%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/SqlServerTools.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Tools/ConnectionStringHelper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Tools/DbCommandExtensions.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Tools/EntitySerializer.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/UnitOfWorkWithTransaction.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackResultItemMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Web/Feedback/Queries/GetIncidentFeedbackItemsHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackHandler.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackResultItemMapper.cs (100%)
 rename src/Server/{ => Data}/Coderr.Server.SqlServer/Web/Overview/GetOverviewHandler.cs (100%)
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/WorkItems/UserMappingRepository.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemIntegrationMappingMapper.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemMapper.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemRepository.cs
 create mode 100644 src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemUserMappingMap.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Coderr.Server.Plugins.AzureDevOps.Api.csproj
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Commands/SaveAzureSettings.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPaths.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPathsResult.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPathsResultItem.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAzureSettings.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAzureSettingsResult.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterations.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterationsResult.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterationsResultItem.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjects.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjectsResult.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjectsResultItem.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetSettingResultItem.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStates.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStatesResult.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStatesResultItem.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypes.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypesResult.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypesResultItem.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Boot.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/AzureDevOpsClient.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/ClassificationNode.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/Fields.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/IWorkItemClient.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/PatchDocumentExtensions.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/QueryExecutor.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/SettingsClient.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/WorkItemClient.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Coderr.Server.Plugins.AzureDevOps.App.csproj
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Commands/SaveAzureSettingsHandler.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/ISettingsRepository.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Jobs/AddEscalatedErrorsToBacklog.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetAreaPathsHandler.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetAzureSettingsHandler.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetIterationsHandler.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetProjectsHandler.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetWorkItemStatesHandler.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetWorkItemTypesHandler.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Settings.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/AzureDevOpsWorkItemService.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/Jobs/MapUsersJob.cs
 create mode 100644 src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/Jobs/SynchronizeWorkItemsJob.cs
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Boot/ConfigurationContext.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfiguration.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfigurationSection.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IReportAnalyzerModule.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Boot/StartContext.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Coderr.Server.ReportAnalyzer.Abstractions.csproj (79%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntries.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesEntry.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesLogLevel.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/CollectionExtensions.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ContextCollectionDTO.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/IReportConfig.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportDTO.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportExeptionDTO.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Feedback/FeedbackAttachedToIncident.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/IDomainQueue.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/ISaveable.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/InvalidReport.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/NamespaceDoc.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessFeedback.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReport.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportContextInfoDto.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportExceptionDto.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportLogEntry.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ReadMe.md (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NamespaceDoc.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportContextInfo.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportDTO.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportException.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportLogEntry.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/IncidentSummaryDTO.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ProcessContextCollections.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ReportAddedToIncident.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotification.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotificationAction.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/ApplicationVersions/Handlers/GetVersionFromReportTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/Coderr.Server.ReportAnalyzer.Tests.csproj (91%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/Domain/Reports/HashCodeGeneratorTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/ErrorOrigins/Handlers/StoreLocationFromNewReportTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HashCodeGeneratorTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HttpErrorGeneratorTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HashCodeGeneratorTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HttpErrorGeneratorTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/Similarities/Handlers/Processing/WmiDateConverterTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer.Tests/Tagging/IdentifyTagsFromIncidentTests.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/AnalysisUnitOfWork.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ApplicationVersions/Handlers/GetVersionFromReport.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/Adapters/ConfigWrapper.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/Adapters/DomainQueueWrapper.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/Adapters/MessagingPrincipalWrapper.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/Adapters/ScopeWrapper.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigSectionWrapper.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigWrapper.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/IAnalysisModule.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/RegisterExtensions.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerBootstrapper.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerModuleStarter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/Starters/RegisterContainerServices.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Boot/Starters/ReportQueueModule.cs (96%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Coderr.ReportAnalyzer.csproj.DotSettings (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Coderr.Server.ReportAnalyzer.csproj (77%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/OriginsConfiguration.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/StoreLocationFromNewReport.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorOrigins/IErrorOriginRepository.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorOrigins/LookupInboundOrigins.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/ErrorHashCode.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/HashCodeGenerator.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HashCodeUtility.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HttpErrorGenerator.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/LiveWriterGenerator.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/TransactionLogFull.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeGenerator.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeSubGenerator.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ErrorReports/ReportDecompressor.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Feedback/Handlers/AttachFeedbackToIncident.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Feedback/Handlers/StoreFeedbackFromNewReports.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Feedback/IUserFeedbackRepository.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Feedback/NewFeedback.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/IAnalyticsRepository.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/DuplicateChecker.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/FilterResult.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/FilterService.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessFeedbackHandler.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessReportHandler.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ReOpenIncidentHandler.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/IReportAnalyzer.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportAnalyzer.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportDtoConverter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/IFilterService.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/IncludeNonPublicMembersContractResolver.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/ReadMe.md (98%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/ReportDecompressor.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/ReportFilter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/ReportValidator.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Inbound/SaveReportHandler.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Incidents/IncidentBeingAnalyzed.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Incidents/IncidentCreatedHandler.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Incidents/IncidentHashMapEntry.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Incidents/IncidentState.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/IncludeNonPublicMembersContractResolver.cs (100%)
 create mode 100644 src/Server/Reporting/Coderr.Server.ReportAnalyzer/InsidentInsights/AggregateIncidentEventsSubscriber.cs
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Logs/StoreLogEntriesHandler.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Old/Scanners/TryToAnalyzeInvalidReports.cs (100%)
 create mode 100644 src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Events/FindPartitionsInNewReports.cs
 create mode 100644 src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/InboundDTO.cs
 create mode 100644 src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Jobs/FindIncidentsToTagJob.cs
 create mode 100644 src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Jobs/ProcessInboundPartitionValuesJob.cs
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ReportSpikes/Entities/SpikeAggregation.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ReportSpikes/Handlers/IncreaseSpikeCountOnReportAdded.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ReportSpikes/IReportSpikeRepository.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ReportSpikes/Jobs/FindSpikesToNotifyOn.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ReportSpikes/NewSpike.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/ReportsExtensions.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ApplicationInfoAdapter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/CustomField.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ExceptionPropertiesAdapter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IAdapterRepository.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IValueAdapter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/NamespaceDoc.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/MemoryNormalizer.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/NumberNormalizer.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Old/ProcessorTimeAdapter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystemAdapter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OperatingSystemSku.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OsProductSuite.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Runner/AdapterRepository.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/UserAgentAdapter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ValueAdapterContext.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/DeleteAbandonedSimilarities.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/ISimilarityRepository.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/NamespaceDoc.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/WmiDateConverter.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/Handlers/UpdateSimilaritiesFromNewReport.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Similarities/SimilarityAnalyzer.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/AssemblyScanningTagIdentifierProvider.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IdentifyTagsFromIncident.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IncidentReopenedHandler.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifierProvider.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AdoNetIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AspNetMvcAndWebApiIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/CSharpIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/ConsoleApplication.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/Datacontract.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/EntityFrameworkIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/JsonNetIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/LinqIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/MarkdownSharp.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/NHibernate.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/RazorIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/SqlServerIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WcfIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WinFormsIdentifier.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/IocIdentifierProvider.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Tagging/TagIdentifierContext.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/ActionConfigurationData.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/ActionExecutionContext.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Actions/HttpPostAction.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Actions/ITriggerAction.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyActionType.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyUsersActionSettings.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendEmail.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendSmsAction.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Actions/Tools/GSMEncoding.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/CollectionMetadata.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/FilterCondition.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/FilterContext.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/FilterResult.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Filters/NamespaceDoc.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Handlers/Actions/ITriggerActionFactory.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Handlers/TriggerFiltersOnReportAdded.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Handlers/UpdateCollectionsOnReportAdded.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRepository.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRule.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/LastTriggerAction.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Rules/ContextCollectionRule.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Rules/ExceptionRule.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Rules/RuleBase.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/ServiceLocatorTriggerActionFactory.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/Trigger.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/TriggerActionNameAttribute.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/Triggers/TriggerExecutionContext.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/BrowserNotificationConfig.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/Notification.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/NotificationAction.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportReceived.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportRecevied.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/SendBrowserNotificationHandler.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentEmail.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentSms.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/INotificationService.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/IWebPushClient.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/UserNotifications/InvalidSubscriptionException.cs (100%)
 rename src/Server/{ => Reporting}/Coderr.Server.ReportAnalyzer/codeRR.Server.ReportAnalyzer.csproj.DotSettings (100%)

diff --git a/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/Coderr.Server.Plugins.AzureDevOps.SqlServer.csproj b/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/Coderr.Server.Plugins.AzureDevOps.SqlServer.csproj
new file mode 100644
index 00000000..e6033840
--- /dev/null
+++ b/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/Coderr.Server.Plugins.AzureDevOps.SqlServer.csproj
@@ -0,0 +1,18 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.1</TargetFramework>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+  <ItemGroup>
+    <PackageReference Include="DotNetCqs" Version="2.1.1" />
+    <PackageReference Include="Griffin.Framework" Version="2.1.1" />
+    <PackageReference Include="log4net" Version="2.0.14" />
+    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Server\Plugins\Coderr.Server.Plugins.AzureDevOps\Coderr.Server.Plugins.AzureDevOps.App.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/DevOps/SettingsMapper.cs b/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/DevOps/SettingsMapper.cs
new file mode 100644
index 00000000..afdb10b8
--- /dev/null
+++ b/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/DevOps/SettingsMapper.cs
@@ -0,0 +1,13 @@
+﻿using Coderr.Server.Common.AzureDevOps.App.Connections;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Azure.DevOps
+{
+    class SettingsMapper : CrudEntityMapper<Settings>
+    {
+        public SettingsMapper() : base("AzureDevOpsSettings")
+        {
+            Property(x => x.ApplicationId).PrimaryKey(false);
+        }
+    }
+}
diff --git a/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/DevOps/SettingsRepository.cs b/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/DevOps/SettingsRepository.cs
new file mode 100644
index 00000000..5dac7c29
--- /dev/null
+++ b/src/Plugins/Coderr.Server.Plugins.AzureDevOps.SqlServer/DevOps/SettingsRepository.cs
@@ -0,0 +1,42 @@
+﻿using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Common.AzureDevOps.App.Connections;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Azure.DevOps
+{
+    [ContainerService]
+    public class SettingsRepository : ISettingsRepository
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public SettingsRepository(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public async Task<Settings> Get(int applicationId)
+        {
+            return await _unitOfWork.FirstOrDefaultAsync<Settings>(new {ApplicationId = applicationId});
+        }
+
+        public async Task<List<Settings>> GetAll()
+        {
+            return await _unitOfWork.ToListAsync<Settings>("SELECT * From AzureDevOpsSettings");
+        }
+
+        public async Task Save(Settings settings)
+        {
+            if (settings.WorkItemTypeName == "")
+                settings.WorkItemTypeName = null;
+
+            var dbEntity = await Get(settings.ApplicationId);
+            if (dbEntity == null)
+                await _unitOfWork.InsertAsync(settings);
+            else
+                await _unitOfWork.UpdateAsync(settings);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Api.Client.Tests/Coderr.Server.Api.Client.Tests.csproj b/src/Server/App/Coderr.Server.Api.Client.Tests/Coderr.Server.Api.Client.Tests.csproj
similarity index 100%
rename from src/Server/Coderr.Server.Api.Client.Tests/Coderr.Server.Api.Client.Tests.csproj
rename to src/Server/App/Coderr.Server.Api.Client.Tests/Coderr.Server.Api.Client.Tests.csproj
diff --git a/src/Server/Coderr.Server.Api.Client.Tests/TryTheClient.cs b/src/Server/App/Coderr.Server.Api.Client.Tests/TryTheClient.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api.Client.Tests/TryTheClient.cs
rename to src/Server/App/Coderr.Server.Api.Client.Tests/TryTheClient.cs
diff --git a/src/Server/Coderr.Server.Api.Client/Coderr.Server.Api.Client.csproj b/src/Server/App/Coderr.Server.Api.Client/Coderr.Server.Api.Client.csproj
similarity index 93%
rename from src/Server/Coderr.Server.Api.Client/Coderr.Server.Api.Client.csproj
rename to src/Server/App/Coderr.Server.Api.Client/Coderr.Server.Api.Client.csproj
index 83788da5..bdfa224b 100644
--- a/src/Server/Coderr.Server.Api.Client/Coderr.Server.Api.Client.csproj
+++ b/src/Server/App/Coderr.Server.Api.Client/Coderr.Server.Api.Client.csproj
@@ -8,11 +8,11 @@
   </PropertyGroup>
   <PropertyGroup>
     <PackageId>Coderr.Server.ApiClient</PackageId>
-    <Authors>1TCompany AB</Authors>
+    <Authors>Coderr AB</Authors>
     <Description>API client for Coderr Server.</Description>
     <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
     <PackageReleaseNotes>Switched to HttpClient</PackageReleaseNotes>
-    <Copyright>Copyright 2019 © 1TCompany AB. All rights reserved.</Copyright>
+    <Copyright>Copyright 2023 © Coderr AB. All rights reserved.</Copyright>
     <PackageTags>logger exceptions analysis .net-core netstandard</PackageTags>
     <PackageIconUrl>https://coderr.io/images/nuget_icon.png</PackageIconUrl>
     <RepositoryUrl>https://github.com/coderrio/coderr.server</RepositoryUrl>
diff --git a/src/Server/Coderr.Server.Api.Client/Json/IncludeNonPublicMembersContractResolver.cs b/src/Server/App/Coderr.Server.Api.Client/Json/IncludeNonPublicMembersContractResolver.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api.Client/Json/IncludeNonPublicMembersContractResolver.cs
rename to src/Server/App/Coderr.Server.Api.Client/Json/IncludeNonPublicMembersContractResolver.cs
diff --git a/src/Server/Coderr.Server.Api.Client/ServerApiClient.cs b/src/Server/App/Coderr.Server.Api.Client/ServerApiClient.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api.Client/ServerApiClient.cs
rename to src/Server/App/Coderr.Server.Api.Client/ServerApiClient.cs
diff --git a/src/Server/Coderr.Server.Api.Client/StringBuilderExtensions.cs b/src/Server/App/Coderr.Server.Api.Client/StringBuilderExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api.Client/StringBuilderExtensions.cs
rename to src/Server/App/Coderr.Server.Api.Client/StringBuilderExtensions.cs
diff --git a/src/Server/Coderr.Server.Api/AuthorizeAttribute.cs b/src/Server/App/Coderr.Server.Api/AuthorizeAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/AuthorizeAttribute.cs
rename to src/Server/App/Coderr.Server.Api/AuthorizeAttribute.cs
diff --git a/src/Server/Coderr.Server.Api/Coderr.Server.Api.csproj b/src/Server/App/Coderr.Server.Api/Coderr.Server.Api.csproj
similarity index 100%
rename from src/Server/Coderr.Server.Api/Coderr.Server.Api.csproj
rename to src/Server/App/Coderr.Server.Api/Coderr.Server.Api.csproj
diff --git a/src/Server/Coderr.Server.Api/CommandAttribute.cs b/src/Server/App/Coderr.Server.Api/CommandAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/CommandAttribute.cs
rename to src/Server/App/Coderr.Server.Api/CommandAttribute.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Commands/DeclineInvitation.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Commands/DeclineInvitation.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Commands/DeclineInvitation.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Commands/DeclineInvitation.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Commands/RegisterAccount.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Commands/RegisterAccount.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Commands/RegisterAccount.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Commands/RegisterAccount.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Commands/RequestPasswordReset.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Commands/RequestPasswordReset.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Commands/RequestPasswordReset.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Commands/RequestPasswordReset.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Events/AccountActivated.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Events/AccountActivated.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Events/AccountActivated.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Events/AccountActivated.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Events/AccountRegistered.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Events/AccountRegistered.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Events/AccountRegistered.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Events/AccountRegistered.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Events/InvitationAccepted.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Events/InvitationAccepted.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Events/InvitationAccepted.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Events/InvitationAccepted.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Events/LoginFailed.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Events/LoginFailed.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Events/LoginFailed.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Events/LoginFailed.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/AccountDTO.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/AccountDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/AccountDTO.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/AccountDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/AccountStateDTO.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/AccountStateDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/AccountStateDTO.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/AccountStateDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserName.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserName.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserName.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserName.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserNameResult.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserNameResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserNameResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/FindAccountByUserNameResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/GetAccountById.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/GetAccountById.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/GetAccountById.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/GetAccountById.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/GetAccountEmailById.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/GetAccountEmailById.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/GetAccountEmailById.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/GetAccountEmailById.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/ListAccounts.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/ListAccounts.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/ListAccounts.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/ListAccounts.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResult.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResultItem.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Queries/ListAccountsResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Accounts/ReadMe.md
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/ReadMe.md
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/RegisterSimple.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/RegisterSimple.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/RegisterSimple.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/RegisterSimple.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Requests/AcceptInvitation.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/AcceptInvitation.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Requests/AcceptInvitation.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/AcceptInvitation.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Requests/ChangePassword.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/ChangePassword.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Requests/ChangePassword.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/ChangePassword.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Requests/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/ReadMe.md
similarity index 98%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Requests/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/ReadMe.md
index fcddd636..b3027e17 100644
--- a/src/Server/Coderr.Server.Api/Core/Accounts/Requests/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/ReadMe.md
@@ -1,3 +1,3 @@
-﻿These are now part of the AccountService and will be moved there.
-
+﻿These are now part of the AccountService and will be moved there.
+
 The API will rather be HTTP services in the future, where these messages are DTOs
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Api/Core/Accounts/Requests/ValidateNewLoginReply.cs b/src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/ValidateNewLoginReply.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Accounts/Requests/ValidateNewLoginReply.cs
rename to src/Server/App/Coderr.Server.Api/Core/Accounts/Requests/ValidateNewLoginReply.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Commands/CreateApiKey.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Commands/CreateApiKey.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Commands/CreateApiKey.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Commands/CreateApiKey.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Commands/DeleteApiKey.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Commands/DeleteApiKey.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Commands/DeleteApiKey.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Commands/DeleteApiKey.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Commands/EditApiKey.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Commands/EditApiKey.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Commands/EditApiKey.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Commands/EditApiKey.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyCreated.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyCreated.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyCreated.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyCreated.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyRemoved.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyRemoved.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyRemoved.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Events/ApiKeyRemoved.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKey.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKey.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKey.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKey.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResult.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResultApplication.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResultApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResultApplication.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/GetApiKeyResultApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeys.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeys.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeys.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeys.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResult.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResultItem.cs b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/Queries/ListApiKeysResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ApiKeys/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/ReadMe.md
similarity index 94%
rename from src/Server/Coderr.Server.Api/Core/ApiKeys/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/ApiKeys/ReadMe.md
index 92f887cc..82f28e84 100644
--- a/src/Server/Coderr.Server.Api/Core/ApiKeys/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Api/Core/ApiKeys/ReadMe.md
@@ -1,32 +1,32 @@
-﻿ApiKeys
-========
-
-Used to allow external applications to talk with codeRR.
-
-
-## Example usage
-
-The following example calls a local codeRR server to retreive applications.
-
-```csharp
-var client = new ServerApiClient();
-var uri = new Uri("http://yourServer/coderr/");
-client.Open(uri, "theApiKey", "sharedSecret");
-var apps = await client.QueryAsync(new GetApplicationList());
-```
-
-Result (serialized as JSON):
-
-```javascript
-[{
-		"Id" : 1,
-		"Name" : "PublicWeb"
-	}, {
-		"Id" : 9,
-		"Name" : "Time reporting system"
-	}, {
-		"Id" : 10,
-		"Name" : "Coffee monitor"
-	}
-]
-```
+﻿ApiKeys
+========
+
+Used to allow external applications to talk with codeRR.
+
+
+## Example usage
+
+The following example calls a local codeRR server to retreive applications.
+
+```csharp
+var client = new ServerApiClient();
+var uri = new Uri("http://yourServer/coderr/");
+client.Open(uri, "theApiKey", "sharedSecret");
+var apps = await client.QueryAsync(new GetApplicationList());
+```
+
+Result (serialized as JSON):
+
+```javascript
+[{
+		"Id" : 1,
+		"Name" : "PublicWeb"
+	}, {
+		"Id" : 9,
+		"Name" : "Time reporting system"
+	}, {
+		"Id" : 10,
+		"Name" : "Coffee monitor"
+	}
+]
+```
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/ApplicationListItem.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/ApplicationListItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/ApplicationListItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/ApplicationListItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/AddTeamMember.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/AddTeamMember.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/AddTeamMember.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/AddTeamMember.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/CreateApplication.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/CreateApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/CreateApplication.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/CreateApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/CreateApplicationGroup.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/CreateApplicationGroup.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/CreateApplicationGroup.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/CreateApplicationGroup.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/DeleteApplication.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/DeleteApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/DeleteApplication.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/DeleteApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/DeleteApplicationGroup.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/DeleteApplicationGroup.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/DeleteApplicationGroup.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/DeleteApplicationGroup.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/MapApplicationsToGroup.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/MapApplicationsToGroup.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/MapApplicationsToGroup.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/MapApplicationsToGroup.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/MuteStatisticsQuestion.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/MuteStatisticsQuestion.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/MuteStatisticsQuestion.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/MuteStatisticsQuestion.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/RemoveTeamMember.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/RemoveTeamMember.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/RemoveTeamMember.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/RemoveTeamMember.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/RenameApplicationGroup.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/RenameApplicationGroup.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/RenameApplicationGroup.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/RenameApplicationGroup.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/SetApplicationGroup.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/SetApplicationGroup.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/SetApplicationGroup.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/SetApplicationGroup.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/UpdateApplication.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/UpdateApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/UpdateApplication.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/UpdateApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Commands/UpdateRoles.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Commands/UpdateRoles.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Commands/UpdateRoles.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Commands/UpdateRoles.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Events/ApplicationCreated.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Events/ApplicationCreated.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Events/ApplicationCreated.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Events/ApplicationCreated.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Events/ApplicationDeleted.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Events/ApplicationDeleted.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Events/ApplicationDeleted.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Events/ApplicationDeleted.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Events/ApplicationGroupCreated.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Events/ApplicationGroupCreated.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Events/ApplicationGroupCreated.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Events/ApplicationGroupCreated.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Events/UserAddedToApplication.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Events/UserAddedToApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Events/UserAddedToApplication.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Events/UserAddedToApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Events/UserInvitedToApplication.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Events/UserInvitedToApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Events/UserInvitedToApplication.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Events/UserInvitedToApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMap.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMap.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMap.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMap.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResult.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResultItem.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupMapResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroups.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroups.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroups.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroups.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResult.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResultItem.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationGroupsResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKey.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKey.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKey.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKey.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKeyResult.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKeyResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKeyResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationIdByKeyResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfo.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfo.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfo.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfo.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfoResult.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfoResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfoResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationInfoResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationList.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationList.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationList.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationList.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverview.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverview.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverview.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverview.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverviewResult.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverviewResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverviewResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationOverviewResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeam.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeam.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeam.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeam.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamMember.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamMember.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamMember.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamMember.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResult.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResultInvitation.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResultInvitation.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResultInvitation.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/GetApplicationTeamResultInvitation.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/OverviewStatSummary.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/OverviewStatSummary.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/OverviewStatSummary.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/OverviewStatSummary.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/Queries/PartitionOverview.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/Queries/PartitionOverview.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/Queries/PartitionOverview.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/Queries/PartitionOverview.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Applications/ReadMe.md
similarity index 98%
rename from src/Server/Coderr.Server.Api/Core/Applications/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Applications/ReadMe.md
index c1972da6..4f8d273f 100644
--- a/src/Server/Coderr.Server.Api/Core/Applications/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Api/Core/Applications/ReadMe.md
@@ -1,3 +1,3 @@
-﻿An application that we can receive exceptions for.
-
+﻿An application that we can receive exceptions for.
+
 It can also be a specific tier in an application. For instance ASP.NET WebApi, or client side (like an Mobile application).
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Api/Core/Applications/TypeOfApplication.cs b/src/Server/App/Coderr.Server.Api/Core/Applications/TypeOfApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Applications/TypeOfApplication.cs
rename to src/Server/App/Coderr.Server.Api/Core/Applications/TypeOfApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Environments/Commands/CreateEnvironment.cs b/src/Server/App/Coderr.Server.Api/Core/Environments/Commands/CreateEnvironment.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Environments/Commands/CreateEnvironment.cs
rename to src/Server/App/Coderr.Server.Api/Core/Environments/Commands/CreateEnvironment.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Environments/Commands/ResetEnvironment.cs b/src/Server/App/Coderr.Server.Api/Core/Environments/Commands/ResetEnvironment.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Environments/Commands/ResetEnvironment.cs
rename to src/Server/App/Coderr.Server.Api/Core/Environments/Commands/ResetEnvironment.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Environments/Commands/UpdateEnvironment.cs b/src/Server/App/Coderr.Server.Api/Core/Environments/Commands/UpdateEnvironment.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Environments/Commands/UpdateEnvironment.cs
rename to src/Server/App/Coderr.Server.Api/Core/Environments/Commands/UpdateEnvironment.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Environments/Queries/GetEnvironments.cs b/src/Server/App/Coderr.Server.Api/Core/Environments/Queries/GetEnvironments.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Environments/Queries/GetEnvironments.cs
rename to src/Server/App/Coderr.Server.Api/Core/Environments/Queries/GetEnvironments.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResult.cs b/src/Server/App/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResultItem.cs b/src/Server/App/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/Environments/Queries/GetEnvironmentsResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Feedback/Commands/SubmitFeedback.cs b/src/Server/App/Coderr.Server.Api/Core/Feedback/Commands/SubmitFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Feedback/Commands/SubmitFeedback.cs
rename to src/Server/App/Coderr.Server.Api/Core/Feedback/Commands/SubmitFeedback.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Feedback/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Feedback/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Feedback/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Feedback/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Feedback/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Feedback/ReadMe.md
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Feedback/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Feedback/ReadMe.md
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Commands/AssignIncident.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/AssignIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Commands/AssignIncident.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/AssignIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Commands/CloseIncident.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/CloseIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Commands/CloseIncident.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/CloseIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Commands/DeleteIncident.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/DeleteIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Commands/DeleteIncident.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/DeleteIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Commands/IgnoreIncident.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/IgnoreIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Commands/IgnoreIncident.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/IgnoreIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Commands/NotifySubscribers.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/NotifySubscribers.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Commands/NotifySubscribers.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/NotifySubscribers.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Commands/ReOpenIncident.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/ReOpenIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Commands/ReOpenIncident.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Commands/ReOpenIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Events/IncidentAssigned.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Events/IncidentAssigned.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Events/IncidentAssigned.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Events/IncidentAssigned.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Events/IncidentClosed.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Events/IncidentClosed.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Events/IncidentClosed.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Events/IncidentClosed.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Events/IncidentDeleted.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Events/IncidentDeleted.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Events/IncidentDeleted.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Events/IncidentDeleted.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Events/IncidentIgnored.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Events/IncidentIgnored.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Events/IncidentIgnored.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Events/IncidentIgnored.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/IncidentOrder.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/IncidentOrder.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/IncidentOrder.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/IncidentOrder.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/IncidentSummaryDTO.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/IncidentSummaryDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/IncidentSummaryDTO.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/IncidentSummaryDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/FindIncidents.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/FindIncidents.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/FindIncidents.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/FindIncidents.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResult.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResultItem.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/FindIncidentsResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetCollection.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetCollection.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetCollection.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetCollection.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResult.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResultItem.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetCollectionResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncident.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncident.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePage.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePage.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePage.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePage.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePageResult.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePageResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePageResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentForClosePageResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentResult.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatistics.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatistics.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatistics.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatistics.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatisticsResult.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatisticsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatisticsResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/GetIncidentStatisticsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/HighlightedContextData.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/HighlightedContextData.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/HighlightedContextData.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/HighlightedContextData.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/QuickFact.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/QuickFact.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/QuickFact.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/QuickFact.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/RelatedIncident.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/RelatedIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/RelatedIncident.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/RelatedIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/ReportDay.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/ReportDay.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/ReportDay.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/ReportDay.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/Queries/SuggestedIncidentSolution.cs b/src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/SuggestedIncidentSolution.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/Queries/SuggestedIncidentSolution.cs
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/Queries/SuggestedIncidentSolution.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Incidents/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Incidents/ReadMe.md
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Incidents/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Incidents/ReadMe.md
diff --git a/src/Server/Coderr.Server.Api/Core/Invitations/Commands/DeleteInvitation.cs b/src/Server/App/Coderr.Server.Api/Core/Invitations/Commands/DeleteInvitation.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Invitations/Commands/DeleteInvitation.cs
rename to src/Server/App/Coderr.Server.Api/Core/Invitations/Commands/DeleteInvitation.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Invitations/Commands/InviteUser.cs b/src/Server/App/Coderr.Server.Api/Core/Invitations/Commands/InviteUser.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Invitations/Commands/InviteUser.cs
rename to src/Server/App/Coderr.Server.Api/Core/Invitations/Commands/InviteUser.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Invitations/Events/InvitationDeleted.cs b/src/Server/App/Coderr.Server.Api/Core/Invitations/Events/InvitationDeleted.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Invitations/Events/InvitationDeleted.cs
rename to src/Server/App/Coderr.Server.Api/Core/Invitations/Events/InvitationDeleted.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Invitations/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Invitations/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Invitations/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Invitations/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKey.cs b/src/Server/App/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKey.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKey.cs
rename to src/Server/App/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKey.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKeyResult.cs b/src/Server/App/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKeyResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKeyResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Invitations/Queries/GetInvitationByKeyResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Invitations/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Invitations/ReadMe.md
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Invitations/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Invitations/ReadMe.md
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/Commands/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/Commands/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/ReadMe.md
similarity index 96%
rename from src/Server/Coderr.Server.Api/Core/Users/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/ReadMe.md
index 95b93e42..17eb93c8 100644
--- a/src/Server/Coderr.Server.Api/Core/Users/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/ReadMe.md
@@ -1,7 +1,7 @@
-﻿User related information (such as name, notifcation settings etc.)
-====================
-
-While accounts are for login authentication and authorization, users are for information about the individual.
-
-
-
+﻿User related information (such as name, notifcation settings etc.)
+====================
+
+While accounts are for login authentication and authorization, users are for information about the individual.
+
+
+
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/Commands/SendEmail.cs b/src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/SendEmail.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/Commands/SendEmail.cs
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/SendEmail.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/Commands/SendSms.cs b/src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/SendSms.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/Commands/SendSms.cs
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/SendSms.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/Commands/SendTemplateEmail.cs b/src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/SendTemplateEmail.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/Commands/SendTemplateEmail.cs
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/Commands/SendTemplateEmail.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/EmailAddress.cs b/src/Server/App/Coderr.Server.Api/Core/Messaging/EmailAddress.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/EmailAddress.cs
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/EmailAddress.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/EmailMessage.cs b/src/Server/App/Coderr.Server.Api/Core/Messaging/EmailMessage.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/EmailMessage.cs
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/EmailMessage.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/EmailResource.cs b/src/Server/App/Coderr.Server.Api/Core/Messaging/EmailResource.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/EmailResource.cs
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/EmailResource.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Messaging/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Messaging/ReadMe.md
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Messaging/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Messaging/ReadMe.md
diff --git a/src/Server/Coderr.Server.Api/Core/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Notifications/AddNotification.cs b/src/Server/App/Coderr.Server.Api/Core/Notifications/AddNotification.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Notifications/AddNotification.cs
rename to src/Server/App/Coderr.Server.Api/Core/Notifications/AddNotification.cs
diff --git a/src/Server/Coderr.Server.Api/Core/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/ReadMe.md
similarity index 96%
rename from src/Server/Coderr.Server.Api/Core/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/ReadMe.md
index c307b3d5..3466a08f 100644
--- a/src/Server/Coderr.Server.Api/Core/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Api/Core/ReadMe.md
@@ -1,4 +1,4 @@
-﻿Core
-============
-
-Core contains all basic functionality to get codeRR running. A minimal set of analysis is done here.
+﻿Core
+============
+
+Core contains all basic functionality to get codeRR running. A minimal set of analysis is done here.
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/ContextCollectionDTO.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/ContextCollectionDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/ContextCollectionDTO.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/ContextCollectionDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReport.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReport.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReport.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReport.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportException.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportException.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportException.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportException.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportList.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportList.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportList.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportList.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportListResult.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportListResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportListResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportListResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportListResultItem.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportListResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportListResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportListResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportResult.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportResultContextCollection.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportResultContextCollection.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/Queries/GetReportResultContextCollection.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/Queries/GetReportResultContextCollection.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/Queries/KeyValuePair.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/Queries/KeyValuePair.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/Queries/KeyValuePair.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/Queries/KeyValuePair.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Reports/ReadMe.md
similarity index 98%
rename from src/Server/Coderr.Server.Api/Core/Reports/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Reports/ReadMe.md
index 62ec2df3..801671c5 100644
--- a/src/Server/Coderr.Server.Api/Core/Reports/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Api/Core/Reports/ReadMe.md
@@ -1 +1 @@
-﻿Reports represent the recieved exception along with all collected context information.
+﻿Reports represent the recieved exception along with all collected context information.
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/ReportDTO.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/ReportDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/ReportDTO.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/ReportDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/ReportExeptionDTO.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/ReportExeptionDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/ReportExeptionDTO.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/ReportExeptionDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Reports/ReportExtensions.cs b/src/Server/App/Coderr.Server.Api/Core/Reports/ReportExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Reports/ReportExtensions.cs
rename to src/Server/App/Coderr.Server.Api/Core/Reports/ReportExtensions.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSetting.cs b/src/Server/App/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSetting.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSetting.cs
rename to src/Server/App/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSetting.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSettings.cs b/src/Server/App/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSettings.cs
rename to src/Server/App/Coderr.Server.Api/Core/Settings/Commands/SaveAccountSettings.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Settings/Queries/GetAccountSetting.cs b/src/Server/App/Coderr.Server.Api/Core/Settings/Queries/GetAccountSetting.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Settings/Queries/GetAccountSetting.cs
rename to src/Server/App/Coderr.Server.Api/Core/Settings/Queries/GetAccountSetting.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingResult.cs b/src/Server/App/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettings.cs b/src/Server/App/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettings.cs
rename to src/Server/App/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettings.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingsResult.cs b/src/Server/App/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingsResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Settings/Queries/GetAccountSettingsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Support/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Support/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Support/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Support/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Support/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Support/ReadMe.md
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Support/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Support/ReadMe.md
diff --git a/src/Server/Coderr.Server.Api/Core/Support/SendSupportRequest.cs b/src/Server/App/Coderr.Server.Api/Core/Support/SendSupportRequest.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Support/SendSupportRequest.cs
rename to src/Server/App/Coderr.Server.Api/Core/Support/SendSupportRequest.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/Commands/DeleteBrowserSubscription.cs b/src/Server/App/Coderr.Server.Api/Core/Users/Commands/DeleteBrowserSubscription.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/Commands/DeleteBrowserSubscription.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/Commands/DeleteBrowserSubscription.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/Commands/StoreBrowserSubscription.cs b/src/Server/App/Coderr.Server.Api/Core/Users/Commands/StoreBrowserSubscription.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/Commands/StoreBrowserSubscription.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/Commands/StoreBrowserSubscription.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/Commands/UpdateNotifications.cs b/src/Server/App/Coderr.Server.Api/Core/Users/Commands/UpdateNotifications.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/Commands/UpdateNotifications.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/Commands/UpdateNotifications.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/Commands/UpdatePersonalSettings.cs b/src/Server/App/Coderr.Server.Api/Core/Users/Commands/UpdatePersonalSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/Commands/UpdatePersonalSettings.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/Commands/UpdatePersonalSettings.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/Core/Users/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/NotificationSettings.cs b/src/Server/App/Coderr.Server.Api/Core/Users/NotificationSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/NotificationSettings.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/NotificationSettings.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/NotificationState.cs b/src/Server/App/Coderr.Server.Api/Core/Users/NotificationState.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/NotificationState.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/NotificationState.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/Queries/GetUserSettings.cs b/src/Server/App/Coderr.Server.Api/Core/Users/Queries/GetUserSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/Queries/GetUserSettings.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/Queries/GetUserSettings.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Users/Queries/GetUserSettingsResult.cs b/src/Server/App/Coderr.Server.Api/Core/Users/Queries/GetUserSettingsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Core/Users/Queries/GetUserSettingsResult.cs
rename to src/Server/App/Coderr.Server.Api/Core/Users/Queries/GetUserSettingsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Core/Messaging/Commands/ReadMe.md b/src/Server/App/Coderr.Server.Api/Core/Users/ReadMe.md
similarity index 96%
rename from src/Server/Coderr.Server.Api/Core/Messaging/Commands/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/Core/Users/ReadMe.md
index 95b93e42..17eb93c8 100644
--- a/src/Server/Coderr.Server.Api/Core/Messaging/Commands/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Api/Core/Users/ReadMe.md
@@ -1,7 +1,7 @@
-﻿User related information (such as name, notifcation settings etc.)
-====================
-
-While accounts are for login authentication and authorization, users are for information about the individual.
-
-
-
+﻿User related information (such as name, notifcation settings etc.)
+====================
+
+While accounts are for login authentication and authorization, users are for information about the individual.
+
+
+
diff --git a/src/Server/Coderr.Server.Api/EnumExtensions.cs b/src/Server/App/Coderr.Server.Api/EnumExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/EnumExtensions.cs
rename to src/Server/App/Coderr.Server.Api/EnumExtensions.cs
diff --git a/src/Server/App/Coderr.Server.Api/Escalation/Events/IncidentEscalated.cs b/src/Server/App/Coderr.Server.Api/Escalation/Events/IncidentEscalated.cs
new file mode 100644
index 00000000..8f7ba89c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Escalation/Events/IncidentEscalated.cs
@@ -0,0 +1,43 @@
+﻿using System;
+
+namespace Coderr.Server.Api.Escalation.Events
+{
+    /// <summary>
+    ///     Incident has been escalated.
+    /// </summary>
+    public class IncidentEscalated
+    {
+        public IncidentEscalated(int applicationId, int incidentId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            if (incidentId <= 0) throw new ArgumentOutOfRangeException(nameof(incidentId));
+            ApplicationId = applicationId;
+            IncidentId = incidentId;
+        }
+
+        protected IncidentEscalated()
+        {
+
+        }
+
+        /// <summary>
+        ///     Application that the incident belongs to.
+        /// </summary>
+        public int ApplicationId { get; private set; }
+
+        /// <summary>
+        ///     Incident being escalated.
+        /// </summary>
+        public int IncidentId { get; private set; }
+
+        /// <summary>
+        ///     Error has been escalated to critical.
+        /// </summary>
+        public bool IsCritical { get; set; }
+
+        /// <summary>
+        ///     Error has been escalated to important.
+        /// </summary>
+        public bool IsImportant { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Api/EventAttribute.cs b/src/Server/App/Coderr.Server.Api/EventAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/EventAttribute.cs
rename to src/Server/App/Coderr.Server.Api/EventAttribute.cs
diff --git a/src/Server/Coderr.Server.Api/IgnoreFieldAttribute.cs b/src/Server/App/Coderr.Server.Api/IgnoreFieldAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/IgnoreFieldAttribute.cs
rename to src/Server/App/Coderr.Server.Api/IgnoreFieldAttribute.cs
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Commands/SaveUserKeyMetricConfiguration.cs b/src/Server/App/Coderr.Server.Api/Insights/Commands/SaveUserKeyMetricConfiguration.cs
new file mode 100644
index 00000000..e3608cad
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Commands/SaveUserKeyMetricConfiguration.cs
@@ -0,0 +1,12 @@
+﻿namespace Coderr.Server.Api.Insights.Commands
+{
+    [Command]
+    public class SaveUserKeyMetricConfiguration
+    {
+        public int DaysFrom { get; set; }
+        public int DaysTo { get; set; }
+        public int? Id { get; set; }
+
+        public int MetricId { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightResultApplication.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightResultApplication.cs
new file mode 100644
index 00000000..2fed2d50
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightResultApplication.cs
@@ -0,0 +1,12 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetInsightResultApplication
+    {
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public decimal? NumberOfDevelopers { get; set; }
+
+
+        public GetInsightResultIndicator[] Indicators { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightResultIndicator.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightResultIndicator.cs
new file mode 100644
index 00000000..1231b1ec
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightResultIndicator.cs
@@ -0,0 +1,35 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetInsightResultIndicator
+    {
+        public string PeriodValueName { get; set; }
+
+        public string Title { get; set; }
+        public bool IsAlternative { get; set; }
+        public string Description { get; set; }
+        public string Comment { get; set; }
+
+        public object Value { get; set; }
+        public bool CanBeNormalized { get; set; }
+
+        public string ValueName { get; set; }
+
+        public object PeriodValue { get; set; }
+
+        public TrendLine[] TrendLines { get; set; }
+
+        public bool? HigherValueIsBetter { get; set; }
+
+        public string ValueUnit { get; set; }
+        public string Name { get; set; }
+        public IndicatorToplistItem[] Toplist { get; set; }
+        public bool IsValueNameApplicationName { get; set; }
+    }
+
+    public class IndicatorToplistItem
+    {
+        public object Value { get; set; }
+        public string Comment { get; set; }
+        public string Title { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsights.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsights.cs
new file mode 100644
index 00000000..0d9e6746
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsights.cs
@@ -0,0 +1,10 @@
+﻿using DotNetCqs;
+
+namespace Coderr.Server.Api.Insights.Queries
+{
+    [Message]
+    public class GetInsights : Query<GetInsightsResult>
+    {
+        public int? ApplicationId { get; set; }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightsResult.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightsResult.cs
new file mode 100644
index 00000000..4ab5efd3
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetInsightsResult.cs
@@ -0,0 +1,17 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetInsightsResult
+    {
+        /// <summary>
+        /// Global indicators
+        /// </summary>
+        public GetInsightResultIndicator[] Indicators { get; set; }
+
+        public GetInsightResultApplication[] ApplicationInsights { get; set; }
+
+        /// <summary>
+        /// YYYY-MM-DD array
+        /// </summary>
+        public string[] TrendDates { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetric.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetric.cs
new file mode 100644
index 00000000..8d462cce
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetric.cs
@@ -0,0 +1,18 @@
+﻿using DotNetCqs;
+
+namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetKeyMetric : Query<GetKeyMetricResult>
+    {
+        public int? ApplicationId { get; set; }
+
+        public int DaysFrom { get; set; }
+        public int DaysTo { get; set; }
+
+        public int MetricId { get; set; }
+
+        public bool IncludeTopList { get; set; }
+        public bool IncludeChartData { get; set; }
+
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitions.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitions.cs
new file mode 100644
index 00000000..1e5caffe
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitions.cs
@@ -0,0 +1,8 @@
+﻿using DotNetCqs;
+
+namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetKeyMetricDefinitions : Query<GetKeyMetricDefinitionsResult>
+    {
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitionsResult.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitionsResult.cs
new file mode 100644
index 00000000..ddf65e9d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitionsResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetKeyMetricDefinitionsResult
+    {
+        public GetKeyMetricDefinitionsResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitionsResultItem.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitionsResultItem.cs
new file mode 100644
index 00000000..7ae5b44d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricDefinitionsResultItem.cs
@@ -0,0 +1,38 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetKeyMetricDefinitionsResultItem
+    {
+        /// <summary>
+        ///     Value can be normalized (i.e. get average per developer).
+        /// </summary>
+        public bool CanBeNormalized { get; set; }
+
+        public string Description { get; set; }
+        public string DisplayName { get; set; }
+
+        /// <summary>
+        ///     To sort values, the highest have better quality.
+        /// </summary>
+        public bool? HigherValueIsBetter { get; set; }
+
+        public int Id { get; set; }
+
+        /// <summary>
+        ///     The value name is the application name (otherwise the user name).
+        /// </summary>
+        public bool IsValueNameApplicationName { get; set; }
+
+        public int Name { get; set; }
+
+        /// <summary>
+        ///     If the Value is an id (accountId/applicationId), this is the name of that entity.
+        /// </summary>
+        public string ValueName { get; set; }
+
+        /// <summary>
+        ///     Unit of value in pluralis ("user(s)")
+        /// </summary>
+
+        public string ValueUnit { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricResult.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricResult.cs
new file mode 100644
index 00000000..15250603
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetKeyMetricResult
+    {
+        public GetKeyMetricResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricResultItem.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricResultItem.cs
new file mode 100644
index 00000000..ce7bfb32
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetKeyMetricResultItem.cs
@@ -0,0 +1,24 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetKeyMetricResultItem
+    {
+        public MetricToplistItem[] Toplist { get; set; }
+        public TrendLine[] ChartData { get; set; }
+
+        public string Title { get; set; }
+        public bool IsAlternative { get; set; }
+        public string Description { get; set; }
+        public string Comment { get; set; }
+
+        public object Value { get; set; }
+        public bool CanBeNormalized { get; set; }
+
+        public string ValueName { get; set; }
+
+        public bool? HigherValueIsBetter { get; set; }
+
+        public string ValueUnit { get; set; }
+        public string Name { get; set; }
+        public bool IsValueNameApplicationName { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurations.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurations.cs
new file mode 100644
index 00000000..2854c341
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurations.cs
@@ -0,0 +1,24 @@
+﻿using System;
+using DotNetCqs;
+
+namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetUserKeyMetricConfigurations : Query<GetUserKeyMetricConfigurations>
+    {
+        public GetUserKeyMetricConfigurations(int applicationId, int accountId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            if (accountId <= 0) throw new ArgumentOutOfRangeException(nameof(accountId));
+            ApplicationId = applicationId;
+            AccountId = accountId;
+        }
+
+        protected GetUserKeyMetricConfigurations()
+        {
+        }
+
+        public int AccountId { get; private set; }
+
+        public int ApplicationId { get; private set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurationsResult.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurationsResult.cs
new file mode 100644
index 00000000..57e3715d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurationsResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetUserKeyMetricConfigurationsResult
+    {
+        public GetUserKeyMetricConfigurationsResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurationsResultItem.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurationsResultItem.cs
new file mode 100644
index 00000000..473c5317
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/GetUserKeyMetricConfigurationsResultItem.cs
@@ -0,0 +1,11 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class GetUserKeyMetricConfigurationsResultItem
+    {
+        public int DaysFrom { get; set; }
+        public int DaysTo { get; set; }
+        public int Id { get; set; }
+
+        public int MetricId { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/MetricToplistItem.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/MetricToplistItem.cs
new file mode 100644
index 00000000..9cf49a40
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/MetricToplistItem.cs
@@ -0,0 +1,10 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class MetricToplistItem
+    {
+        public int Id { get; set; }
+        public object Value { get; set; }
+        public string Comment { get; set; }
+        public string Title { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/TrendLine.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/TrendLine.cs
new file mode 100644
index 00000000..42de493e
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/TrendLine.cs
@@ -0,0 +1,90 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Coderr.Server.Api.Insights.Queries
+{
+    /// <summary>
+    /// Contains a set of trend lines which represents a specific metric (like Error count).
+    /// </summary>
+    public class TrendLinePackage
+    {
+        public string Title { get; set; }
+        public string Description { get; set; }
+
+        public IReadOnlyList<TrendLine> Lines { get; set; }
+    }
+
+
+    public class TrendLine
+    {
+        private readonly TrendLineValue[] _values;
+
+        public TrendLine(string displayName, int valueCount, object defaultValue)
+        {
+            DisplayName = displayName ?? throw new ArgumentNullException(nameof(displayName));
+            _values = new TrendLineValue[valueCount];
+            Fill(defaultValue);
+        }
+
+        public TrendLine(string displayName, TrendLineValue[] values)
+        {
+            _values = values ?? throw new ArgumentNullException(nameof(values));
+            DisplayName = displayName ?? throw new ArgumentNullException(nameof(displayName));
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="displayNameId">0 = system</param>
+        /// <param name="values">All values</param>
+        public TrendLine(int displayNameId, TrendLineValue[] values)
+        {
+            if (displayNameId < 0) throw new ArgumentOutOfRangeException(nameof(displayNameId));
+            _values = values ?? throw new ArgumentNullException(nameof(values));
+            DisplayNameId = displayNameId;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="displayNameId">0 = system</param>
+        /// <param name="valueCount">Number of values to add</param>
+        /// <param name="defaultValue">value to assign to each entry.</param>
+        public TrendLine(int displayNameId, int valueCount, object defaultValue)
+        {
+            if (displayNameId < 0) throw new ArgumentOutOfRangeException(nameof(displayNameId));
+            _values = new TrendLineValue[valueCount];
+            Fill(defaultValue);
+            DisplayNameId = displayNameId;
+        }
+
+        public bool IsCompanyAverage { get; set; }
+
+        public string DisplayName { get; set; }
+
+        public int DisplayNameId { get; set; }
+
+        public IReadOnlyList<TrendLineValue> TrendValues => _values;
+
+        public void Fill(object defaultValue)
+        {
+            for (var i = 0; i < _values.Length; i++)
+                _values[i] = new TrendLineValue(defaultValue);
+        }
+
+        public void Assign(int monthIndex, object value, object normalizedValue = null)
+        {
+            _values[monthIndex].Value = value;
+            if (normalizedValue != null)
+            {
+                _values[monthIndex].Normalized = normalizedValue;
+            }
+        }
+
+        public override string ToString()
+        {
+            return DisplayName + " [" + string.Join(", ", _values.Select(x => x.Value)) + "]";
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Insights/Queries/TrendLineValue.cs b/src/Server/App/Coderr.Server.Api/Insights/Queries/TrendLineValue.cs
new file mode 100644
index 00000000..4d204081
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Insights/Queries/TrendLineValue.cs
@@ -0,0 +1,24 @@
+﻿namespace Coderr.Server.Api.Insights.Queries
+{
+    public class TrendLineValue
+    {
+        public TrendLineValue(object value)
+        {
+            Value = value;
+        }
+
+        public TrendLineValue(object value, object normalizedValue)
+        {
+            Value = value;
+            Normalized = normalizedValue;
+        }
+
+        public object Value { get; set; }
+        public object Normalized { get; set; }
+
+        public override string ToString()
+        {
+            return $"{Normalized} ({Value})";
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Api/MessageAttribute.cs b/src/Server/App/Coderr.Server.Api/MessageAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/MessageAttribute.cs
rename to src/Server/App/Coderr.Server.Api/MessageAttribute.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilarities.cs b/src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilarities.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilarities.cs
rename to src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilarities.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesCollection.cs b/src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesCollection.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesCollection.cs
rename to src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesCollection.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesResult.cs b/src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesSimilarity.cs b/src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesSimilarity.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesSimilarity.cs
rename to src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesSimilarity.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesValue.cs b/src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesValue.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesValue.cs
rename to src/Server/App/Coderr.Server.Api/Modules/ContextData/Queries/GetSimilaritiesValue.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncident.cs b/src/Server/App/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncident.cs
rename to src/Server/App/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResult.cs b/src/Server/App/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResultItem.cs b/src/Server/App/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Modules/ErrorOrigins/Queries/GetOriginsForIncidentResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummary.cs b/src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummary.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummary.cs
rename to src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummary.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummaryResult.cs b/src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummaryResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummaryResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentStateSummaryResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForState.cs b/src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForState.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForState.cs
rename to src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForState.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResult.cs b/src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResultItem.cs b/src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Modules/History/Queries/GetIncidentsForStatesResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Logs/Queries/GetLogs.cs b/src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/GetLogs.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Logs/Queries/GetLogs.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/GetLogs.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResult.cs b/src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntry.cs b/src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntry.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntry.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntryLevel.cs b/src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntryLevel.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntryLevel.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/GetLogsResultEntryLevel.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Logs/Queries/HasLogs.cs b/src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/HasLogs.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Logs/Queries/HasLogs.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/HasLogs.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Logs/Queries/HasLogsReply.cs b/src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/HasLogsReply.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Logs/Queries/HasLogsReply.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Logs/Queries/HasLogsReply.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidents.cs b/src/Server/App/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidents.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidents.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidents.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResult.cs b/src/Server/App/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResultItem.cs b/src/Server/App/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Mine/Queries/ListMyIncidentsResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Mine/Queries/ListMySuggestedItem.cs b/src/Server/App/Coderr.Server.Api/Modules/Mine/Queries/ListMySuggestedItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Mine/Queries/ListMySuggestedItem.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Mine/Queries/ListMySuggestedItem.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Onboarding/Commands/SetOnboardingChoices.cs b/src/Server/App/Coderr.Server.Api/Modules/Onboarding/Commands/SetOnboardingChoices.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Onboarding/Commands/SetOnboardingChoices.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Onboarding/Commands/SetOnboardingChoices.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingState.cs b/src/Server/App/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingState.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingState.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingState.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingStateResult.cs b/src/Server/App/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingStateResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingStateResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Onboarding/Queries/GetOnboardingStateResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Tagging/Events/TagAttachedToIncident.cs b/src/Server/App/Coderr.Server.Api/Modules/Tagging/Events/TagAttachedToIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Tagging/Events/TagAttachedToIncident.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Tagging/Events/TagAttachedToIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Tagging/Queries/GetTags.cs b/src/Server/App/Coderr.Server.Api/Modules/Tagging/Queries/GetTags.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Tagging/Queries/GetTags.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Tagging/Queries/GetTags.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForApplication.cs b/src/Server/App/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForApplication.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForIncident.cs b/src/Server/App/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForIncident.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Tagging/Queries/GetTagsForIncident.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Tagging/TagDTO.cs b/src/Server/App/Coderr.Server.Api/Modules/Tagging/TagDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Tagging/TagDTO.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Tagging/TagDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/Commands/CreateTrigger.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/Commands/CreateTrigger.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/Commands/CreateTrigger.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/Commands/CreateTrigger.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/Commands/DeleteTrigger.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/Commands/DeleteTrigger.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/Commands/DeleteTrigger.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/Commands/DeleteTrigger.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/Commands/UpdateTrigger.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/Commands/UpdateTrigger.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/Commands/UpdateTrigger.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/Commands/UpdateTrigger.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/LastTriggerActionDTO.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/LastTriggerActionDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/LastTriggerActionDTO.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/LastTriggerActionDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadata.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadata.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadata.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadata.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadataItem.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadataItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadataItem.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetContextCollectionMetadataItem.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetTrigger.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetTrigger.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetTrigger.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetTrigger.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggerDTO.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggerDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggerDTO.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggerDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggersForApplication.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggersForApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggersForApplication.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/Queries/GetTriggersForApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/TriggerActionDataDTO.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerActionDataDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/TriggerActionDataDTO.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerActionDataDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/TriggerContextRule.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerContextRule.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/TriggerContextRule.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerContextRule.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/TriggerDTO.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/TriggerDTO.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerDTO.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/TriggerExceptionRule.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerExceptionRule.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/TriggerExceptionRule.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerExceptionRule.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/TriggerFilterCondition.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerFilterCondition.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/TriggerFilterCondition.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerFilterCondition.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/TriggerRuleAction.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerRuleAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/TriggerRuleAction.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerRuleAction.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Triggers/TriggerRuleBase.cs b/src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerRuleBase.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Triggers/TriggerRuleBase.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Triggers/TriggerRuleBase.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersions.cs b/src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersions.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersions.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResult.cs b/src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResultItem.cs b/src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetApplicationVersionsResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistory.cs b/src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistory.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistory.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistory.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResult.cs b/src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultItem.cs b/src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultMonth.cs b/src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultMonth.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultMonth.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultMonth.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultSet.cs b/src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultSet.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultSet.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Versions/Queries/GetVersionHistoryResultSet.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Commands/AddEntry.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Commands/AddEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Commands/AddEntry.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Commands/AddEntry.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Commands/EditEntry.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Commands/EditEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Commands/EditEntry.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Commands/EditEntry.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Commands/RemoveEntry.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Commands/RemoveEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Commands/RemoveEntry.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Commands/RemoveEntry.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntries.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntries.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntries.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntries.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResult.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResult.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResult.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItem.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemApp.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemApp.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemApp.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemApp.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemIp.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemIp.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemIp.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/GetWhitelistEntriesResultItemIp.cs
diff --git a/src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/ResultItemIpType.cs b/src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/ResultItemIpType.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Modules/Whitelists/Queries/ResultItemIpType.cs
rename to src/Server/App/Coderr.Server.Api/Modules/Whitelists/Queries/ResultItemIpType.cs
diff --git a/src/Server/Coderr.Server.Api/NamespaceDoc.cs b/src/Server/App/Coderr.Server.Api/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.Api/NamespaceDoc.cs
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Commands/CreatePartition.cs b/src/Server/App/Coderr.Server.Api/Partitions/Commands/CreatePartition.cs
new file mode 100644
index 00000000..69889b89
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Commands/CreatePartition.cs
@@ -0,0 +1,16 @@
+﻿namespace Coderr.Server.Api.Partitions.Commands
+{
+    [Message]
+    public class CreatePartition
+    {
+        public int ApplicationId { get; set; }
+        public string Name { get; set; }
+        public int NumberOfItems { get; set; }
+
+        public int ImportantThreshold { get; set; }
+        public int CriticalThreshold { get; set; }
+
+        public string PartitionKey { get; set; }
+        public int Weight { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Commands/DeletePartition.cs b/src/Server/App/Coderr.Server.Api/Partitions/Commands/DeletePartition.cs
new file mode 100644
index 00000000..d129b741
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Commands/DeletePartition.cs
@@ -0,0 +1,8 @@
+﻿namespace Coderr.Server.Api.Partitions.Commands
+{
+    [Message]
+    public class DeletePartition
+    {
+        public int Id { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Commands/UpdatePartition.cs b/src/Server/App/Coderr.Server.Api/Partitions/Commands/UpdatePartition.cs
new file mode 100644
index 00000000..5408b7ab
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Commands/UpdatePartition.cs
@@ -0,0 +1,13 @@
+﻿namespace Coderr.Server.Api.Partitions.Commands
+{
+    [Message]
+    public class UpdatePartition
+    {
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public int NumberOfItems { get; set; }
+        public int Weight { get; set; }
+        public int? ImportantThreshold { get; set; }
+        public int? CriticalThreshold { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartition.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartition.cs
new file mode 100644
index 00000000..03482dd3
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartition.cs
@@ -0,0 +1,10 @@
+﻿using DotNetCqs;
+
+namespace Coderr.Server.Api.Partitions.Queries
+{
+    [Message]
+    public class GetPartition : Query<GetPartitionResult>
+    {
+        public int Id { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsights.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsights.cs
new file mode 100644
index 00000000..70955806
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsights.cs
@@ -0,0 +1,68 @@
+﻿using System;
+using DotNetCqs;
+
+namespace Coderr.Server.Api.Partitions.Queries
+{
+    /// <summary>
+    ///     Get insights for partitions.
+    /// </summary>
+    [Message]
+    public class GetPartitionInsights : Query<GetPartitionInsightsResult>
+    {
+        /// <summary>
+        ///     Initializes a new instance of the <see cref="GetPartitionInsights" /> class.
+        /// </summary>
+        /// <param name="applicationId">Application to fetch partitions for.</param>
+        public GetPartitionInsights(int applicationId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            ApplicationIds = new[] {applicationId};
+        }
+
+        /// <summary>
+        ///     Initializes a new instance of the <see cref="GetPartitionInsights" /> class.
+        /// </summary>
+        /// <param name="applicationIds">Applications to fetch partitions for.</param>
+        public GetPartitionInsights(int[] applicationIds)
+        {
+            if (applicationIds == null || applicationIds.Length == 0)
+                throw new ArgumentOutOfRangeException(nameof(applicationIds));
+            ApplicationIds = applicationIds;
+        }
+
+        protected GetPartitionInsights()
+        {
+        }
+
+        /// <summary>
+        ///     Applications to load insights for.
+        /// </summary>
+        public int[] ApplicationIds { get; private set; }
+
+        /// <summary>
+        /// Limit to a specific error.
+        /// </summary>
+        public int IncidentId { get; set; }
+
+        /// <summary>
+        /// Collect stats from this day and forwards.
+        /// </summary>
+        public DateTime StartDate { get; set; } = DateTime.Today.AddMonths(-11);
+
+        /// <summary>
+        /// Collect stats to this date.
+        /// </summary>
+        public DateTime EndDate { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// Used to summarize a certain period (like the last 90 days).
+        /// </summary>
+        public DateTime SummarizePeriodStartDate { get; set; } = DateTime.Today.AddDays(-30);
+
+        /// <summary>
+        /// Used to summarize a certain period (like the last 90 days).
+        /// </summary>
+        public DateTime SummarizePeriodEndDate { get; set; } = DateTime.UtcNow;
+        
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResult.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResult.cs
new file mode 100644
index 00000000..ae6b1fa4
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Api.Partitions.Queries
+{
+    public class GetPartitionInsightsResult
+    {
+        public GetPartitionInsightsResultApplication[] Applications { get; set; }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultApplication.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultApplication.cs
new file mode 100644
index 00000000..10b083c3
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultApplication.cs
@@ -0,0 +1,13 @@
+﻿namespace Coderr.Server.Api.Partitions.Queries
+{
+    public class GetPartitionInsightsResultApplication
+    {
+        public GetPartitionInsightsResultApplication(int applicationId)
+        {
+            ApplicationId = applicationId;
+        }
+
+        public int ApplicationId { get; private set; }
+        public GetPartitionInsightsResultIndicator[] Indicators { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultIndicator.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultIndicator.cs
new file mode 100644
index 00000000..6a5f1b99
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultIndicator.cs
@@ -0,0 +1,21 @@
+﻿using System;
+
+namespace Coderr.Server.Api.Partitions.Queries
+{
+    public class GetPartitionInsightsResultIndicator
+    {
+        public GetPartitionInsightsResultIndicator(string name, string displayName)
+        {
+            Name = name;
+            DisplayName = displayName;
+        }
+
+        public string Name { get; private set; }
+        public string DisplayName { get; private set; }
+        public int Value { get; set; }
+        public int PeriodValue { get; set; }
+
+        public DateTime[] Dates { get; set; }
+        public string[] Values { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultIndicatorValue.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultIndicatorValue.cs
new file mode 100644
index 00000000..fce6c72a
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionInsightsResultIndicatorValue.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Api.Partitions.Queries
+{
+    public class GetPartitionInsightsResultIndicatorValue
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionResult.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionResult.cs
new file mode 100644
index 00000000..1a102484
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionResult.cs
@@ -0,0 +1,13 @@
+﻿namespace Coderr.Server.Api.Partitions.Queries
+{
+    public class GetPartitionResult
+    {
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public string PartitionKey { get; set; }
+        public int NumberOfItems { get; set; }
+        public int Weight { get; set; }
+        public int? ImportantThreshold { get; set; }
+        public int? CriticalThreshold { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValues.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValues.cs
new file mode 100644
index 00000000..1e005d20
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValues.cs
@@ -0,0 +1,38 @@
+﻿using System;
+using DotNetCqs;
+
+namespace Coderr.Server.Api.Partitions.Queries
+{
+    /// <summary>
+    /// Fetch all received values for a specific partition
+    /// </summary>
+    [Message]
+    public class GetPartitionValues : Query<GetPartitionValuesResult>
+    {
+        public GetPartitionValues(int partitionId)
+        {
+            if (partitionId <= 0) throw new ArgumentOutOfRangeException(nameof(partitionId));
+            PartitionId = partitionId;
+        }
+
+        /// <summary>
+        /// Partition to fetch items for.
+        /// </summary>
+        public int PartitionId { get; private set; }
+
+        /// <summary>
+        /// Limit result to this specific incident.
+        /// </summary>
+        public int? IncidentId { get; set; }
+
+        /// <summary>
+        /// We expect a lot of results. Request a specific result page.
+        /// </summary>
+        public int? PageNumber { get; set; }
+
+        /// <summary>
+        /// Only fetch this amount of items.
+        /// </summary>
+        public int PageSize { get; set; } = 20;
+    }
+}
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValuesResult.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValuesResult.cs
new file mode 100644
index 00000000..5b18fc82
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValuesResult.cs
@@ -0,0 +1,13 @@
+﻿namespace Coderr.Server.Api.Partitions.Queries
+{
+    /// <summary>
+    /// Result for <see cref="GetPartitionValues"/>.
+    /// </summary>
+    public class GetPartitionValuesResult
+    {
+        /// <summary>
+        /// All matching items.
+        /// </summary>
+        public GetPartitionValuesResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValuesResultItem.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValuesResultItem.cs
new file mode 100644
index 00000000..7d4e19d8
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionValuesResultItem.cs
@@ -0,0 +1,26 @@
+﻿using System;
+
+namespace Coderr.Server.Api.Partitions.Queries
+{
+    /// <summary>
+    /// Item for <see cref="GetPartitionValuesResult"/>.
+    /// </summary>
+    public class GetPartitionValuesResultItem
+    {
+        /// <summary>
+        /// ID of this entry
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Value
+        /// </summary>
+        public string Value { get; set; }
+
+        /// <summary>
+        /// Most recent date when this value were received.
+        /// </summary>
+        public DateTime ReceivedAtUtc { get; set; }
+
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitions.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitions.cs
new file mode 100644
index 00000000..3470a461
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitions.cs
@@ -0,0 +1,23 @@
+﻿using System;
+using DotNetCqs;
+
+namespace Coderr.Server.Api.Partitions.Queries
+{
+    [Message]
+    public class GetPartitions : Query<GetPartitionsResult>
+    {
+        public GetPartitions(int applicationId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            ApplicationId = applicationId;
+        }
+
+        protected GetPartitions()
+        {
+
+        }
+
+        public int ApplicationId { get; private set; }
+    }
+}
+
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionsResult.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionsResult.cs
new file mode 100644
index 00000000..9d6bdb1f
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionsResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Api.Partitions.Queries
+{
+    public class GetPartitionsResult
+    {
+        public GetPartitionsResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionsResultItem.cs b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionsResultItem.cs
new file mode 100644
index 00000000..1158c09a
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/Partitions/Queries/GetPartitionsResultItem.cs
@@ -0,0 +1,11 @@
+﻿namespace Coderr.Server.Api.Partitions.Queries
+{
+    public class GetPartitionsResultItem
+    {
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public int Weight { get; set; }
+        public string PartitionKey { get; set; }
+
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Api/ReadMe.md b/src/Server/App/Coderr.Server.Api/ReadMe.md
similarity index 98%
rename from src/Server/Coderr.Server.Api/ReadMe.md
rename to src/Server/App/Coderr.Server.Api/ReadMe.md
index bff28538..0de4c6d0 100644
--- a/src/Server/Coderr.Server.Api/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Api/ReadMe.md
@@ -1,21 +1,21 @@
-﻿The API is based on Command/Queries and events. 
-==============
-
-Commands can be seen as the write model. All operations is done with the
-help of commands. A command is not an atomic unit, but do in most cases represent an use case.
-
-Queries are the read model in the application. They are used to fetch information. Queries are indempotent and may not change
-application state.
-
-Events are used to allow different parts of the application to talk. The publisher are not aware of if there are any 
-subscribers or how many there are. The subscriber have no knowledge about who published the event.
-
-# Implementations
-
-There is a tool in the "Tool" root folder which are used to generate Typescript classes from these APIs. The `.ts` files can be
-invoked using ajax directly from the web.
-
-You can also invoke the DTOs directly from your application using a HTTP client. Serialize the DTO as JSON and then include
-`X-Cqs-Object-Type` as a HTTP header. It should contain the assembly qualified type name of the DTO. 
-
-Basic authentication is used. Thus we recommend that you run the site using SSL.
+﻿The API is based on Command/Queries and events. 
+==============
+
+Commands can be seen as the write model. All operations is done with the
+help of commands. A command is not an atomic unit, but do in most cases represent an use case.
+
+Queries are the read model in the application. They are used to fetch information. Queries are indempotent and may not change
+application state.
+
+Events are used to allow different parts of the application to talk. The publisher are not aware of if there are any 
+subscribers or how many there are. The subscriber have no knowledge about who published the event.
+
+# Implementations
+
+There is a tool in the "Tool" root folder which are used to generate Typescript classes from these APIs. The `.ts` files can be
+invoked using ajax directly from the web.
+
+You can also invoke the DTOs directly from your application using a HTTP client. Serialize the DTO as JSON and then include
+`X-Cqs-Object-Type` as a HTTP header. It should contain the assembly qualified type name of the DTO. 
+
+Basic authentication is used. Thus we recommend that you run the site using SSL.
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplication.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplication.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplication.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResult.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResult.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResult.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResultItem.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForApplicationResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPage.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPage.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPage.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPage.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResult.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResult.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResult.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResultItem.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetFeedbackForDashboardPageResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedback.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedback.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedback.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResult.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResult.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResult.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResultItem.cs b/src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResultItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResultItem.cs
rename to src/Server/App/Coderr.Server.Api/Web/Feedback/Queries/GetIncidentFeedbackResultItem.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Overview/Queries/GetOverview.cs b/src/Server/App/Coderr.Server.Api/Web/Overview/Queries/GetOverview.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Overview/Queries/GetOverview.cs
rename to src/Server/App/Coderr.Server.Api/Web/Overview/Queries/GetOverview.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Overview/Queries/GetOverviewApplicationResult.cs b/src/Server/App/Coderr.Server.Api/Web/Overview/Queries/GetOverviewApplicationResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Overview/Queries/GetOverviewApplicationResult.cs
rename to src/Server/App/Coderr.Server.Api/Web/Overview/Queries/GetOverviewApplicationResult.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Overview/Queries/GetOverviewResult.cs b/src/Server/App/Coderr.Server.Api/Web/Overview/Queries/GetOverviewResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Overview/Queries/GetOverviewResult.cs
rename to src/Server/App/Coderr.Server.Api/Web/Overview/Queries/GetOverviewResult.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Overview/Queries/OverviewStatSummary.cs b/src/Server/App/Coderr.Server.Api/Web/Overview/Queries/OverviewStatSummary.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Overview/Queries/OverviewStatSummary.cs
rename to src/Server/App/Coderr.Server.Api/Web/Overview/Queries/OverviewStatSummary.cs
diff --git a/src/Server/Coderr.Server.Api/Web/Overview/Queries/PartitionOverview.cs b/src/Server/App/Coderr.Server.Api/Web/Overview/Queries/PartitionOverview.cs
similarity index 100%
rename from src/Server/Coderr.Server.Api/Web/Overview/Queries/PartitionOverview.cs
rename to src/Server/App/Coderr.Server.Api/Web/Overview/Queries/PartitionOverview.cs
diff --git a/src/Server/App/Coderr.Server.Api/WorkItems/Commands/CreateWorkItem.cs b/src/Server/App/Coderr.Server.Api/WorkItems/Commands/CreateWorkItem.cs
new file mode 100644
index 00000000..6c8a8b88
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/WorkItems/Commands/CreateWorkItem.cs
@@ -0,0 +1,41 @@
+﻿using System;
+
+namespace Coderr.Server.Api.WorkItems.Commands
+{
+    /// <summary>
+    ///     Create a new work item.
+    /// </summary>
+    [Command]
+    public class CreateWorkItem
+    {
+        /// <summary>
+        ///     Creates a new instance of the <see cref="CreateWorkItem" /> class.
+        /// </summary>
+        /// <param name="applicationId">Application that the incident belongs to.</param>
+        /// <param name="incidentId">Incident to create an work item for.</param>
+        public CreateWorkItem(int applicationId, int incidentId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            if (incidentId <= 0) throw new ArgumentOutOfRangeException(nameof(incidentId));
+            ApplicationId = applicationId;
+            IncidentId = incidentId;
+        }
+
+        /// <summary>
+        ///     Serialization constructor
+        /// </summary>
+        protected CreateWorkItem()
+        {
+        }
+
+        /// <summary>
+        /// Application that the incident belongs to.
+        /// </summary>
+        public int ApplicationId { get; private set; }
+
+        /// <summary>
+        /// Incident to create an work item for.
+        /// </summary>
+        public int IncidentId { get; private set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindIntegration.cs b/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindIntegration.cs
new file mode 100644
index 00000000..59818e78
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindIntegration.cs
@@ -0,0 +1,27 @@
+﻿using System;
+using DotNetCqs;
+
+namespace Coderr.Server.Api.WorkItems.Queries
+{
+    /// <summary>
+    ///     Checks if we have an integration with a work planning site
+    /// </summary>
+    [Message]
+    public class FindIntegration : Query<FindIntegrationResult>
+    {
+        public FindIntegration(int applicationId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            ApplicationId = applicationId;
+        }
+
+        protected FindIntegration()
+        {
+        }
+
+        /// <summary>
+        /// Application to find an integration for.
+        /// </summary>
+        public int ApplicationId { get; private set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindIntegrationResult.cs b/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindIntegrationResult.cs
new file mode 100644
index 00000000..e47da9ce
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindIntegrationResult.cs
@@ -0,0 +1,25 @@
+﻿namespace Coderr.Server.Api.WorkItems.Queries
+{
+    /// <summary>
+    ///     Result for <see cref="FindIntegration" />
+    /// </summary>
+    public class FindIntegrationResult
+
+    {
+        /// <summary>
+        ///     We have an integration
+        /// </summary>
+        public bool HaveIntegration { get; set; }
+
+
+        /// <summary>
+        ///     Technical name used to identify it internally
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        ///     Human friendly title.
+        /// </summary>
+        public string Title { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindWorkItem.cs b/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindWorkItem.cs
new file mode 100644
index 00000000..2eaeaeb9
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindWorkItem.cs
@@ -0,0 +1,24 @@
+﻿using System;
+using DotNetCqs;
+
+namespace Coderr.Server.Api.WorkItems.Queries
+{
+    /// <summary>
+    ///     Find work item for the given incident.
+    /// </summary>
+    [Message]
+    public class FindWorkItem : Query<FindWorkItemResult>
+    {
+        public FindWorkItem(int incidentId)
+        {
+            if (incidentId <= 0) throw new ArgumentOutOfRangeException(nameof(incidentId));
+            IncidentId = incidentId;
+        }
+
+        protected FindWorkItem()
+        {
+        }
+
+        public int IncidentId { get; private set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindWorkItemResult.cs b/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindWorkItemResult.cs
new file mode 100644
index 00000000..10e68372
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Api/WorkItems/Queries/FindWorkItemResult.cs
@@ -0,0 +1,28 @@
+﻿namespace Coderr.Server.Api.WorkItems.Queries
+{
+    /// <summary>
+    /// Result for <see cref="FindWorkItem"/>.
+    /// </summary>
+    public class FindWorkItemResult
+    {
+        /// <summary>
+        /// Id in the system that we integrate against.
+        /// </summary>
+        public string WorkItemId { get; set; }
+
+        /// <summary>
+        /// Display name
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Url to the work item in the integrated system.
+        /// </summary>
+        public string Url { get; set; }
+
+        /// <summary>
+        /// Application that the incident belongs to.
+        /// </summary>
+        public int ApplicationId { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.App.Tests/App.config b/src/Server/App/Coderr.Server.App.Tests/App.config
similarity index 96%
rename from src/Server/Coderr.Server.App.Tests/App.config
rename to src/Server/App/Coderr.Server.App.Tests/App.config
index 8bd29cc7..1beb25ca 100644
--- a/src/Server/Coderr.Server.App.Tests/App.config
+++ b/src/Server/App/Coderr.Server.App.Tests/App.config
@@ -1,7 +1,7 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-
-<configuration>
-  <appSettings>
-    <add key="DemoCategory.Name" value="Yo!" />
-  </appSettings>
+﻿<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+  <appSettings>
+    <add key="DemoCategory.Name" value="Yo!" />
+  </appSettings>
 </configuration>
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.App.Tests/Coderr.Server.App.Tests.csproj b/src/Server/App/Coderr.Server.App.Tests/Coderr.Server.App.Tests.csproj
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Coderr.Server.App.Tests.csproj
rename to src/Server/App/Coderr.Server.App.Tests/Coderr.Server.App.Tests.csproj
diff --git a/src/Server/Coderr.Server.App.Tests/ConfigWrapper.cs b/src/Server/App/Coderr.Server.App.Tests/ConfigWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/ConfigWrapper.cs
rename to src/Server/App/Coderr.Server.App.Tests/ConfigWrapper.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Configuration/ConfigurationCategoryExtensionsTests.cs b/src/Server/App/Coderr.Server.App.Tests/Configuration/ConfigurationCategoryExtensionsTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Configuration/ConfigurationCategoryExtensionsTests.cs
rename to src/Server/App/Coderr.Server.App.Tests/Configuration/ConfigurationCategoryExtensionsTests.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Configuration/DictionaryExtensionsTests.cs b/src/Server/App/Coderr.Server.App.Tests/Configuration/DictionaryExtensionsTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Configuration/DictionaryExtensionsTests.cs
rename to src/Server/App/Coderr.Server.App.Tests/Configuration/DictionaryExtensionsTests.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Configuration/TestEntitites/MySection.cs b/src/Server/App/Coderr.Server.App.Tests/Configuration/TestEntitites/MySection.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Configuration/TestEntitites/MySection.cs
rename to src/Server/App/Coderr.Server.App.Tests/Configuration/TestEntitites/MySection.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Configuration/TestEntitites/NonExistantSection.cs b/src/Server/App/Coderr.Server.App.Tests/Configuration/TestEntitites/NonExistantSection.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Configuration/TestEntitites/NonExistantSection.cs
rename to src/Server/App/Coderr.Server.App.Tests/Configuration/TestEntitites/NonExistantSection.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Configuration/TestEntitites/SoCultural.cs b/src/Server/App/Coderr.Server.App.Tests/Configuration/TestEntitites/SoCultural.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Configuration/TestEntitites/SoCultural.cs
rename to src/Server/App/Coderr.Server.App.Tests/Configuration/TestEntitites/SoCultural.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Configuration/TestEntitites/WriteTestSection.cs b/src/Server/App/Coderr.Server.App.Tests/Configuration/TestEntitites/WriteTestSection.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Configuration/TestEntitites/WriteTestSection.cs
rename to src/Server/App/Coderr.Server.App.Tests/Configuration/TestEntitites/WriteTestSection.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Core/Accounts/AccountTests.cs b/src/Server/App/Coderr.Server.App.Tests/Core/Accounts/AccountTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Core/Accounts/AccountTests.cs
rename to src/Server/App/Coderr.Server.App.Tests/Core/Accounts/AccountTests.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Core/Accounts/CommandHandlers/RegisterAccountHandlerTests.cs b/src/Server/App/Coderr.Server.App.Tests/Core/Accounts/CommandHandlers/RegisterAccountHandlerTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Core/Accounts/CommandHandlers/RegisterAccountHandlerTests.cs
rename to src/Server/App/Coderr.Server.App.Tests/Core/Accounts/CommandHandlers/RegisterAccountHandlerTests.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Core/ApiKeys/ApiKeyTests.cs b/src/Server/App/Coderr.Server.App.Tests/Core/ApiKeys/ApiKeyTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Core/ApiKeys/ApiKeyTests.cs
rename to src/Server/App/Coderr.Server.App.Tests/Core/ApiKeys/ApiKeyTests.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Core/Applications/Commands/InviteUserHandlerTests.cs b/src/Server/App/Coderr.Server.App.Tests/Core/Applications/Commands/InviteUserHandlerTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Core/Applications/Commands/InviteUserHandlerTests.cs
rename to src/Server/App/Coderr.Server.App.Tests/Core/Applications/Commands/InviteUserHandlerTests.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Core/Invitations/Commands/InvitationServiceTests.cs b/src/Server/App/Coderr.Server.App.Tests/Core/Invitations/Commands/InvitationServiceTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Core/Invitations/Commands/InvitationServiceTests.cs
rename to src/Server/App/Coderr.Server.App.Tests/Core/Invitations/Commands/InvitationServiceTests.cs
diff --git a/src/Server/Coderr.Server.App.Tests/NSubstituteExtensions.cs b/src/Server/App/Coderr.Server.App.Tests/NSubstituteExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/NSubstituteExtensions.cs
rename to src/Server/App/Coderr.Server.App.Tests/NSubstituteExtensions.cs
diff --git a/src/Server/Coderr.Server.App.Tests/ObjectExtensions.cs b/src/Server/App/Coderr.Server.App.Tests/ObjectExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/ObjectExtensions.cs
rename to src/Server/App/Coderr.Server.App.Tests/ObjectExtensions.cs
diff --git a/src/Server/Coderr.Server.App.Tests/PrincipalHelper.cs b/src/Server/App/Coderr.Server.App.Tests/PrincipalHelper.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/PrincipalHelper.cs
rename to src/Server/App/Coderr.Server.App.Tests/PrincipalHelper.cs
diff --git a/src/Server/Coderr.Server.App.Tests/ReposExtensions.cs b/src/Server/App/Coderr.Server.App.Tests/ReposExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/ReposExtensions.cs
rename to src/Server/App/Coderr.Server.App.Tests/ReposExtensions.cs
diff --git a/src/Server/Coderr.Server.App.Tests/TestStore.cs b/src/Server/App/Coderr.Server.App.Tests/TestStore.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/TestStore.cs
rename to src/Server/App/Coderr.Server.App.Tests/TestStore.cs
diff --git a/src/Server/Coderr.Server.App.Tests/Web/Overview/Queries/GetOverviewApplicationResultTests.cs b/src/Server/App/Coderr.Server.App.Tests/Web/Overview/Queries/GetOverviewApplicationResultTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.App.Tests/Web/Overview/Queries/GetOverviewApplicationResultTests.cs
rename to src/Server/App/Coderr.Server.App.Tests/Web/Overview/Queries/GetOverviewApplicationResultTests.cs
diff --git a/src/Server/App/Coderr.Server.App/ActiveDirectory/AzureDirectoryService.cs b/src/Server/App/Coderr.Server.App/ActiveDirectory/AzureDirectoryService.cs
new file mode 100644
index 00000000..a9b1917d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/ActiveDirectory/AzureDirectoryService.cs
@@ -0,0 +1,31 @@
+﻿using System.Collections.Generic;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Directory;
+using log4net;
+
+namespace Coderr.Server.App.ActiveDirectory
+{
+    [ContainerService]
+    internal class AzureDirectoryService : IDirectoryService
+    {
+        private ILog _logger = LogManager.GetLogger(typeof(AzureDirectoryService));
+
+        public bool IsInDomain { get; } = false;
+
+        public IEnumerable<IDirectoryEntry> Find(string text, bool groups, bool users, int pageNumber = 1,
+            int pageSize = 20)
+        {
+            return new IDirectoryEntry[0];
+        }
+
+        public string FindEmail(string samAccountName)
+        {
+            return null;
+        }
+
+        public IDirectoryEntry GetBySid(string sid)
+        {
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.App/AppType.cs b/src/Server/App/Coderr.Server.App/AppType.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/AppType.cs
rename to src/Server/App/Coderr.Server.App/AppType.cs
diff --git a/src/Server/Coderr.Server.App/Coderr.Server.App.csproj b/src/Server/App/Coderr.Server.App/Coderr.Server.App.csproj
similarity index 71%
rename from src/Server/Coderr.Server.App/Coderr.Server.App.csproj
rename to src/Server/App/Coderr.Server.App/Coderr.Server.App.csproj
index cc6d2161..c01bb3db 100644
--- a/src/Server/Coderr.Server.App/Coderr.Server.App.csproj
+++ b/src/Server/App/Coderr.Server.App/Coderr.Server.App.csproj
@@ -5,19 +5,15 @@
     <AssemblyName>Coderr.Server.App</AssemblyName>
     <DefaultItemExcludes>$(DefaultItemExcludes);*.DotSettings;*.vsspell;CustomDictionary.xml</DefaultItemExcludes>
     <Configurations>Debug;Release;Premise</Configurations>
+    <LangVersion>default</LangVersion>
   </PropertyGroup>
-  <ItemGroup>
-    <None Remove="Core\Accounts\CommandHandlers\Templates\ResetPassword\Template.md" />
-    <None Remove="Modules\Messaging\Templating\Layout\logo2.png" />
-    <None Remove="Modules\Messaging\Templating\Layout\Template.html" />
-  </ItemGroup>
+
   <ItemGroup>
     <EmbeddedResource Include="Core\Accounts\CommandHandlers\Templates\ResetPassword\Template.md" />
-  </ItemGroup>
-  <ItemGroup>
     <EmbeddedResource Include="Modules\Messaging\Templating\Layout\logo2.png" />
     <EmbeddedResource Include="Modules\Messaging\Templating\Layout\Template.html" />
   </ItemGroup>
+  
   <ItemGroup>
     <PackageReference Include="ColorCode" Version="1.0.1">
       <NoWarn>NU1701</NoWarn>
@@ -31,11 +27,11 @@
     <PackageReference Include="System.Net.Http" Version="4.3.4" />
     <PackageReference Include="UAParser" Version="3.1.47" />
   </ItemGroup>
+  
   <ItemGroup>
+    <ProjectReference Include="..\..\Reporting\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj" />
     <ProjectReference Include="..\Coderr.Server.Api\Coderr.Server.Api.csproj" />
     <ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj" />
+    <ProjectReference Include="..\..\Common\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
   </ItemGroup>
 </Project>
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/AccountService.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/AccountService.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/AccountService.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/AccountService.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/Entities/NamespaceDoc.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/Entities/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/Entities/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/Entities/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterAccountHandler.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterAccountHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterAccountHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterAccountHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterSimpleHandler.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterSimpleHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterSimpleHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/RegisterSimpleHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/RequestPasswordResetHandler.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/RequestPasswordResetHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/RequestPasswordResetHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/RequestPasswordResetHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/Templates/ResetPassword/Template.md b/src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/Templates/ResetPassword/Template.md
similarity index 96%
rename from src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/Templates/ResetPassword/Template.md
rename to src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/Templates/ResetPassword/Template.md
index 43350e02..2dfb4359 100644
--- a/src/Server/Coderr.Server.App/Core/Accounts/CommandHandlers/Templates/ResetPassword/Template.md
+++ b/src/Server/App/Coderr.Server.App/Core/Accounts/CommandHandlers/Templates/ResetPassword/Template.md
@@ -1,7 +1,7 @@
-﻿AccountName: {AccountName}
-
-Click on the link below to reset your password:
-
-{ResetLink}
-
+﻿AccountName: {AccountName}
+
+Click on the link below to reset your password:
+
+{ResetLink}
+
 If you did not request a password reset, reply on this email to inform us.
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/IAccountService.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/IAccountService.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/IAccountService.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/IAccountService.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/NamespaceDoc.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/NamespaceDoc.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/Queries/FindAccountByUserNameHandler.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/Queries/FindAccountByUserNameHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/Queries/FindAccountByUserNameHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/Queries/FindAccountByUserNameHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/Queries/GetAccountQueryHandler.cs b/src/Server/App/Coderr.Server.App/Core/Accounts/Queries/GetAccountQueryHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Accounts/Queries/GetAccountQueryHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Accounts/Queries/GetAccountQueryHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Accounts/ReadMe.md b/src/Server/App/Coderr.Server.App/Core/Accounts/ReadMe.md
similarity index 97%
rename from src/Server/Coderr.Server.App/Core/Accounts/ReadMe.md
rename to src/Server/App/Coderr.Server.App/Core/Accounts/ReadMe.md
index 6af4e6aa..03244c6d 100644
--- a/src/Server/Coderr.Server.App/Core/Accounts/ReadMe.md
+++ b/src/Server/App/Coderr.Server.App/Core/Accounts/ReadMe.md
@@ -1,4 +1,4 @@
-﻿Accounts
-==============
-
+﻿Accounts
+==============
+
 Accounts are used to handle authentication and site wide authorization. 
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.App/Core/ApiKeys/ApiKey.cs b/src/Server/App/Coderr.Server.App/Core/ApiKeys/ApiKey.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/ApiKeys/ApiKey.cs
rename to src/Server/App/Coderr.Server.App/Core/ApiKeys/ApiKey.cs
diff --git a/src/Server/Coderr.Server.App/Core/ApiKeys/Events/ApplicationDeletedHandler.cs b/src/Server/App/Coderr.Server.App/Core/ApiKeys/Events/ApplicationDeletedHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/ApiKeys/Events/ApplicationDeletedHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/ApiKeys/Events/ApplicationDeletedHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/ApiKeys/IApiKeyRepository.cs b/src/Server/App/Coderr.Server.App/Core/ApiKeys/IApiKeyRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/ApiKeys/IApiKeyRepository.cs
rename to src/Server/App/Coderr.Server.App/Core/ApiKeys/IApiKeyRepository.cs
diff --git a/src/Server/Coderr.Server.App/Core/ApiKeys/ReadMe.md b/src/Server/App/Coderr.Server.App/Core/ApiKeys/ReadMe.md
similarity index 95%
rename from src/Server/Coderr.Server.App/Core/ApiKeys/ReadMe.md
rename to src/Server/App/Coderr.Server.App/Core/ApiKeys/ReadMe.md
index d5541dbe..7755e014 100644
--- a/src/Server/Coderr.Server.App/Core/ApiKeys/ReadMe.md
+++ b/src/Server/App/Coderr.Server.App/Core/ApiKeys/ReadMe.md
@@ -1,5 +1,5 @@
-﻿Api Keys
-=========
-
-Api keys are used to allow other applications to communicate with codeRR through the HTTP api.
-
+﻿Api Keys
+=========
+
+Api keys are used to allow other applications to communicate with codeRR through the HTTP api.
+
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/AddTeamMemberHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/AddTeamMemberHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/AddTeamMemberHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/AddTeamMemberHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/CreateApplicationHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/CreateApplicationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/CreateApplicationHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/CreateApplicationHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/DeleteApplicationHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/DeleteApplicationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/DeleteApplicationHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/DeleteApplicationHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/MapApplicationsToGroupHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/MapApplicationsToGroupHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/MapApplicationsToGroupHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/MapApplicationsToGroupHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/MuteStatsHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/MuteStatsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/MuteStatsHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/MuteStatsHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/RemoveTeamMemberHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/RemoveTeamMemberHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/RemoveTeamMemberHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/RemoveTeamMemberHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/RenameGroupHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/RenameGroupHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/RenameGroupHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/RenameGroupHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateApplicationHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateApplicationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateApplicationHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateApplicationHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateRolesHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateRolesHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateRolesHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/CommandHandlers/UpdateRolesHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/EventHandlers/UpdateTeamOnInvitationAccepted.cs b/src/Server/App/Coderr.Server.App/Core/Applications/EventHandlers/UpdateTeamOnInvitationAccepted.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/EventHandlers/UpdateTeamOnInvitationAccepted.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/EventHandlers/UpdateTeamOnInvitationAccepted.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationInfoHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationInfoHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationInfoHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationInfoHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationTeamHandler.cs b/src/Server/App/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationTeamHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationTeamHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/QueryHandlers/GetApplicationTeamHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Applications/QueryHandlers/GetMyApplications.cs b/src/Server/App/Coderr.Server.App/Core/Applications/QueryHandlers/GetMyApplications.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Applications/QueryHandlers/GetMyApplications.cs
rename to src/Server/App/Coderr.Server.App/Core/Applications/QueryHandlers/GetMyApplications.cs
diff --git a/src/Server/Coderr.Server.App/Core/Environments/ApplicationEnvironment.cs b/src/Server/App/Coderr.Server.App/Core/Environments/ApplicationEnvironment.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Environments/ApplicationEnvironment.cs
rename to src/Server/App/Coderr.Server.App/Core/Environments/ApplicationEnvironment.cs
diff --git a/src/Server/Coderr.Server.App/Core/Environments/Environment.cs b/src/Server/App/Coderr.Server.App/Core/Environments/Environment.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Environments/Environment.cs
rename to src/Server/App/Coderr.Server.App/Core/Environments/Environment.cs
diff --git a/src/Server/Coderr.Server.App/Core/Environments/Handlers/CreateEnvironmentHandler.cs b/src/Server/App/Coderr.Server.App/Core/Environments/Handlers/CreateEnvironmentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Environments/Handlers/CreateEnvironmentHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Environments/Handlers/CreateEnvironmentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Environments/Handlers/GetEnvironmentsHandler.cs b/src/Server/App/Coderr.Server.App/Core/Environments/Handlers/GetEnvironmentsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Environments/Handlers/GetEnvironmentsHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Environments/Handlers/GetEnvironmentsHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Environments/Handlers/ResetEnvironmentHandler.cs b/src/Server/App/Coderr.Server.App/Core/Environments/Handlers/ResetEnvironmentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Environments/Handlers/ResetEnvironmentHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Environments/Handlers/ResetEnvironmentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Environments/Handlers/UpdateEnvironmentHandler.cs b/src/Server/App/Coderr.Server.App/Core/Environments/Handlers/UpdateEnvironmentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Environments/Handlers/UpdateEnvironmentHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Environments/Handlers/UpdateEnvironmentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Environments/IEnvironmentRepository.cs b/src/Server/App/Coderr.Server.App/Core/Environments/IEnvironmentRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Environments/IEnvironmentRepository.cs
rename to src/Server/App/Coderr.Server.App/Core/Environments/IEnvironmentRepository.cs
diff --git a/src/Server/Coderr.Server.App/Core/ErrorReports/Queries/FindReportHandler.cs b/src/Server/App/Coderr.Server.App/Core/ErrorReports/Queries/FindReportHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/ErrorReports/Queries/FindReportHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/ErrorReports/Queries/FindReportHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Incidents/Commands/AssignIncidentHandler.cs b/src/Server/App/Coderr.Server.App/Core/Incidents/Commands/AssignIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Incidents/Commands/AssignIncidentHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Incidents/Commands/AssignIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Incidents/Commands/CloseIncidentHandler.cs b/src/Server/App/Coderr.Server.App/Core/Incidents/Commands/CloseIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Incidents/Commands/CloseIncidentHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Incidents/Commands/CloseIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Incidents/Commands/DeleteIncidentHandler.cs b/src/Server/App/Coderr.Server.App/Core/Incidents/Commands/DeleteIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Incidents/Commands/DeleteIncidentHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Incidents/Commands/DeleteIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Incidents/Commands/IgnoreIncidentHandler.cs b/src/Server/App/Coderr.Server.App/Core/Incidents/Commands/IgnoreIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Incidents/Commands/IgnoreIncidentHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Incidents/Commands/IgnoreIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Incidents/Commands/NotifySubscribersHandler.cs b/src/Server/App/Coderr.Server.App/Core/Incidents/Commands/NotifySubscribersHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Incidents/Commands/NotifySubscribersHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Incidents/Commands/NotifySubscribersHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Incidents/Commands/ReOpenIncidentHandler.cs b/src/Server/App/Coderr.Server.App/Core/Incidents/Commands/ReOpenIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Incidents/Commands/ReOpenIncidentHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Incidents/Commands/ReOpenIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Incidents/Jobs/DeleteOldIncidents.cs b/src/Server/App/Coderr.Server.App/Core/Incidents/Jobs/DeleteOldIncidents.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Incidents/Jobs/DeleteOldIncidents.cs
rename to src/Server/App/Coderr.Server.App/Core/Incidents/Jobs/DeleteOldIncidents.cs
diff --git a/src/Server/Coderr.Server.App/Core/Invitations/ApplicationInvitation.cs b/src/Server/App/Coderr.Server.App/Core/Invitations/ApplicationInvitation.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Invitations/ApplicationInvitation.cs
rename to src/Server/App/Coderr.Server.App/Core/Invitations/ApplicationInvitation.cs
diff --git a/src/Server/Coderr.Server.App/Core/Invitations/CommandHandlers/AcceptInvitationHandler.cs b/src/Server/App/Coderr.Server.App/Core/Invitations/CommandHandlers/AcceptInvitationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Invitations/CommandHandlers/AcceptInvitationHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Invitations/CommandHandlers/AcceptInvitationHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Invitations/CommandHandlers/DeleteInvitationHandler.cs b/src/Server/App/Coderr.Server.App/Core/Invitations/CommandHandlers/DeleteInvitationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Invitations/CommandHandlers/DeleteInvitationHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Invitations/CommandHandlers/DeleteInvitationHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Invitations/CommandHandlers/InviteUserHandler.cs b/src/Server/App/Coderr.Server.App/Core/Invitations/CommandHandlers/InviteUserHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Invitations/CommandHandlers/InviteUserHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Invitations/CommandHandlers/InviteUserHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Invitations/IInvitationRepository.cs b/src/Server/App/Coderr.Server.App/Core/Invitations/IInvitationRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Invitations/IInvitationRepository.cs
rename to src/Server/App/Coderr.Server.App/Core/Invitations/IInvitationRepository.cs
diff --git a/src/Server/Coderr.Server.App/Core/Invitations/Invitation.cs b/src/Server/App/Coderr.Server.App/Core/Invitations/Invitation.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Invitations/Invitation.cs
rename to src/Server/App/Coderr.Server.App/Core/Invitations/Invitation.cs
diff --git a/src/Server/Coderr.Server.App/Core/Notifications/Commands/AddNotificationHandler.cs b/src/Server/App/Coderr.Server.App/Core/Notifications/Commands/AddNotificationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Notifications/Commands/AddNotificationHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Notifications/Commands/AddNotificationHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Notifications/Commands/DeleteBrowserSubscriptionHandler.cs b/src/Server/App/Coderr.Server.App/Core/Notifications/Commands/DeleteBrowserSubscriptionHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Notifications/Commands/DeleteBrowserSubscriptionHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Notifications/Commands/DeleteBrowserSubscriptionHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Notifications/Commands/StoreBrowserSubscriptionHandler.cs b/src/Server/App/Coderr.Server.App/Core/Notifications/Commands/StoreBrowserSubscriptionHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Notifications/Commands/StoreBrowserSubscriptionHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Notifications/Commands/StoreBrowserSubscriptionHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Notifications/EventHandlers/ApplicationDeletedHandler.cs b/src/Server/App/Coderr.Server.App/Core/Notifications/EventHandlers/ApplicationDeletedHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Notifications/EventHandlers/ApplicationDeletedHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Notifications/EventHandlers/ApplicationDeletedHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Notifications/INotificationsRepository.cs b/src/Server/App/Coderr.Server.App/Core/Notifications/INotificationsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Notifications/INotificationsRepository.cs
rename to src/Server/App/Coderr.Server.App/Core/Notifications/INotificationsRepository.cs
diff --git a/src/Server/Coderr.Server.App/Core/Reports/Jobs/DeleteReportsBelowReportLimit.cs b/src/Server/App/Coderr.Server.App/Core/Reports/Jobs/DeleteReportsBelowReportLimit.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Reports/Jobs/DeleteReportsBelowReportLimit.cs
rename to src/Server/App/Coderr.Server.App/Core/Reports/Jobs/DeleteReportsBelowReportLimit.cs
diff --git a/src/Server/Coderr.Server.App/Core/Reports/PagedReports.cs b/src/Server/App/Coderr.Server.App/Core/Reports/PagedReports.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Reports/PagedReports.cs
rename to src/Server/App/Coderr.Server.App/Core/Reports/PagedReports.cs
diff --git a/src/Server/Coderr.Server.App/Core/Reports/Queries/GetReportHandler.cs b/src/Server/App/Coderr.Server.App/Core/Reports/Queries/GetReportHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Reports/Queries/GetReportHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Reports/Queries/GetReportHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Support/SendSupportRequestHandler.cs b/src/Server/App/Coderr.Server.App/Core/Support/SendSupportRequestHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Support/SendSupportRequestHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Support/SendSupportRequestHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Users/EventHandlers/CreateOnNewAccount.cs b/src/Server/App/Coderr.Server.App/Core/Users/EventHandlers/CreateOnNewAccount.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Users/EventHandlers/CreateOnNewAccount.cs
rename to src/Server/App/Coderr.Server.App/Core/Users/EventHandlers/CreateOnNewAccount.cs
diff --git a/src/Server/Coderr.Server.App/Core/Users/WebApi/GetUserSettingsHandler.cs b/src/Server/App/Coderr.Server.App/Core/Users/WebApi/GetUserSettingsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Users/WebApi/GetUserSettingsHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Users/WebApi/GetUserSettingsHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Users/WebApi/UpdateNotificationsHandler.cs b/src/Server/App/Coderr.Server.App/Core/Users/WebApi/UpdateNotificationsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Users/WebApi/UpdateNotificationsHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Users/WebApi/UpdateNotificationsHandler.cs
diff --git a/src/Server/Coderr.Server.App/Core/Users/WebApi/UpdatePersonalSettingsHandler.cs b/src/Server/App/Coderr.Server.App/Core/Users/WebApi/UpdatePersonalSettingsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Core/Users/WebApi/UpdatePersonalSettingsHandler.cs
rename to src/Server/App/Coderr.Server.App/Core/Users/WebApi/UpdatePersonalSettingsHandler.cs
diff --git a/src/Server/Coderr.Server.App/CustomDictionary.xml b/src/Server/App/Coderr.Server.App/CustomDictionary.xml
similarity index 95%
rename from src/Server/Coderr.Server.App/CustomDictionary.xml
rename to src/Server/App/Coderr.Server.App/CustomDictionary.xml
index 2168f6a0..0f71fe67 100644
--- a/src/Server/Coderr.Server.App/CustomDictionary.xml
+++ b/src/Server/App/Coderr.Server.App/CustomDictionary.xml
@@ -1,45 +1,45 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-
-<Dictionary>
-  <Words>
-    <Unrecognized>
-      <Word></Word>
-    </Unrecognized>
-    <Recognized>
-      <Word>Api</Word>
-      <Word>Dto</Word>
-      <Word>Gsm</Word>
-      <Word>Os</Word>
-      <Word>Ip</Word>
-      <Word>Mvc</Word>
-      <Word>Sku</Word>
-      <Word>Sms</Word>
-      <Word>Templating</Word>
-      <Word>Tokenizer</Word>
-      <Word>Geolocation</Word>
-      <Word>FilterCondition</Word>
-      <Word>FilterResult</Word>
-      <Word>LastTriggerAction</Word>
-      <Word>TriggerFilterCondition</Word>
-      <Word>Tokenizer</Word>
-      <Word>Mb</Word>
-      <Word>Id</Word>
-      <Word>ip</Word>
-      <Word>Login</Word>
-    </Recognized>
-    <Deprecated>
-      <Term PreferredAlternate=""></Term>
-    </Deprecated>
-    <Compound>
-      <Term CompoundAlternate=""></Term>
-    </Compound>
-    <DiscreteExceptions>
-      <Term>Login</Term>
-    </DiscreteExceptions>
-  </Words>
-  <Acronyms>
-    <CasingExceptions>
-      <Acronym></Acronym>
-    </CasingExceptions>
-  </Acronyms>
+﻿<?xml version="1.0" encoding="utf-8"?>
+
+<Dictionary>
+  <Words>
+    <Unrecognized>
+      <Word></Word>
+    </Unrecognized>
+    <Recognized>
+      <Word>Api</Word>
+      <Word>Dto</Word>
+      <Word>Gsm</Word>
+      <Word>Os</Word>
+      <Word>Ip</Word>
+      <Word>Mvc</Word>
+      <Word>Sku</Word>
+      <Word>Sms</Word>
+      <Word>Templating</Word>
+      <Word>Tokenizer</Word>
+      <Word>Geolocation</Word>
+      <Word>FilterCondition</Word>
+      <Word>FilterResult</Word>
+      <Word>LastTriggerAction</Word>
+      <Word>TriggerFilterCondition</Word>
+      <Word>Tokenizer</Word>
+      <Word>Mb</Word>
+      <Word>Id</Word>
+      <Word>ip</Word>
+      <Word>Login</Word>
+    </Recognized>
+    <Deprecated>
+      <Term PreferredAlternate=""></Term>
+    </Deprecated>
+    <Compound>
+      <Term CompoundAlternate=""></Term>
+    </Compound>
+    <DiscreteExceptions>
+      <Term>Login</Term>
+    </DiscreteExceptions>
+  </Words>
+  <Acronyms>
+    <CasingExceptions>
+      <Acronym></Acronym>
+    </CasingExceptions>
+  </Acronyms>
 </Dictionary>
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/DateExtensions.cs b/src/Server/App/Coderr.Server.App/DateExtensions.cs
new file mode 100644
index 00000000..409ad90b
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/DateExtensions.cs
@@ -0,0 +1,12 @@
+﻿using System;
+
+namespace Coderr.Server.App
+{
+    public static class DateExtensions
+    {
+        public static DateTime ToFirstDayOfMonth(this DateTime time)
+        {
+            return new DateTime(time.Year, time.Month, 1);
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Escalation/EscalateOnTagAttached.cs b/src/Server/App/Coderr.Server.App/Escalation/EscalateOnTagAttached.cs
new file mode 100644
index 00000000..ad1a91b0
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Escalation/EscalateOnTagAttached.cs
@@ -0,0 +1,53 @@
+﻿using System;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Escalation.Events;
+using Coderr.Server.Api.Modules.Tagging.Events;
+using Coderr.Server.Domain.Core.Incidents;
+using DotNetCqs;
+
+namespace Coderr.Server.App.Escalation
+{
+    class EscalateOnTagAttached : IMessageHandler<TagAttachedToIncident>
+    {
+        private readonly IIncidentRepository _repository;
+        private readonly IMessageBus _bus;
+
+        public EscalateOnTagAttached(IIncidentRepository repository, IMessageBus bus)
+        {
+            _repository = repository ?? throw new ArgumentNullException(nameof(repository));
+            _bus = bus ?? throw new ArgumentNullException(nameof(bus));
+        }
+
+        public async Task HandleAsync(IMessageContext context, TagAttachedToIncident message)
+        {
+            if (message.Tags.Any(x => x.Equals("critical", StringComparison.OrdinalIgnoreCase)))
+            {
+                await AddIncident(message.IncidentId, message.ApplicationId, EscalationState.Critical);
+            }
+            else if (message.Tags.Any(x => x.Equals("important", StringComparison.OrdinalIgnoreCase)))
+            {
+                await AddIncident(message.IncidentId, message.ApplicationId, EscalationState.Important);
+            }
+        }
+
+        private async Task AddIncident(int incidentId, int applicationId, EscalationState state)
+        {
+            var incident = await _repository.GetAsync(incidentId);
+            var currentState = incident.Escalation;
+            if (currentState == state)
+            {
+                return;
+            }
+
+            incident.Escalation = state;
+            await _repository.UpdateAsync(incident);
+
+            await _bus.SendAsync(new IncidentEscalated(applicationId, incidentId)
+            {
+                IsCritical = state == EscalationState.Critical, 
+                IsImportant = state == EscalationState.Important
+            });
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.App/GlobalSuppressions.cs b/src/Server/App/Coderr.Server.App/GlobalSuppressions.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/GlobalSuppressions.cs
rename to src/Server/App/Coderr.Server.App/GlobalSuppressions.cs
diff --git a/src/Server/Coderr.Server.App/GlobalSuppressions.cs.orig b/src/Server/App/Coderr.Server.App/GlobalSuppressions.cs.orig
similarity index 100%
rename from src/Server/Coderr.Server.App/GlobalSuppressions.cs.orig
rename to src/Server/App/Coderr.Server.App/GlobalSuppressions.cs.orig
diff --git a/src/Server/App/Coderr.Server.App/HighlightedData/CustomContextDataProvider.cs b/src/Server/App/Coderr.Server.App/HighlightedData/CustomContextDataProvider.cs
new file mode 100644
index 00000000..dba9a4ea
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/HighlightedData/CustomContextDataProvider.cs
@@ -0,0 +1,57 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Incidents;
+using Coderr.Server.Api.Core.Incidents.Queries;
+using DotNetCqs;
+
+namespace Coderr.Server.App.HighlightedData
+{
+    [ContainerService]
+    internal class CustomContextDataProvider : IHighlightedContextDataProvider
+    {
+        private readonly IQueryBus _queryBus;
+
+        public CustomContextDataProvider(IQueryBus queryBus)
+        {
+            _queryBus = queryBus;
+        }
+
+        public async Task CollectAsync(HighlightedContextDataProviderContext context)
+        {
+            var query = new GetCollection(context.IncidentId, "ContextData")
+            {
+                MaxNumberOfCollections = 1
+            };
+            var collection = await _queryBus.QueryAsync(query);
+            if (collection.Items.Length == 0)
+                return;
+
+
+            string[] values;
+            var name = "ContextData";
+            var props = collection.Items[0].Properties;
+            if (props.Count > 1)
+            {
+                values = props
+                    .Select(x => $"{x.Key}: {x.Value}")
+                    .ToArray();
+            }
+            else
+            {
+                var first = props.First();
+                name = first.Key;
+                values = new[] { first.Value };
+            }
+
+            var data = new HighlightedContextData
+            {
+                Description = "Data supplied by the developer",
+                Name = name,
+                Value = values
+            };
+
+            context.AddValue(data);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/HighlightedData/RequestProvider.cs b/src/Server/App/Coderr.Server.App/HighlightedData/RequestProvider.cs
new file mode 100644
index 00000000..c9ab6d41
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/HighlightedData/RequestProvider.cs
@@ -0,0 +1,82 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Incidents;
+using Coderr.Server.Api.Core.Incidents.Queries;
+using Coderr.Server.Api.Core.Reports.Queries;
+using DotNetCqs;
+
+namespace Coderr.Server.App.HighlightedData
+{
+    [ContainerService]
+    internal class RequestProvider : IHighlightedContextDataProvider
+    {
+        private readonly IQueryBus _queryBus;
+
+        public RequestProvider(IQueryBus queryBus)
+        {
+            _queryBus = queryBus;
+        }
+
+        public async Task CollectAsync(HighlightedContextDataProviderContext context)
+        {
+            if (!context.Tags.Contains("http"))
+                return;
+
+            var query = new GetReportList(context.IncidentId)
+            {
+                PageNumber = 1,
+                PageSize = 1
+            };
+            var reports = await _queryBus.QueryAsync(query);
+
+            var query2 = new GetReport(reports.Items[0].Id);
+            var report = await _queryBus.QueryAsync(query2);
+
+            var request = report.ContextCollections.FirstOrDefault(x => x.Name == "HttpRequest");
+            var formData = report.ContextCollections.FirstOrDefault(x => x.Name == "HttpForm");
+            if (formData == null && request == null)
+                return;
+
+
+            if (formData != null)
+            {
+                foreach (var property in formData.Properties)
+                {
+                    context.AddValue(new HighlightedContextData
+                    {
+                        Name = property.Key,
+                        Description = "HTTP Form field",
+                        Value = new[] {property.Value}
+                    });
+                }
+            }
+
+            if (request != null)
+            {
+                var url = request.Properties.FirstOrDefault(x => x.Key == "Url" || x.Key == "Uri");
+                if (url != null)
+                {
+                    context.AddValue(new HighlightedContextData
+                    {
+                        Description = "Visted URL",
+                        Name = "Url",
+                        Value = new[] {url.Value}
+                    });
+                }
+
+                var referrer = request.Properties.FirstOrDefault(x =>
+                    x.Key == "Referrer" || x.Key == "HttpReferrer" || x.Key == "Referer" || x.Key == "HttpReferer");
+                if (referrer != null)
+                {
+                    context.AddValue(new HighlightedContextData
+                    {
+                        Description = "Which page the user came from",
+                        Name = "Referrer",
+                        Value = new[] {referrer.Value}
+                    });
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/HighlightedData/SuppliedHighlightedDataProvider.cs b/src/Server/App/Coderr.Server.App/HighlightedData/SuppliedHighlightedDataProvider.cs
new file mode 100644
index 00000000..a29eaf3e
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/HighlightedData/SuppliedHighlightedDataProvider.cs
@@ -0,0 +1,50 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Incidents;
+using Coderr.Server.Api.Core.Incidents.Queries;
+using DotNetCqs;
+
+namespace Coderr.Server.App.HighlightedData
+{
+    [ContainerService]
+    internal class SuppliedHighlightedDataProvider : IHighlightedContextDataProvider
+    {
+        private readonly IQueryBus _queryBus;
+
+        public SuppliedHighlightedDataProvider(IQueryBus queryBus)
+        {
+            _queryBus = queryBus;
+        }
+
+        public async Task CollectAsync(HighlightedContextDataProviderContext context)
+        {
+            var query = new GetCollection(context.IncidentId, "CoderrData")
+            {
+                MaxNumberOfCollections = 1
+            };
+            var collection = await _queryBus.QueryAsync(query);
+            if (collection.Items.Length == 0)
+                return;
+
+
+            var props = collection.Items[0]
+                .Properties
+                .Where(x => x.Key.StartsWith("Highlight."))
+                .ToList();
+            foreach (var pair in props)
+            {
+                var name = pair.Key.Remove(0, "Highlight.".Length);
+                var data = new HighlightedContextData
+                {
+                    Description = "Data provided by the client library",
+                    Name = name,
+                    Value = new[] { pair.Value }
+                };
+
+                context.AddValue(data);
+
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/IncidentInsights/GetInsightsHandler.cs b/src/Server/App/Coderr.Server.App/IncidentInsights/GetInsightsHandler.cs
new file mode 100644
index 00000000..1ccecb76
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/IncidentInsights/GetInsightsHandler.cs
@@ -0,0 +1,395 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Security;
+using Coderr.Server.Api.Core.Accounts.Queries;
+using Coderr.Server.Api.Core.Applications;
+using Coderr.Server.Api.Core.Applications.Queries;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.Domain.Core.Account;
+using Coderr.Server.Domain.Core.Applications;
+using DotNetCqs;
+
+namespace Coderr.Server.App.IncidentInsights
+{
+    public class GetInsightsHandler : IQueryHandler<GetInsights, GetInsightsResult>
+    {
+        private readonly IAccountRepository _accountRepository;
+        private readonly IApplicationRepository _applicationRepository;
+        private readonly Dictionary<string, string> _cachedValueIds = new Dictionary<string, string>();
+        private readonly IEnumerable<IKeyPerformanceIndicatorGenerator> _generators;
+        private readonly IQueryBus _queryBus;
+        private ApplicationListItem[] _apps;
+        private readonly Dictionary<int, string> _userCache = new Dictionary<int, string>();
+
+        public GetInsightsHandler(IQueryBus queryBus,
+            IEnumerable<IKeyPerformanceIndicatorGenerator> generators, IApplicationRepository applicationRepository,
+            IAccountRepository accountRepository)
+        {
+            _queryBus = queryBus;
+            _generators = generators;
+            _applicationRepository = applicationRepository;
+            _accountRepository = accountRepository;
+        }
+
+        public async Task<GetInsightsResult> HandleAsync(IMessageContext context,
+            GetInsights query)
+        {
+            _apps = await _queryBus.QueryAsync(new GetApplicationList
+            {
+                AccountId = context.Principal.GetAccountId()
+            });
+            await AddMembersToAppsWithoutConfiguredDevelopers(_apps);
+
+
+            //var now = new DateTime(2019, 03, 30);
+            var now = DateTime.UtcNow;
+            var dates = new List<DateTime>();
+            for (var i = 0; i <= 12; i++)
+                dates.Add(now.ToFirstDayOfMonth().AddMonths(-12 + i));
+
+
+
+            var indicatorsPerApplication = new Dictionary<int, List<KeyPerformanceIndicator>>();
+            var ctx = new KeyPerformanceIndicatorContext(indicatorsPerApplication)
+            {
+                ApplicationIds = _apps.Select(x => x.Id).ToArray(),
+                PeriodStartDate = now.Date.AddDays(-90),
+                PeriodEndDate = now,
+                ValueStartDate = now.Date.AddDays(-30),
+                ValueEndDate = now,
+                StartDate = dates.FirstOrDefault(),
+                EndDate = now,
+                TrendDates = dates.ToArray()
+            };
+
+            foreach (var generator in _generators)
+                await generator.CollectAsync(ctx);
+
+            AddNormalizedTrendValues(indicatorsPerApplication);
+
+            var systemInsights = new List<GetInsightResultIndicator>();
+            if (indicatorsPerApplication.TryGetValue(0, out var systemIndicators))
+            {
+                AddNormalizedTrendValues(systemIndicators);
+                systemInsights = new List<GetInsightResultIndicator>();
+                foreach (var indicator in systemIndicators)
+                {
+                    var dto = await ConvertIndicator(indicator);
+                    await LoadValueName(indicator, dto);
+                    systemInsights.Add(dto);
+                }
+            }
+
+            //var systemInsights2 = await GenerateSystemInsights(indicatorsPerApplication);
+            //systemInsights.AddRange(systemInsights2);
+
+            var apps = new List<GetInsightResultApplication>();
+            foreach (var pair in indicatorsPerApplication.Where(x => x.Key != 0))
+            {
+                var dto = await ConvertApplication(pair);
+                apps.Add(dto);
+            }
+
+
+            var result = new GetInsightsResult
+            {
+                Indicators = systemInsights.ToArray(),
+                ApplicationInsights = apps.ToArray(),
+                TrendDates = ctx.TrendDates.Select(x => x.ToShortDateString()).ToArray()
+            };
+
+            return result;
+        }
+
+        private void AddNormalizedTrendValues(List<KeyPerformanceIndicator> indicators)
+        {
+            foreach (var indicator in indicators)
+            {
+                if (!indicator.CanBeNormalized || indicator.ValueIdType != ValueIdType.ApplicationId)
+                    continue;
+
+                //only app indicators can be normalized
+                foreach (var trendLine in indicator.TrendLines)
+                {
+                    foreach (var value in trendLine.TrendValues)
+                    {
+                        
+                        var app = _apps.First(x => x.Id == trendLine.DisplayNameId);
+                        if (app.NumberOfDevelopers == null)
+                            continue;
+
+                        value.Normalized =
+                            Convert.ToInt32(GetDouble(value.Value) / (double)app.NumberOfDevelopers.Value);
+                    }
+                }
+            }
+        }
+
+        private void AddNormalizedTrendValues(Dictionary<int, List<KeyPerformanceIndicator>> indicatorsPerApplication)
+        {
+            foreach (var indicators in indicatorsPerApplication)
+            {
+                //Ignore system indicators.
+                if (indicators.Key == 0)
+                    continue;
+
+                foreach (var indicator in indicators.Value)
+                {
+                    if (!indicator.CanBeNormalized)
+                        continue;
+
+                    //only app indicators can be normalized
+                    foreach (var trendLine in indicator.TrendLines)
+                    {
+                        foreach (var value in trendLine.TrendValues)
+                        {
+                            var app = _apps.First(x => x.Id == indicators.Key);
+                            if (app.NumberOfDevelopers == null)
+                                continue;
+
+                            value.Normalized = Convert.ToInt32(GetDouble(value.Value) / (double)app.NumberOfDevelopers.Value);
+                        }
+                    }
+                }
+            }
+        }
+
+        private double GetNormalizedValue(KeyPerformanceIndicator keyPerformanceIndicator)
+        {
+            if (keyPerformanceIndicator.ValueIdType != ValueIdType.ApplicationId)
+                return GetDouble(keyPerformanceIndicator.Value);
+
+            var devs = GetDevs(keyPerformanceIndicator.ValueId);
+            var value = GetDouble(keyPerformanceIndicator.Value);
+            return value.DivideWith((double)devs);
+        }
+
+        private decimal GetDevs(int? applicationId)
+        {
+            if (applicationId == null)
+                return 0;
+
+            var app = _apps.FirstOrDefault(x => x.Id == applicationId.Value);
+            if (app == null)
+                return 0;
+
+            return app.NumberOfDevelopers ?? 0;
+        }
+
+        /// <summary>
+        /// Boxing galore!
+        /// </summary>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        private double GetDouble(object value)
+        {
+            if (value == null)
+                return 0d;
+
+            if (value is double d)
+                return d;
+
+            if (value is int i)
+                return i;
+
+            if (value is decimal dec)
+                return (double)dec;
+
+            return (double)Convert.ChangeType(value, typeof(double));
+
+        }
+
+        private int? RoundValue(object value, ValueIdType valueType)
+        {
+            if (value is null)
+            {
+                return null;
+            }
+
+            if (value is int)
+                return (int)value;
+
+            return (int)Convert.ChangeType(GetDouble(value), typeof(int));
+        }
+
+        private async Task LoadValueName(KeyPerformanceIndicator indicator, GetInsightResultIndicator dto)
+        {
+            if (indicator.ValueIdType == ValueIdType.AccountId)
+            {
+                if (indicator.ValueId == 0 || indicator.ValueId == null)
+                {
+                    dto.ValueName = "No one";
+                    return;
+                }
+
+                if (!_userCache.TryGetValue((int)indicator.ValueId, out var name))
+                {
+                    var userId = (int)indicator.ValueId;
+                    name = (await _accountRepository.GetByIdAsync(userId)).UserName;
+                    _userCache[userId] = name;
+                }
+
+                dto.ValueName = name;
+            }
+            else if (indicator.ValueIdType == ValueIdType.AccountId)
+            {
+                if (indicator.ValueId == 0)
+                {
+                    dto.ValueName = "None";
+                    return;
+                }
+
+                var app = _apps.First(x => x.Id == indicator.ValueId);
+                dto.ValueName = app.Name;
+            }
+        }
+
+        private async Task AddMembersToAppsWithoutConfiguredDevelopers(ApplicationListItem[] apps)
+        {
+            foreach (var item in apps.Where(x => x.NumberOfDevelopers == null))
+            {
+                var members = await _applicationRepository.GetTeamMembersAsync(item.Id);
+                item.NumberOfDevelopers = members.Count;
+            }
+        }
+
+        private async Task<GetInsightResultApplication> ConvertApplication(
+            KeyValuePair<int, List<KeyPerformanceIndicator>> arg)
+        {
+            var app = _apps.First(x => x.Id == arg.Key);
+            var indicators = new List<GetInsightResultIndicator>();
+            foreach (var indicator in arg.Value)
+            {
+                var converted = await ConvertIndicator(indicator);
+                indicators.Add(converted);
+            }
+
+            return new GetInsightResultApplication
+            {
+                Id = app.Id,
+                Name = app.Name,
+                NumberOfDevelopers =
+                    app.NumberOfDevelopers.Value, // we've added Team members for apps that doesn't specify FTEs
+                Indicators = indicators.ToArray()
+
+            };
+        }
+
+        private async Task<GetInsightResultIndicator> ConvertIndicator(KeyPerformanceIndicator arg)
+        {
+            var toplist = arg.Toplist != null
+                ? await ConvertToplist(arg)
+                : new List<IndicatorToplistItem>();
+
+            await AddNameToTrendlines(arg.ValueIdType, arg.TrendLines);
+
+            var dto = new GetInsightResultIndicator
+            {
+                CanBeNormalized = arg.CanBeNormalized,
+                Name = arg.Name,
+                Description = arg.Description,
+                Comment = arg.Comment,
+                PeriodValue = RoundValue(arg.PeriodValue, arg.ValueIdType),
+                Title = arg.Title,
+                IsAlternative = arg.IsVariation,
+                TrendLines = arg.TrendLines,
+                Toplist = toplist.ToArray(),
+                ValueUnit = arg.ValueUnit,
+                Value = RoundValue(arg.Value, arg.ValueIdType),
+                IsValueNameApplicationName = arg.ValueIdType == ValueIdType.ApplicationId
+            };
+
+            if (arg.ValueIdType == ValueIdType.AccountId && arg.ValueId == null)
+                dto.ValueName = "No one";
+            if (arg.ValueIdType == ValueIdType.AccountId && arg.PeriodValueId == null)
+                dto.PeriodValueName = "No one";
+            if (arg.ValueIdType == ValueIdType.ApplicationId && arg.ValueId == null)
+                dto.ValueName = "None";
+            if (arg.ValueIdType == ValueIdType.ApplicationId && arg.PeriodValueId == null)
+                dto.PeriodValueName = "None";
+
+
+            if (arg.ValueId != null)
+                dto.ValueName = await GetValueName(arg.ValueIdType, arg.ValueId);
+            if (arg.PeriodValueId != null)
+                dto.PeriodValueName = await GetValueName(arg.ValueIdType, arg.PeriodValueId);
+
+            switch (arg.ComparisonType)
+            {
+                case IndicatorValueComparison.DoNotCompare:
+                    dto.HigherValueIsBetter = null;
+                    break;
+                case IndicatorValueComparison.HigherIsBetter:
+                    dto.HigherValueIsBetter = true;
+                    break;
+                case IndicatorValueComparison.LowerIsBetter:
+                    dto.HigherValueIsBetter = false;
+                    break;
+            }
+
+            return dto;
+        }
+
+        private async Task AddNameToTrendlines(ValueIdType type, TrendLine[] trendLines)
+        {
+            foreach (var line in trendLines)
+            {
+                if (line.DisplayNameId > 0)
+                {
+                    line.DisplayName = await GetValueName(type, line.DisplayNameId);
+                }
+            }
+        }
+
+        private async Task<List<IndicatorToplistItem>> ConvertToplist(KeyPerformanceIndicator arg)
+        {
+            var toplist = new List<IndicatorToplistItem>();
+            foreach (var item in arg.Toplist)
+            {
+                var dtoItem = new IndicatorToplistItem
+                {
+                    Value = item.Value is double ? Convert.ToInt32(item.Value) : item.Value,
+                    Comment = item.Comment,
+                };
+                if (item.ValueId != null)
+                    dtoItem.Title = await GetValueName(arg.ToplistValueType, item.ValueId);
+                else
+                    dtoItem.Title = item.ValueName;
+                toplist.Add(dtoItem);
+            }
+
+            return toplist;
+        }
+
+        private async Task<string> GetValueName(ValueIdType valueType, int? id)
+        {
+            if (id == null || 0.Equals(id))
+            {
+                return valueType == ValueIdType.AccountId ? "No one" : "No application";
+            }
+
+            if (_cachedValueIds.TryGetValue($"{valueType}_{id}", out var value))
+                return value;
+
+            switch (valueType)
+            {
+                case ValueIdType.AccountId:
+                    {
+                        var result = await _queryBus.QueryAsync(new GetAccountById(id.Value));
+                        _cachedValueIds[$"{valueType}_{id}"] = result.UserName;
+                        return result.UserName;
+                    }
+                case ValueIdType.ApplicationId:
+                    {
+                        return _apps.First(x => x.Id == id.Value).Name;
+                    }
+                default:
+                    return null;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/IncidentInsights/IIncidentProgressRepository.cs b/src/Server/App/Coderr.Server.App/IncidentInsights/IIncidentProgressRepository.cs
new file mode 100644
index 00000000..32151b4e
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/IncidentInsights/IIncidentProgressRepository.cs
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.App.IncidentInsights.Subscribers;
+using Coderr.Server.Domain.Modules.Statistics;
+
+namespace Coderr.Server.App.IncidentInsights
+{
+    public interface IIncidentProgressRepository
+    {
+        Task<List<IncidentProgressTracker>> FindAssigned(int[] applicationIds, DateTime @from, DateTime to);
+        Task<List<IncidentProgressTracker>> FindCreated(int[] applicationIds, DateTime @from, DateTime to);
+        Task<List<IncidentProgressTracker>> FindClosed(int[] applicationIds, DateTime @from, DateTime to);
+
+        IDictionary<int, int>  CountAll(int[] applicationIds, DateTime from, DateTime to);
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/IncidentInsights/IncidentProgressCacheKey.cs b/src/Server/App/Coderr.Server.App/IncidentInsights/IncidentProgressCacheKey.cs
new file mode 100644
index 00000000..86acff39
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/IncidentInsights/IncidentProgressCacheKey.cs
@@ -0,0 +1,53 @@
+﻿using System;
+
+namespace Coderr.Server.App.IncidentInsights
+{
+    public class IncidentProgressCacheKey : IEquatable<IncidentProgressCacheKey>
+    {
+        private readonly int[] _applicationIds;
+        private readonly DateTime _from;
+        private readonly DateTime _to;
+
+        public IncidentProgressCacheKey(int applicationId, DateTime from, DateTime to)
+        {
+            _applicationIds = new[] {applicationId};
+            _from = from;
+            _to = to;
+        }
+
+        public IncidentProgressCacheKey(int[] applicationIds, DateTime from, DateTime to)
+        {
+            _applicationIds = applicationIds ?? throw new ArgumentNullException(nameof(applicationIds));
+            _from = from;
+            _to = to;
+        }
+
+        public bool Equals(IncidentProgressCacheKey other)
+        {
+            if (ReferenceEquals(null, other)) return false;
+            if (ReferenceEquals(this, other)) return true;
+            return Equals(_applicationIds, other._applicationIds)
+                   && _from.Equals(other._from)
+                   && _to.Equals(other._to);
+        }
+
+        public override bool Equals(object obj)
+        {
+            if (ReferenceEquals(null, obj)) return false;
+            if (ReferenceEquals(this, obj)) return true;
+            if (obj.GetType() != GetType()) return false;
+            return Equals((IncidentProgressCacheKey) obj);
+        }
+
+        public override int GetHashCode()
+        {
+            unchecked
+            {
+                var hashCode = _applicationIds.GetHashCode();
+                hashCode = (hashCode * 397) ^ _from.GetHashCode();
+                hashCode = (hashCode * 397) ^ _to.GetHashCode();
+                return hashCode;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/IncidentInsights/IncidentProgressRepository.cs b/src/Server/App/Coderr.Server.App/IncidentInsights/IncidentProgressRepository.cs
new file mode 100644
index 00000000..e7e560bc
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/IncidentInsights/IncidentProgressRepository.cs
@@ -0,0 +1,119 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.IncidentInsights.Subscribers;
+using Coderr.Server.Domain.Modules.Statistics;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.IncidentInsights
+{
+    [ContainerService]
+    public class IncidentProgressRepository : IIncidentProgressRepository
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        private readonly Dictionary<IncidentProgressCacheKey, List<IncidentProgressTracker>> _assignedCache =
+            new Dictionary<IncidentProgressCacheKey, List<IncidentProgressTracker>>();
+
+        private readonly Dictionary<IncidentProgressCacheKey, List<IncidentProgressTracker>> _closedCache =
+            new Dictionary<IncidentProgressCacheKey, List<IncidentProgressTracker>>();
+
+        private readonly Dictionary<IncidentProgressCacheKey, List<IncidentProgressTracker>> _createdCache =
+            new Dictionary<IncidentProgressCacheKey, List<IncidentProgressTracker>>();
+
+        public IncidentProgressRepository(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public async Task<List<IncidentProgressTracker>> FindAssigned(int[] applicationIds, DateTime from, DateTime to)
+        {
+            var key = new IncidentProgressCacheKey(applicationIds, from, to);
+            if (_assignedCache.TryGetValue(key, out var cacheItem))
+                return cacheItem;
+
+            var ids = string.Join(", ", applicationIds);
+            var sql = $@"SELECT *
+                        FROM CommonIncidentProgressTracking
+                        WHERE ApplicationId IN ({ids})
+                        AND AssignedAtUtc >= @from
+                        AND AssignedAtUtc <= @to
+                        ORDER BY CreatedAtUtc";
+
+            var result = await _unitOfWork.ToListAsync<IncidentProgressTracker>(sql, new
+            {
+                from = from.Date,
+                to
+            });
+            _assignedCache[key] = result;
+            return result;
+        }
+
+        public async Task<List<IncidentProgressTracker>> FindCreated(int[] applicationIds, DateTime from, DateTime to)
+        {
+            var key = new IncidentProgressCacheKey(applicationIds, from, to);
+            if (_createdCache.TryGetValue(key, out var cacheItem))
+                return cacheItem;
+
+            var ids = string.Join(", ", applicationIds);
+            var sql = $@"SELECT *
+                        FROM CommonIncidentProgressTracking
+                        WHERE ApplicationId IN ({ids})
+                        AND CreatedAtUtc >= @from
+                        AND CreatedAtUTc <= @to
+                        ORDER BY CreatedAtUtc";
+
+            var result = await _unitOfWork.ToListAsync<IncidentProgressTracker>(sql, new {from, to});
+            _createdCache[key] = result;
+            return result;
+        }
+
+        public async Task<List<IncidentProgressTracker>> FindClosed(int[] applicationIds, DateTime from, DateTime to)
+        {
+            var key = new IncidentProgressCacheKey(applicationIds, from, to);
+            if (_closedCache.TryGetValue(key, out var cacheItem))
+                return cacheItem;
+
+            var ids = string.Join(", ", applicationIds);
+            var sql = $@"SELECT *
+                        FROM CommonIncidentProgressTracking
+                        WHERE ApplicationId IN ({ids})
+                        AND ClosedAtUtc >= @from
+                        AND ClosedAtUTc <= @to
+                        ORDER BY CreatedAtUtc";
+
+            var result = await _unitOfWork.ToListAsync<IncidentProgressTracker>(sql, new {from, to});
+            _closedCache[key] = result;
+            return result;
+        }
+
+        public IDictionary<int, int> CountAll(int[] applicationIds, DateTime from, DateTime to)
+        {
+            var ids = string.Join(", ", applicationIds);
+            var sql = $@"SELECT ApplicationId, Count(*)
+                        FROM CommonIncidentProgressTracking
+                        WHERE ApplicationId IN ({ids})
+                        AND (
+                            (CreatedAtUtc >= @from AND CreatedAtUTc <= @to)
+                             OR (AssignedAtUtc >= @from AND AssignedAtUtc <= @to)
+                             OR (ClosedAtUtc >= @from AND ClosedAtUtc <= @to)
+                        )
+                        GROUP BY ApplicationId";
+            using (var cmd = _unitOfWork.CreateCommand())
+            {
+                cmd.CommandText = sql;
+                cmd.AddParameter("from", from);
+                cmd.AddParameter("to", to);
+                using (var reader = cmd.ExecuteReader())
+                {
+                    var items = new Dictionary<int, int>();
+                    while (reader.Read()) items.Add(reader.GetInt32(0), reader.GetInt32(1));
+
+                    return items;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/IncidentInsights/InsightConfiguration.cs b/src/Server/App/Coderr.Server.App/IncidentInsights/InsightConfiguration.cs
new file mode 100644
index 00000000..29e39782
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/IncidentInsights/InsightConfiguration.cs
@@ -0,0 +1,23 @@
+﻿using System.Collections.Generic;
+using Coderr.Server.Abstractions.Config;
+using Coderr.Server.Infrastructure.Configuration;
+
+namespace Coderr.Server.App.IncidentInsights
+{
+    public class InsightConfiguration : IConfigurationSection
+    {
+        public string SectionName => "Insights";
+
+        public bool HaveFilledDatabase { get; set; }
+
+        public void Load(IDictionary<string, string> settings)
+        {
+            HaveFilledDatabase = settings.GetBoolean("HaveFilledDatabase", false);
+        }
+
+        public IDictionary<string, string> ToDictionary()
+        {
+            return this.ToConfigDictionary();
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/IncidentInsights/Subscribers/AggregateIncidentEventsSubscriber.cs b/src/Server/App/Coderr.Server.App/IncidentInsights/Subscribers/AggregateIncidentEventsSubscriber.cs
new file mode 100644
index 00000000..1ffca694
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/IncidentInsights/Subscribers/AggregateIncidentEventsSubscriber.cs
@@ -0,0 +1,96 @@
+﻿using System;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Core.Incidents.Events;
+using Coderr.Server.Domain.Core.Incidents.Events;
+using Coderr.Server.Domain.Modules.Statistics;
+using DotNetCqs;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.IncidentInsights.Subscribers
+{
+    internal class AggregateIncidentEventsSubscriber
+        : IMessageHandler<IncidentCreated>
+            , IMessageHandler<IncidentClosed>
+            , IMessageHandler<IncidentReOpened>
+            , IMessageHandler<IncidentAssigned>
+            , IMessageHandler<IncidentDeleted>
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public AggregateIncidentEventsSubscriber(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentAssigned message)
+        {
+            var entity =
+                await _unitOfWork.FirstOrDefaultAsync<IncidentProgressTracker>("IncidentId = @incidentId", new { incidentId = message.IncidentId });
+            if (entity == null) return;
+
+            // är en bugg ngnstans där assignedAt kommer med som MinValue
+            entity.AssignedAtUtc = message.AssignedAtUtc != DateTime.MinValue
+                ? message.AssignedAtUtc
+                : DateTime.UtcNow;
+            entity.AssignedToId = message.AssignedToId;
+            await _unitOfWork.UpdateAsync(entity);
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentClosed message)
+        {
+            var entity =
+                await _unitOfWork.FirstOrDefaultAsync<IncidentProgressTracker>("IncidentId = @incidentId", new { incidentId = message.IncidentId });
+            if (entity == null) return;
+
+            entity.ClosedAtUtc = message.ClosedAtUtc == DateTime.MinValue
+                ? DateTime.UtcNow
+                : message.ClosedAtUtc;
+            entity.ClosedById = message.ClosedById;
+            await _unitOfWork.UpdateAsync(entity);
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentCreated message)
+        {
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText =
+                    @"BEGIN TRY
+                            INSERT INTO CommonIncidentProgressTracking (IncidentId, ApplicationId, CreatedAtUtc, Versions, VersionCount)
+                            VALUES (@IncidentId, @applicationId, @CreatedAtUtc, @versions, 1)
+                        END TRY
+                        BEGIN CATCH
+                            IF ERROR_NUMBER() <> 2627
+                              THROW
+                        END CATCH";
+                cmd.AddParameter("CreatedAtUtc", message.CreatedAtUtc);
+                cmd.AddParameter("IncidentId", message.IncidentId);
+                cmd.AddParameter("ApplicationId", message.ApplicationId);
+                cmd.AddParameter("Versions", $";{message.ApplicationVersion};");
+                await cmd.ExecuteNonQueryAsync();
+            }
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentReOpened message)
+        {
+            var entity =
+                await _unitOfWork.FirstOrDefaultAsync<IncidentProgressTracker>("IncidentId = @incidentId", new { incidentId = message.IncidentId });
+            if (entity == null) return;
+
+            entity.ReOpenedAtUtc = message.CreatedAtUtc.Date;
+            entity.ReOpenCount += 1;
+            await _unitOfWork.UpdateAsync(entity);
+        }
+        
+        public async Task HandleAsync(IMessageContext context, IncidentDeleted message)
+        {
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText =
+                    @"DELETE FROM CommonIncidentProgressTracking WHERE IncidentId = @id";
+                cmd.AddParameter("id", message.IncidentId);
+                await cmd.ExecuteNonQueryAsync();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/IncidentInsights/Subscribers/FillFromHistoryJob.cs b/src/Server/App/Coderr.Server.App/IncidentInsights/Subscribers/FillFromHistoryJob.cs
new file mode 100644
index 00000000..f20188de
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/IncidentInsights/Subscribers/FillFromHistoryJob.cs
@@ -0,0 +1,69 @@
+﻿using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Config;
+using Griffin.ApplicationServices;
+using Griffin.Data;
+
+namespace Coderr.Server.App.IncidentInsights.Subscribers
+{
+    
+    /// <summary>
+    /// Invoked at start to load incident history into stats.
+    /// </summary>
+    [ContainerService(RegisterAsSelf = true)]
+    class FillFromHistoryJob : IBackgroundJob
+    {
+        private readonly IAdoNetUnitOfWork _adoNetUnitOfWork;
+        private readonly IConfiguration<InsightConfiguration> _configuration;
+
+        public FillFromHistoryJob(IAdoNetUnitOfWork adoNetUnitOfWork, IConfiguration<InsightConfiguration> configuration)
+        {
+            _adoNetUnitOfWork = adoNetUnitOfWork;
+            _configuration = configuration;
+        }
+
+        public void Execute()
+        {
+            if (_configuration.Value.HaveFilledDatabase)
+                return;
+
+            using (var cmd = _adoNetUnitOfWork.CreateCommand())
+            {
+                cmd.CommandText =
+                    @"INSERT INTO CommonIncidentProgressTracking (ApplicationId, IncidentId, CreatedAtUtc, VersionCount, Versions)
+                        SELECT i.ApplicationId, ih.IncidentId, ih.CreatedAtUtc, 0, ''
+                        FROM IncidentHistory ih
+                        JOIN Incidents i ON (i.Id = ih.IncidentId)
+                        LEFT JOIN CommonIncidentProgressTracking cipt ON (cipt.IncidentId = i.Id)
+                        WHERE ih.State = 0 AND cipt.IncidentId IS NULL;
+
+                        UPDATE CommonIncidentProgressTracking
+                        SET Versions= CONCAT(';', av.Version, ';'), VersionCount=VersionCount+1
+                        FROM IncidentVersions iv
+                        JOIN ApplicationVersions av ON (av.Id = iv.VersionId)
+                        WHERE CommonIncidentProgressTracking.IncidentId=iv.IncidentId
+
+                        UPDATE CommonIncidentProgressTracking
+                        SET AssignedAtUtc=ih.CreatedAtUtc, AssignedToId=ih.AccountId
+                        FROM IncidentHistory ih
+                        WHERE ih.IncidentId = CommonIncidentProgressTracking.IncidentId
+                        AND ih.State = 1;
+
+                        UPDATE CommonIncidentProgressTracking
+                        SET ClosedAtUtc=ih.CreatedAtUtc, ClosedById=ih.AccountId
+                        FROM IncidentHistory ih
+                        WHERE ih.IncidentId = CommonIncidentProgressTracking.IncidentId
+                        AND ih.State = 3;
+
+                        UPDATE CommonIncidentProgressTracking
+                        SET ReOpenCount=ReOpenCount+1
+                        FROM IncidentHistory ih
+                        WHERE ih.IncidentId = CommonIncidentProgressTracking.IncidentId
+                        AND ih.State = 4;";
+                cmd.ExecuteNonQuery();
+            }
+
+            _configuration.Value.HaveFilledDatabase = true;
+            _configuration.Save();
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Insights/ContextExtensions.cs b/src/Server/App/Coderr.Server.App/Insights/ContextExtensions.cs
new file mode 100644
index 00000000..516d406e
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/ContextExtensions.cs
@@ -0,0 +1,22 @@
+﻿using System;
+using Coderr.Server.App.Insights.Keyfigures;
+
+namespace Coderr.Server.App.Insights
+{
+    public static class ContextExtensions
+    {
+        public static bool IsInPeriod2(this KeyPerformanceIndicatorContext context, DateTime start, DateTime? end)
+        {
+            return start <= context.PeriodEndDate && (end == null || end >= context.PeriodStartDate);
+        }
+        public static bool IsInValueInterval2(this KeyPerformanceIndicatorContext context, DateTime start, DateTime? end)
+        {
+            return start <= context.ValueEndDate && (end == null || end >= context.ValueStartDate);
+        }
+
+        public static int PeriodDurationInMonths(this KeyPerformanceIndicatorContext context)
+        {
+            return (int)(context.PeriodEndDate.Subtract(context.PeriodStartDate).TotalDays / 30);
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Insights/DecimalExtensions.cs b/src/Server/App/Coderr.Server.App/Insights/DecimalExtensions.cs
new file mode 100644
index 00000000..2d92f785
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/DecimalExtensions.cs
@@ -0,0 +1,30 @@
+﻿using System;
+
+namespace Coderr.Server.App.Insights
+{
+    public static class DecimalExtensions
+    {
+        public static int Rounded(this decimal? value)
+        {
+            if (value == null)
+                return 0;
+
+            return (int)Math.Round(value.Value);
+        }
+        public static int Rounded(this double? value)
+        {
+            if (value == null)
+                return 0;
+
+            return (int)Math.Round(value.Value);
+        }
+        public static int Rounded(this double value)
+        {
+            return (int)Math.Round(value);
+        }
+        public static int Ceiling(this double value)
+        {
+            return (int)Math.Ceiling(value);
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Insights/IndicatorValueComparison.cs b/src/Server/App/Coderr.Server.App/Insights/IndicatorValueComparison.cs
new file mode 100644
index 00000000..b085d22e
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/IndicatorValueComparison.cs
@@ -0,0 +1,9 @@
+﻿namespace Coderr.Server.App.Insights
+{
+    public enum IndicatorValueComparison
+    {
+        DoNotCompare,
+        LowerIsBetter,
+        HigherIsBetter
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/ItemWithCount.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/ItemWithCount.cs
new file mode 100644
index 00000000..1f0d3e47
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/ItemWithCount.cs
@@ -0,0 +1,26 @@
+﻿using System;
+
+namespace Coderr.Server.App.Insights.Keyfigures.Application
+{
+    public class ItemWithCount
+    {
+        public ItemWithCount(int applicationId, DateTime when)
+        {
+            ApplicationId = applicationId;
+            When = when;
+        }
+
+        public int AccountId { get; set; }
+
+        public int ApplicationId { get; }
+
+        public int Count { get; set; }
+
+        public DateTime When { get; }
+
+        public override string ToString()
+        {
+            return $"{ApplicationId} {When}";
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/ItemWithDuration.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/ItemWithDuration.cs
new file mode 100644
index 00000000..cd8da07c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/ItemWithDuration.cs
@@ -0,0 +1,34 @@
+﻿using System;
+
+namespace Coderr.Server.App.Insights.Keyfigures.Application
+{
+    public class ItemWithDuration
+    {
+        public ItemWithDuration(int id, DateTime when, TimeSpan duration)
+        {
+            Id = id;
+            When = when;
+            Duration = duration;
+        }
+
+        public ItemWithDuration(int id, DateTime @when, DateTime? end)
+        {
+            Id = id;
+            Duration = (end ?? DateTime.UtcNow).Subtract(when);
+            When = when;
+        }
+
+        public DateTime When { get; set; }
+
+        /// <summary>
+        /// ApplicationId or AccountId
+        /// </summary>
+        public int Id { get; }
+        public TimeSpan Duration { get; }
+        
+        public override string ToString()
+        {
+            return $"{Id} {Duration} ({When})";
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/MonthDuration.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/MonthDuration.cs
new file mode 100644
index 00000000..079f3ca2
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/MonthDuration.cs
@@ -0,0 +1,22 @@
+﻿using System;
+
+namespace Coderr.Server.App.Insights.Keyfigures.Application
+{
+    public class MonthDuration
+    {
+        public MonthDuration(DateTime @when, TimeSpan duration)
+        {
+            When = when;
+            Duration = duration;
+        }
+
+        public int AccountId { get; set; }
+
+        public int ApplicationId { get; set; }
+        public TimeSpan Duration { get; set; }
+
+        public bool HaveAccountId { get; set; }
+
+        public DateTime When { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/VersionIndicator.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/VersionIndicator.cs
new file mode 100644
index 00000000..657a56ad
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Application/VersionIndicator.cs
@@ -0,0 +1,111 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.IncidentInsights;
+using Griffin.Container;
+
+namespace Coderr.Server.App.Insights.Keyfigures.Application
+{
+    /// <summary>
+    /// Generates application indicator for application versions
+    /// </summary>
+    [ContainerService]
+    internal class VersionIndicator : IKeyPerformanceIndicatorGenerator
+    {
+        private const string IndicatorName = "ApplicationVersions";
+        private readonly IIncidentProgressRepository _progressRepository;
+
+        public VersionIndicator(IIncidentProgressRepository progressRepository)
+        {
+            _progressRepository = progressRepository;
+        }
+
+        public async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+            var incidents =
+                await _progressRepository.FindCreated(context.ApplicationIds, context.StartDate, context.EndDate);
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var appIncidents = incidents.Where(x => x.ApplicationId == applicationId);
+                var versionIncidents = new List<VersionItem>();
+                foreach (var incident in appIncidents)
+                {
+                    var versions = incident.Versions
+                        .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
+                        .Select(version => new VersionItem
+                        {
+                            When = incident.CreatedAtUtc,
+                            Version = version
+                        });
+                    versionIncidents.AddRange(versions);
+                }
+
+                var periodValue = versionIncidents
+                    .Where(x => x.When >= context.PeriodStartDate && x.When <= context.PeriodEndDate)
+                    .GroupBy(x => x.Version)
+                    .Count();
+                var values = versionIncidents
+                    .Where(x => x.When >= context.ValueStartDate && x.When <= context.ValueEndDate)
+                    .GroupBy(x => x.Version);
+                var toplist = values.Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    Value = x.Count(),
+                    ValueName = x.Key
+                });
+                var versionNames
+                    = versionIncidents.Select(x => x.Version).Distinct();
+
+
+
+                var trendLines = CreateTrendLines(context.TrendDates, versionIncidents);
+                context.AddIndicator(applicationId, new KeyPerformanceIndicator(IndicatorName, "Application versions", IndicatorValueComparison.DoNotCompare)
+                {
+                    Value = values.Count(),
+                    PeriodValue = periodValue,
+                    TrendLines = trendLines.ToArray(),
+                    ValueUnit = "versions",
+                    Description = "Number of versions that received new incidents.",
+                    Comment = "Versions: " + string.Join(", ", versionNames),
+                    Toplist = toplist.ToArray()
+                });
+            }
+        }
+
+        private static List<TrendLine> CreateTrendLines(DateTime[] trendDates, List<VersionItem> versionIncidents)
+        {
+            var trendLines = new List<TrendLine>();
+            for (var i = 0; i < trendDates.Length; i++)
+            {
+                var start = trendDates[i];
+                var end = start.AddMonths(1).AddSeconds(-1);
+
+                var values = versionIncidents
+                    .Where(x => x.When >= start && x.When <= end)
+                    .GroupBy(x => x.Version);
+                foreach (var version in values)
+                {
+                    var line = trendLines.FirstOrDefault(x => x.DisplayName == version.Key);
+                    if (line == null)
+                    {
+                        line = new TrendLine(version.Key, trendDates.Length, 0);
+                        line.Fill(0);
+                        trendLines.Add(line);
+                    }
+
+                    line.Assign(i, version.Count());
+                }
+            }
+
+            return trendLines;
+        }
+
+        private class VersionItem
+        {
+            public DateTime When { get; set; }
+            public string Version { get; set; }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorRepository.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorRepository.cs
new file mode 100644
index 00000000..2e395df8
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorRepository.cs
@@ -0,0 +1,37 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+
+namespace Coderr.Server.App.Insights.Keyfigures.Data
+{
+    [ContainerService]
+    public class KeyPerformanceIndicatorRepository
+    {
+        public Task<IReadOnlyList<KeyPerformanceIndicatorValue>> GetAllAsync(int[] applicationIds, string kpiName)
+        {
+            throw new NotImplementedException();
+        }
+
+        public KeyPerformanceIndicatorValue GetMonth(int applicationId, string kpiName, DateTime date)
+        {
+            throw new NotImplementedException();
+        }
+
+        /// <summary>
+        /// Get this and last month
+        /// </summary>
+        /// <param name="indicatorName">KPI name</param>
+        /// <param name="date">Year and month (day should be 1)</param>
+        /// <returns>Months if found; otherwise an empty list</returns>
+        public IReadOnlyList<KeyPerformanceIndicatorValue> GetTwoMonths(int applicationId, string indicatorName, DateTime date)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void CreateAsync(KeyPerformanceIndicatorValue entity)
+        {
+            
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorValue.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorValue.cs
new file mode 100644
index 00000000..b91d4a7c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorValue.cs
@@ -0,0 +1,59 @@
+﻿using System;
+
+namespace Coderr.Server.App.Insights.Keyfigures.Data
+{
+    /// <summary>
+    /// Stores a calculated value of a KPI for a specific month
+    /// </summary>
+    public class KeyPerformanceIndicatorValue
+    {
+        public KeyPerformanceIndicatorValue(int applicationId, string name, object value)
+        {
+            if (string.IsNullOrWhiteSpace(name))
+            {
+                throw new ArgumentException("message", nameof(name));
+            }
+
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+
+            ApplicationId = applicationId;
+            Name = name;
+            Value = value ?? throw new ArgumentNullException(nameof(value));
+            ValueType = value.GetType().FullName;
+        }
+
+        protected KeyPerformanceIndicatorValue()
+        {
+
+        }
+
+        public int ApplicationId { get; set; }
+
+        public int Id { get; private set; }
+
+        /// <summary>
+        /// Name of the key 
+        /// </summary>
+        public string Name { get; private set; }
+
+        /// <summary>
+        /// Value is stored as text, but can be of any type
+        /// </summary>
+        public object Value { get; private set; }
+
+        /// <summary>
+        /// Stores value type (.NET type as FullName)
+        /// </summary>
+        public string ValueType { get; private set; }
+
+        /// <summary>
+        /// Name of value (if value is an account id, then this is the account name)
+        /// </summary>
+        public string ValueName { get; set; }
+
+        /// <summary>
+        /// Which period the KPI is for
+        /// </summary>
+        public DateTime YearMonth { get; set; }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorValueMapper.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorValueMapper.cs
new file mode 100644
index 00000000..e3d64dfa
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/Data/KeyPerformanceIndicatorValueMapper.cs
@@ -0,0 +1,22 @@
+﻿using System;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.Insights.Keyfigures.Data
+{
+    public class KeyPerformanceIndicatorValueMapper : CrudEntityMapper<KeyPerformanceIndicatorValue>
+    {
+        public KeyPerformanceIndicatorValueMapper() : base("PremiseKPI")
+        {
+            Property(x => x.Value)
+                .ToColumnValue(x => x.ToString())
+                .ToPropertyValue2(x =>
+                {
+                    var type = Type.GetType((string) x.Record["ValueType"], true);
+                    return Convert.ChangeType(x.Value, type);
+                });
+
+            Property(x => x.ValueType)
+                .ToColumnValue2(x => x.Value.GetType().FullName);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/IKeyPerformanceIndicatorGenerator.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/IKeyPerformanceIndicatorGenerator.cs
new file mode 100644
index 00000000..f649a421
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/IKeyPerformanceIndicatorGenerator.cs
@@ -0,0 +1,9 @@
+﻿using System.Threading.Tasks;
+
+namespace Coderr.Server.App.Insights.Keyfigures
+{
+    public interface IKeyPerformanceIndicatorGenerator
+    {
+        Task CollectAsync(KeyPerformanceIndicatorContext context);
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicator.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicator.cs
new file mode 100644
index 00000000..40ae3ba8
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicator.cs
@@ -0,0 +1,110 @@
+﻿using System;
+using Coderr.Server.Api.Insights.Queries;
+
+namespace Coderr.Server.App.Insights.Keyfigures
+{
+    public class KeyPerformanceIndicator
+    {
+        private ValueIdType? _toplistValueType;
+
+        /// <summary>
+        /// </summary>
+        /// <param name="name">
+        ///     Technical name, used to be able to store values and compare them later on. SHould be constant once
+        ///     defined (while the title can be changed)
+        /// </param>
+        /// <param name="title">Display name</param>
+        /// <param name="valueComparison">How to calculate the scoring used to compare applications</param>
+        public KeyPerformanceIndicator(string name, string title, IndicatorValueComparison valueComparison)
+        {
+            Name = name ?? throw new ArgumentNullException(nameof(name));
+            Title = title ?? throw new ArgumentNullException(nameof(title));
+            ComparisonType = valueComparison;
+        }
+
+        public int? PeriodValueId { get; set; }
+
+        /// <summary>
+        ///     Technical name, used to be able to store values and compare them later on. SHould be constant once defined (while
+        ///     the title can be changed)
+        /// </summary>
+        public string Name { get; }
+
+        /// <summary>
+        /// Not all applications can be included when the client has many. In those cases we generate worst/best variations of an KPI. 
+        /// </summary>
+        public bool IsVariation { get; set; }
+
+        public string Title { get; private set; }
+
+        /// <summary>
+        ///     Explains what the KPI represents
+        /// </summary>
+        public string Description { get; set; }
+
+        /// <summary>
+        ///     Comment (for instance if there is a runner up or if it's higher or lower than the global average)
+        /// </summary>
+        public string Comment { get; set; }
+
+        /// <summary>
+        ///     Value for the last 30 days
+        /// </summary>
+        public object Value { get; set; }
+
+        /// <summary>
+        ///     Show the application name as value (if this property is specified).
+        /// </summary>
+        public int? ValueId { get; set; }
+
+        public ValueIdType ValueIdType { get; set; }
+
+        /// <summary>
+        ///     Value for the last 90 days
+        /// </summary>
+        public object PeriodValue { get; set; }
+
+        /// <summary>
+        ///     Same amount of values as <see cref="KeyPerformanceIndicatorContext.TrendDates" />.
+        /// </summary>
+        /// <value>
+        ///     Must be a number format (decimal or int)
+        /// </value>
+        public TrendLine[] TrendLines { get; set; }
+
+        /// <summary>
+        ///     How do we compare values with other
+        /// </summary>
+        public IndicatorValueComparison ComparisonType { get; private set; }
+
+        /// <summary>
+        ///     When we need to tell what kind of value it is (like "days")
+        /// </summary>
+        public string ValueUnit { get; set; }
+
+        public KeyPerformanceIndicatorTopListItem[] Toplist { get; set; }
+
+        public ValueIdType ToplistValueType
+        {
+            get => _toplistValueType ?? ValueIdType;
+            set => _toplistValueType = value;
+        }
+
+        /// <summary>
+        /// This indicator represents a value which is for all developers, and should be normalized when comparing to other applications.
+        /// </summary>
+        public bool CanBeNormalized { get; set; }
+
+        public override string ToString()
+        {
+            return $"{Name} {Value}{ValueUnit}{ValueId} {PeriodValue}{PeriodValueId}";
+        }
+    }
+
+    public enum ValueIdType
+    {
+        None,
+        AccountId,
+        ApplicationId
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorContext.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorContext.cs
new file mode 100644
index 00000000..cfa1cb5b
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorContext.cs
@@ -0,0 +1,88 @@
+﻿using System;
+using System.Collections.Generic;
+
+namespace Coderr.Server.App.Insights.Keyfigures
+{
+    public class KeyPerformanceIndicatorContext
+    {
+        private readonly Dictionary<int, List<KeyPerformanceIndicator>> _indicators;
+
+        public KeyPerformanceIndicatorContext(Dictionary<int, List<KeyPerformanceIndicator>> indicators)
+        {
+            _indicators = indicators;
+            ValueStartDate = DateTime.Today.AddDays(-30);
+            ValueEndDate = DateTime.UtcNow;
+            PeriodStartDate = DateTime.Today.AddDays(-90);
+            PeriodEndDate = DateTime.UtcNow;
+            StartDate = DateTime.Today.AddDays(-365).ToFirstDayOfMonth();
+            EndDate = DateTime.UtcNow;
+
+            var dates = new List<DateTime>();
+            var date = StartDate;
+            while (date < DateTime.Today)
+            {
+                dates.Add(date);
+                date = date.AddMonths(1);
+            }
+
+            TrendDates = dates.ToArray();
+        }
+
+        /// <summary>
+        ///     Several ids = calculate averages
+        /// </summary>
+        public int[] ApplicationIds { get; set; }
+
+        /// <summary>
+        ///     Fetch data to this date (inclusive).
+        /// </summary>
+        public DateTime EndDate { get; set; }
+
+        /// <summary>
+        ///     Period summary, shown at the bottom of the KPI. Value is typically today - 90 days (the last quarter)
+        /// </summary>
+        public DateTime PeriodEndDate { get; set; }
+
+        /// <summary>
+        ///     End date for the period (shown at the bottom of the KPI), typically "now".
+        /// </summary>
+        public DateTime PeriodStartDate { get; set; }
+
+        /// <summary>
+        ///     Fetch data from this date (includes both trend dates and value dates)
+        /// </summary>
+        public DateTime StartDate { get; set; }
+
+        /// <summary>
+        ///     Dates for trends (collect values between the given dates)
+        /// </summary>
+        /// <remarks>
+        ///     <para>
+        ///         Can be monthly for the last year, quarterly or half years
+        ///     </para>
+        /// </remarks>
+        public DateTime[] TrendDates { get; set; }
+
+        /// <summary>
+        ///     End date for the value to show in the KPI (typically "now")
+        /// </summary>
+        public DateTime ValueEndDate { get; set; }
+
+        /// <summary>
+        ///     Start date for the value to show in the KPI (typically start of this month)
+        /// </summary>
+        public DateTime ValueStartDate { get; set; }
+
+
+        public void AddIndicator(int applicationId, KeyPerformanceIndicator indicator)
+        {
+            if (!_indicators.TryGetValue(applicationId, out var indicators))
+            {
+                indicators = new List<KeyPerformanceIndicator>();
+                _indicators[applicationId] = indicators;
+            }
+
+            indicators.Add(indicator);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorScore.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorScore.cs
new file mode 100644
index 00000000..18dfc78a
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorScore.cs
@@ -0,0 +1,24 @@
+﻿namespace Coderr.Server.App.Insights.Keyfigures
+{
+    public enum KeyPerformanceIndicatorScore
+    {
+        Worst,
+
+        /// <summary>
+        /// Worse than average
+        /// </summary>
+        Worse,
+
+        /// <summary>
+        /// Average
+        /// </summary>
+        Average,
+
+        /// <summary>
+        /// Better than the average
+        /// </summary>
+        Good,
+
+        Best
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorTopListItem.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorTopListItem.cs
new file mode 100644
index 00000000..582bd52c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/KeyPerformanceIndicatorTopListItem.cs
@@ -0,0 +1,18 @@
+﻿namespace Coderr.Server.App.Insights.Keyfigures
+{
+    public class KeyPerformanceIndicatorTopListItem
+    {
+        /// <summary>
+        ///     value id (must then be of the same type as the indicator ValueType)
+        /// </summary>
+        public int? ValueId { get; set; }
+
+        /// <summary>
+        ///     Name to display (if ValueId is not set).
+        /// </summary>
+        public string ValueName { get; set; }
+
+        public object Value { get; set; }
+        public string Comment { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/MathExtensions.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/MathExtensions.cs
new file mode 100644
index 00000000..76f952c7
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/MathExtensions.cs
@@ -0,0 +1,66 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Coderr.Server.App.Insights.Keyfigures
+{
+    public static class MathExtensions
+    {
+        public static int DivideWith(this int first, int second)
+        {
+            if (first == 0 || second == 0)
+                return 0;
+
+            return first / second;
+        }
+
+        public static int DivideWith(this int first, double second)
+        {
+            if (first == 0 || second < 1)
+                return 0;
+
+            return (int)(first / second);
+        }
+
+        public static int DivideWith(this int? first, double second)
+        {
+            if (first == 0 || second < 1 || first == null)
+                return 0;
+
+            return (int)(first / second);
+        }
+
+        public static int DivideWith(this double? first, double second)
+        {
+            if (first == null || first < 1 || second < 1)
+                return 0;
+
+            return (int)(first / second);
+        }
+        public static int DivideWith(this double first, double second)
+        {
+            if (first < 1 || second < 1)
+                return 0;
+
+            return (int)(first / second);
+        }
+
+        public static int Average<TItem>(this IEnumerable<TItem> collection, Func<TItem, int> selector,
+            int defaultValue)
+        {
+            if (!collection.Any())
+                return defaultValue;
+
+            return (int)collection.Average(selector);
+        }
+
+        public static double Average<TItem>(this IEnumerable<TItem> collection, Func<TItem, double> selector,
+            double defaultValue)
+        {
+            if (!collection.Any())
+                return defaultValue;
+
+            return collection.Average(selector);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Keyfigures/TrendLineExtensions.cs b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/TrendLineExtensions.cs
new file mode 100644
index 00000000..7e0d9ac2
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Keyfigures/TrendLineExtensions.cs
@@ -0,0 +1,87 @@
+﻿using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Coderr.Server.App.Insights.Keyfigures
+{
+    public static class TrendLineExtensions
+    {
+        public static IEnumerable<TEntity> FillGaps<TEntity>(this IEnumerable<TEntity> source,
+            Func<TEntity, DateTime> keySelector,
+            Func<DateTime, TEntity> itemFactory)
+        {
+            var it = source.GetEnumerator();
+            using (it)
+            {
+                var lastDate = DateTime.MinValue;
+                while (it.MoveNext())
+                {
+                    if (lastDate != DateTime.MinValue)
+                    {
+                        while (lastDate.AddMonths(1) != keySelector(it.Current))
+                        {
+                            lastDate = lastDate.AddMonths(1);
+                            yield return itemFactory(lastDate);
+                        }
+                    }
+
+                    yield return it.Current;
+                    lastDate = keySelector(it.Current);
+                }
+            }
+        }
+        static IEnumerable<IGrouping<DateTime, TElement>> FillGaps<TElement>(
+            this IEnumerable<IGrouping<DateTime, TElement>> source,
+            Func<DateTime, TElement> valueFactory)
+        {
+            var it = source.GetEnumerator();
+            using (it)
+            {
+                var lastDate = DateTime.MinValue;
+                while (it.MoveNext())
+                {
+                    if (lastDate != DateTime.MinValue)
+                    {
+                        while (lastDate.AddMonths(1) != it.Current.Key)
+                        {
+                            lastDate = lastDate.AddMonths(1);
+                            yield return new Grouping<DateTime, TElement>(lastDate, new[] { valueFactory(lastDate) });
+                        }
+                    }
+
+                    yield return it.Current;
+                    lastDate = it.Current.Key;
+                }
+            }
+
+        }
+    }
+
+    class Grouping<TKey, TElement> : IGrouping<TKey, TElement>
+    {
+        private TKey _key;
+        private IEnumerable<TElement> _elements;
+
+        public Grouping(TKey key, IEnumerable<TElement> elements)
+        {
+            _key = key;
+            _elements = elements;
+        }
+
+        public IEnumerator<TElement> GetEnumerator()
+        {
+            return _elements.GetEnumerator();
+        }
+
+        IEnumerator IEnumerable.GetEnumerator()
+        {
+            return GetEnumerator();
+        }
+
+        public TKey Key
+        {
+            get { return _key; }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Metrics/GetKeyMetricHandler.cs b/src/Server/App/Coderr.Server.App/Insights/Metrics/GetKeyMetricHandler.cs
new file mode 100644
index 00000000..12e0d56a
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Metrics/GetKeyMetricHandler.cs
@@ -0,0 +1,23 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Insights.Queries;
+using DotNetCqs;
+
+namespace Coderr.Server.App.Insights.Metrics
+{
+    class GetKeyMetricHandler : IQueryHandler<GetKeyMetric, GetKeyMetricResult>
+    {
+        private IEnumerable<IKeyMetricGenerator> _generators;
+
+        public GetKeyMetricHandler(IEnumerable<IKeyMetricGenerator> generators)
+        {
+            _generators = generators;
+        }
+
+        public Task<GetKeyMetricResult> HandleAsync(IMessageContext context, GetKeyMetric query)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Insights/Metrics/IKeyMetricGenerator.cs b/src/Server/App/Coderr.Server.App/Insights/Metrics/IKeyMetricGenerator.cs
new file mode 100644
index 00000000..c24bc451
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Metrics/IKeyMetricGenerator.cs
@@ -0,0 +1,9 @@
+﻿using System.Threading.Tasks;
+
+namespace Coderr.Server.App.Insights.Metrics
+{
+    public interface IKeyMetricGenerator
+    {
+        Task<KeyMetricDataResult> Collect(KeyMetricGeneratorContext context);
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDataResult.cs b/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDataResult.cs
new file mode 100644
index 00000000..f478375d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDataResult.cs
@@ -0,0 +1,12 @@
+﻿namespace Coderr.Server.App.Insights.Metrics
+{
+    public class KeyMetricDataResult
+    {
+        public KeyMetricDataResultItem Application { get; set; }
+
+        /// <summary>
+        /// i.e. average for all apps that the user have access to.
+        /// </summary>
+        public KeyMetricDataResultItem Global { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDataResultItem.cs b/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDataResultItem.cs
new file mode 100644
index 00000000..daad0df8
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDataResultItem.cs
@@ -0,0 +1,12 @@
+﻿using Coderr.Server.Api.Insights.Queries;
+
+namespace Coderr.Server.App.Insights.Metrics
+{
+    public class KeyMetricDataResultItem
+    {
+        public MetricToplistItem[] Toplist { get; set; }
+        public TrendLine[] ChartData { get; set; }
+
+        public Metric Metric { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDefinitionAttribute.cs b/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDefinitionAttribute.cs
new file mode 100644
index 00000000..6b6bb4c9
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricDefinitionAttribute.cs
@@ -0,0 +1,20 @@
+﻿using System;
+
+namespace Coderr.Server.App.Insights.Metrics
+{
+    [AttributeUsage(AttributeTargets.Class)]
+    public class KeyMetricDefinitionAttribute : Attribute
+    {
+        public int Id { get; }
+        public string Name { get; }
+        public string DisplayName { get; }
+
+        public KeyMetricDefinitionAttribute(int id, string name, string displayName)
+        {
+            Id = id;
+            Name = name;
+            DisplayName = displayName;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricGeneratorContext.cs b/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricGeneratorContext.cs
new file mode 100644
index 00000000..b4b9603f
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Metrics/KeyMetricGeneratorContext.cs
@@ -0,0 +1,32 @@
+﻿using System.Collections.Generic;
+using System.Security.Claims;
+
+namespace Coderr.Server.App.Insights.Metrics
+{
+    public class KeyMetricGeneratorContext
+    {
+        public ClaimsPrincipal User { get; set; }
+
+        public int? ApplicationId { get; set; }
+
+        public IDictionary<int, string> ApplicationNames { get; set; }
+
+        public int DaysFrom { get; set; }
+        public int DaysTo { get; set; }
+
+        /// <summary>
+        /// Generate a top 10 list.
+        /// </summary>
+        public bool IncludeTopList { get; set; }
+
+        /// <summary>
+        /// Generate a chart.
+        /// </summary>
+        public bool IncludeChartData { get; set; }
+
+        /// <summary>
+        /// Calculate the summary/count.
+        /// </summary>
+        public bool IncludeMetric { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Insights/Metrics/Metric.cs b/src/Server/App/Coderr.Server.App/Insights/Metrics/Metric.cs
new file mode 100644
index 00000000..0555cf3c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Insights/Metrics/Metric.cs
@@ -0,0 +1,17 @@
+﻿namespace Coderr.Server.App.Insights.Metrics
+{
+    public class Metric
+    {
+        public bool IsAlternative { get; set; }
+
+        /// <summary>
+        /// Comment explaining the value (like, "best application")
+        /// </summary>
+        public string Comment { get; set; }
+
+        /// <summary>
+        /// Actual value.
+        /// </summary>
+        public object Value { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/Count/AssignedIncidentsMetricGenerator.cs b/src/Server/App/Coderr.Server.App/Metrics/Count/AssignedIncidentsMetricGenerator.cs
new file mode 100644
index 00000000..7c1e1627
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/Count/AssignedIncidentsMetricGenerator.cs
@@ -0,0 +1,133 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Metrics.DbEntities;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.Metrics.Count
+{
+    /// <summary>
+    /// Number of errors that was assigned during the month.
+    /// </summary>
+    [Metric(Name)]
+    public class AssignedIncidentsMetricGenerator : IMetricGenerator
+    {
+        public const string Name = "AssignedIncidents";
+
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public AssignedIncidentsMetricGenerator(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public MetricDefinition Definition => new MetricDefinition()
+        {
+            DisplayName = "Assigned errors", Description = "Shows the number of errors that was assigned to someone during the month."
+        };
+
+        public async Task Generate(IMetricGenerationContext context)
+        {
+            var sqlDateFormat = context.Configuration.Period.TimeType.GetSqlDateFormat();
+
+            var ids = string.Join(",", context.ApplicationIds);
+            var sql = $@"select ApplicationId, {sqlDateFormat} AS Date, count(*) Count
+                        from CommonIncidentProgressTracking
+                        where AssignedAtUtc < @to
+                        AND AssignedAtUtc > @from
+                        AND ApplicationId IN ({ids})
+                        group by {sqlDateFormat}, ApplicationId";
+
+            var rows = await _unitOfWork.ToListAsync<CountRow>(sql, new {from = context.From, to = context.To});
+
+            if (context.Configuration.GenerateMetric)
+            {
+                GenerateMetric(context, rows);
+            }
+
+            if (context.Configuration.GenerateChart)
+            {
+                GenerateChart(context, rows);
+            }
+        }
+
+        // Generate a chart for:
+        // 1. Last X days
+        // 2. Last X weeks
+        // 3. Last X months.
+        private void GenerateChart(IMetricGenerationContext context, IReadOnlyCollection<CountRow> rows)
+        {
+            var dates = context.GenerateDates();
+
+
+            var trendLines = new Dictionary<int, TrendLine>();
+
+            // Fill each application trend line so dates without values have 0.
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var line = new TrendLine(applicationId, dates.Length, 0);
+                trendLines[applicationId] = line;
+            }
+
+            // Add the system trend line (average per application).
+            var systemLine = new TrendLine(0, dates.Length, 0);
+
+            // Now fill all values.
+            for (var dateIndex = 0; dateIndex < dates.Length; dateIndex++)
+            {
+                var appRows = rows
+                    .Where(x => x.Date == dates[dateIndex])
+                    .GroupBy(x => x.ApplicationId)
+                    .ToList();
+
+                if (!appRows.Any()) continue;
+
+                systemLine.Assign(dateIndex,
+                    appRows.Average(x => x.Count()),
+                    appRows.Average(x => x.Count() / context.GetNumberOfFtes(x.Key.Value)));
+
+                foreach (var appRow in appRows)
+                {
+                    if (!appRow.Any()) continue;
+
+                    trendLines[appRow.Key.Value].Assign(dateIndex,
+                        appRow.Sum(x => x.Count),
+                        appRow.Sum(x => x.Count / context.GetNumberOfFtes(appRow.Key.Value)));
+                }
+            }
+
+            foreach (var trendLine in trendLines) context.Add(trendLine.Value);
+        }
+
+
+        private static void GenerateMetric(IMetricGenerationContext context, IEnumerable<CountRow> rows)
+        {
+            // We either have only one application, or want to get one average counter for all our apps.
+            var ourMetrics = new List<Metric>();
+            var perApp = rows.GroupBy(x => x.ApplicationId);
+            foreach (var app in perApp)
+            {
+                var avg = app.Average(x => x.Count);
+                var metric = new Metric(Name)
+                {
+                    ApplicationId = app.Key.Value,
+                    Value = avg,
+                    NormalizedValue = avg / context.GetNumberOfFtes(app.Key.Value)
+                };
+                ourMetrics.Add(metric);
+
+                // We'll only add each one if we said so,
+                // otherwise we'll only use them to generate the company average.
+                if (!context.Configuration.SummarizeApplications) context.Add(metric);
+            }
+
+            var companyMetric = new Metric(Name)
+            {
+                ApplicationId = 0, Value = ourMetrics.Average(x => (decimal)x.NormalizedValue)
+            };
+            context.Add(companyMetric);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/Count/ClosedIncidentsMetricGenerator.cs b/src/Server/App/Coderr.Server.App/Metrics/Count/ClosedIncidentsMetricGenerator.cs
new file mode 100644
index 00000000..14be248d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/Count/ClosedIncidentsMetricGenerator.cs
@@ -0,0 +1,133 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Metrics.DbEntities;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.Metrics.Count
+{
+    /// <summary>
+    /// Number of errors that was solved during the month.
+    /// </summary>
+    [Metric(Name)]
+    public class ClosedIncidentsMetricGenerator : IMetricGenerator
+    {
+        public const string Name = "ClosedIncidents";
+
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public ClosedIncidentsMetricGenerator(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public MetricDefinition Definition => new MetricDefinition()
+        {
+            DisplayName = "Closed errors", Description = "Shows the number of errors that was solved during the time period."
+        };
+
+        public async Task Generate(IMetricGenerationContext context)
+        {
+            var sqlDateFormat = context.Configuration.Period.TimeType.GetSqlDateFormat();
+
+            var ids = string.Join(",", context.ApplicationIds);
+            var sql = $@"select ApplicationId, {sqlDateFormat} AS Date, count(*) Count
+                        from CommonIncidentProgressTracking
+                        where ClosedAtUtc < @to
+                        AND ClosedAtUtc > @from
+                        AND ApplicationId IN ({ids})
+                        group by {sqlDateFormat}, ApplicationId";
+
+            var rows = await _unitOfWork.ToListAsync<CountRow>(sql, new {from = context.From, to = context.To});
+
+            if (context.Configuration.GenerateMetric)
+            {
+                GenerateMetric(context, rows);
+            }
+
+            if (context.Configuration.GenerateChart)
+            {
+                GenerateChart(context, rows);
+            }
+        }
+
+        // Generate a chart for:
+        // 1. Last X days
+        // 2. Last X weeks
+        // 3. Last X months.
+        private void GenerateChart(IMetricGenerationContext context, IReadOnlyCollection<CountRow> rows)
+        {
+            var dates = context.GenerateDates();
+
+
+            var trendLines = new Dictionary<int, TrendLine>();
+
+            // Fill each application trend line so dates without values have 0.
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var line = new TrendLine(applicationId, dates.Length, 0);
+                trendLines[applicationId] = line;
+            }
+
+            // Add the system trend line (average per application).
+            var systemLine = new TrendLine(0, dates.Length, 0);
+
+            // Now fill all values.
+            for (var dateIndex = 0; dateIndex < dates.Length; dateIndex++)
+            {
+                var appRows = rows
+                    .Where(x => x.Date == dates[dateIndex])
+                    .GroupBy(x => x.ApplicationId)
+                    .ToList();
+
+                if (!appRows.Any()) continue;
+
+                systemLine.Assign(dateIndex,
+                    appRows.Average(x => x.Count()),
+                    appRows.Average(x => x.Count() / context.GetNumberOfFtes(x.Key.Value)));
+
+                foreach (var appRow in appRows)
+                {
+                    if (!appRow.Any()) continue;
+
+                    trendLines[appRow.Key.Value].Assign(dateIndex,
+                        appRow.Sum(x => x.Count),
+                        appRow.Sum(x => x.Count / context.GetNumberOfFtes(appRow.Key.Value)));
+                }
+            }
+
+            foreach (var trendLine in trendLines) context.Add(trendLine.Value);
+        }
+
+
+        private static void GenerateMetric(IMetricGenerationContext context, IEnumerable<CountRow> rows)
+        {
+            // We either have only one application, or want to get one average counter for all our apps.
+            var ourMetrics = new List<Metric>();
+            var perApp = rows.GroupBy(x => x.ApplicationId);
+            foreach (var app in perApp)
+            {
+                var avg = app.Average(x => x.Count);
+                var metric = new Metric(Name)
+                {
+                    ApplicationId = app.Key.Value,
+                    Value = avg,
+                    NormalizedValue = avg / context.GetNumberOfFtes(app.Key.Value)
+                };
+                ourMetrics.Add(metric);
+
+                // We'll only add each one if we said so,
+                // otherwise we'll only use them to generate the company average.
+                if (!context.Configuration.SummarizeApplications) context.Add(metric);
+            }
+
+            var companyMetric = new Metric(Name)
+            {
+                ApplicationId = 0, Value = ourMetrics.Average(x => (decimal)x.NormalizedValue)
+            };
+            context.Add(companyMetric);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/Count/NewIncidentsMetricGenerator.cs b/src/Server/App/Coderr.Server.App/Metrics/Count/NewIncidentsMetricGenerator.cs
new file mode 100644
index 00000000..1032e692
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/Count/NewIncidentsMetricGenerator.cs
@@ -0,0 +1,128 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Metrics.DbEntities;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.Metrics.Count
+{
+    [Metric(Name)]
+    public class NewIncidentsMetricGenerator : IMetricGenerator
+    {
+        public const string Name = "NewIncidents";
+
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public NewIncidentsMetricGenerator(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public MetricDefinition Definition => new MetricDefinition()
+        {
+            DisplayName = "New errors",
+            Description = "Shows the number of new errors"
+        };
+
+        public async Task Generate(IMetricGenerationContext context)
+        {
+            var sqlDateFormat = context.Configuration.Period.TimeType.GetSqlDateFormat();
+
+            var ids = string.Join(",", context.ApplicationIds);
+            var sql = $@"select ApplicationId, {sqlDateFormat} AS Date, count(*) Count
+                        from CommonIncidentProgressTracking
+                        where CreatedAtUtc <= @to
+                        AND CreatedAtUtc >= @from
+                        AND ApplicationId IN ({ids})
+                        group by {sqlDateFormat}, ApplicationId";
+
+            var rows = await _unitOfWork.ToListAsync<CountRow>(sql, new { from = context.From, to = context.To });
+
+            if (context.Configuration.GenerateMetric) GenerateMetric(context, rows);
+
+            if (context.Configuration.GenerateChart) GenerateChart(context, rows);
+        }
+
+        // Generate a chart for:
+        // 1. Last X days
+        // 2. Last X weeks
+        // 3. Last X months.
+        private void GenerateChart(IMetricGenerationContext context, IReadOnlyCollection<CountRow> rows)
+        {
+            var dates = context.GenerateDates();
+
+
+            var trendLines = new Dictionary<int, TrendLine>();
+
+            // Fill each application trend line so dates without values have 0.
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var line = new TrendLine(applicationId, dates.Length, 0);
+                trendLines[applicationId] = line;
+            }
+
+            // Add the system trend line (average per application).
+            var systemLine = new TrendLine(0, dates.Length, 0) { IsCompanyAverage = true };
+            trendLines[0] = systemLine;
+
+            // Now fill all values.
+            for (var dateIndex = 0; dateIndex < dates.Length; dateIndex++)
+            {
+                var appRows = rows
+                    .Where(x => x.Date == dates[dateIndex])
+                    .GroupBy(x => x.ApplicationId)
+                    .ToList();
+
+                if (!appRows.Any()) continue;
+
+                var normalized = appRows.Average(x => x.Sum(y => y.Count) / context.GetNumberOfFtes(x.Key.Value));
+                systemLine.Assign(dateIndex,
+                    appRows.Average(x => x.Sum(y => y.Count)), normalized);
+
+                foreach (var appRow in appRows)
+                {
+                    if (!appRow.Any()) continue;
+
+                    trendLines[appRow.Key.Value].Assign(dateIndex,
+                        appRow.Sum(x => x.Count),
+                        appRow.Sum(x => x.Count / context.GetNumberOfFtes(appRow.Key.Value)));
+                }
+            }
+
+            foreach (var trendLine in trendLines)
+                context.Add(trendLine.Value);
+        }
+
+
+        private static void GenerateMetric(IMetricGenerationContext context, IEnumerable<CountRow> rows)
+        {
+            // We either have only one application, or want to get one average counter for all our apps.
+            var ourMetrics = new List<Metric>();
+            var perApp = rows.GroupBy(x => x.ApplicationId);
+            foreach (var app in perApp)
+            {
+                var avg = app.Average(x => x.Count);
+                var metric = new Metric(Name)
+                {
+                    ApplicationId = app.Key.Value,
+                    Value = avg,
+                    NormalizedValue = avg / context.GetNumberOfFtes(app.Key.Value)
+                };
+                ourMetrics.Add(metric);
+
+                // We'll only add each one if we said so,
+                // otherwise we'll only use them to generate the company average.
+                if (!context.Configuration.SummarizeApplications) context.Add(metric);
+            }
+
+            var companyMetric = new Metric(Name)
+            {
+                ApplicationId = 0,
+                Value = ourMetrics.Average(x => (decimal)x.NormalizedValue)
+            };
+            context.Add(companyMetric);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/DbEntities/CountRow.cs b/src/Server/App/Coderr.Server.App/Metrics/DbEntities/CountRow.cs
new file mode 100644
index 00000000..2d03c588
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/DbEntities/CountRow.cs
@@ -0,0 +1,17 @@
+﻿using System;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.Metrics.DbEntities
+{
+    public class CountRow
+    {
+        public int? ApplicationId { get; set; }
+        public DateTime Date { get; set; }
+        public int Count { get; set; }
+    }
+
+    public class CountRowMapper : EntityMapper<CountRow>
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/DbEntities/DurationRow.cs b/src/Server/App/Coderr.Server.App/Metrics/DbEntities/DurationRow.cs
new file mode 100644
index 00000000..1247fed1
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/DbEntities/DurationRow.cs
@@ -0,0 +1,19 @@
+﻿using System;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.Metrics.DbEntities
+{
+    public class DurationRow
+    {
+        public int? ApplicationId { get; set; }
+        public DateTime Date { get; set; }
+        public decimal Duration { get; set; }
+
+    }
+
+    public class DurationRowMapper : EntityMapper<DurationRow>
+    {
+
+    }
+
+}
diff --git a/src/Server/App/Coderr.Server.App/Metrics/Duration/NewDurationMetricGenerator.cs b/src/Server/App/Coderr.Server.App/Metrics/Duration/NewDurationMetricGenerator.cs
new file mode 100644
index 00000000..70222273
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/Duration/NewDurationMetricGenerator.cs
@@ -0,0 +1,126 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Metrics.DbEntities;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.Metrics.Duration
+{
+    [Metric(Name)]
+    public class NewDurationMetricGenerator : IMetricGenerator
+    {
+        public const string Name = "NewDuration";
+
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public NewDurationMetricGenerator(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public MetricDefinition Definition => new MetricDefinition()
+        {
+            DisplayName = "Time to action", Description = "Number of days until someone starts to work on an new error. Unassigned errors are excluded from this indicator"
+        };
+
+        public async Task Generate(IMetricGenerationContext context)
+        {
+            var sqlDateFormat = context.Configuration.Period.TimeType.GetSqlDateFormat();
+
+            //TO include unassigned: AVG(DATEDIFF(day, CreatedAtUtc, case when AssignedAtUtc is null then GETUTCDATE() else AssignedAtUtc end)) Duration
+
+            var ids = string.Join(",", context.ApplicationIds);
+            var sql = $@"select ApplicationId, {sqlDateFormat} AS Date, AVG(DATEDIFF(day, CreatedAtUtc, AssignedAtUtc)) Duration
+                        from CommonIncidentProgressTracking
+                        where CreatedAtUtc < @to
+                        AND AssignedAtUtc > @from
+                        AND ApplicationId IN ({ids})
+                        group by {sqlDateFormat}, ApplicationId";
+
+            var rows = await _unitOfWork.ToListAsync<DurationRow>(sql, new {from = context.From, to = context.To});
+
+            if (context.Configuration.GenerateMetric) GenerateMetric(context, rows);
+
+            if (context.Configuration.GenerateChart) GenerateChart(context, rows);
+        }
+
+        // Generate a chart for:
+        // 1. Last X days
+        // 2. Last X weeks
+        // 3. Last X months.
+        private void GenerateChart(IMetricGenerationContext context, IReadOnlyCollection<DurationRow> rows)
+        {
+            var dates = context.GenerateDates();
+
+
+            var trendLines = new Dictionary<int, TrendLine>();
+
+            // Fill each application trend line so dates without values have 0.
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var line = new TrendLine(applicationId, dates.Length, 0);
+                trendLines[applicationId] = line;
+            }
+
+            // Add the system trend line (average per application).
+            var systemLine = new TrendLine(0, dates.Length, 0);
+
+            // Now fill all values.
+            for (var dateIndex = 0; dateIndex < dates.Length; dateIndex++)
+            {
+                var appRows = rows
+                    .Where(x => x.Date == dates[dateIndex])
+                    .GroupBy(x => x.ApplicationId)
+                    .ToList();
+
+                if (!appRows.Any()) continue;
+
+                systemLine.Assign(dateIndex,
+                    appRows.Average(x => x.Count()),
+                    appRows.Average(x => x.Count() / context.GetNumberOfFtes(x.Key.Value)));
+
+                foreach (var appRow in appRows)
+                {
+                    if (!appRow.Any()) continue;
+
+                    trendLines[appRow.Key.Value].Assign(dateIndex,
+                        appRow.Sum(x => x.Duration),
+                        appRow.Sum(x => x.Duration / context.GetNumberOfFtes(appRow.Key.Value)));
+                }
+            }
+
+            foreach (var trendLine in trendLines) context.Add(trendLine.Value);
+        }
+
+
+        private static void GenerateMetric(IMetricGenerationContext context, IEnumerable<DurationRow> rows)
+        {
+            // We either have only one application, or want to get one average counter for all our apps.
+            var ourMetrics = new List<Metric>();
+            var perApp = rows.GroupBy(x => x.ApplicationId);
+            foreach (var app in perApp)
+            {
+                var avg = app.Average(x => x.Duration);
+                var metric = new Metric(Name)
+                {
+                    ApplicationId = app.Key.Value,
+                    Value = avg,
+                    NormalizedValue = avg / context.GetNumberOfFtes(app.Key.Value)
+                };
+                ourMetrics.Add(metric);
+
+                // We'll only add each one if we said so,
+                // otherwise we'll only use them to generate the company average.
+                if (!context.Configuration.SummarizeApplications) context.Add(metric);
+            }
+
+            var companyMetric = new Metric(Name)
+            {
+                ApplicationId = 0, Value = ourMetrics.Average(x => (decimal)x.NormalizedValue)
+            };
+            context.Add(companyMetric);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/Duration/WorkDurationMetricGenerator.cs b/src/Server/App/Coderr.Server.App/Metrics/Duration/WorkDurationMetricGenerator.cs
new file mode 100644
index 00000000..b30da675
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/Duration/WorkDurationMetricGenerator.cs
@@ -0,0 +1,126 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Metrics.DbEntities;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.App.Metrics.Duration
+{
+    [Metric(Name)]
+    public class WorkDurationMetricGenerator : IMetricGenerator
+    {
+        public const string Name = "NewDuration";
+
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public WorkDurationMetricGenerator(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public MetricDefinition Definition => new MetricDefinition()
+        {
+            DisplayName = "Work duration", Description = "Number of days until the developer have solved the error."
+        };
+
+        public async Task Generate(IMetricGenerationContext context)
+        {
+            var sqlDateFormat = context.Configuration.Period.TimeType.GetSqlDateFormat();
+
+            //TO include unassigned: AVG(DATEDIFF(day, CreatedAtUtc, case when AssignedAtUtc is null then GETUTCDATE() else AssignedAtUtc end)) Duration
+
+            var ids = string.Join(",", context.ApplicationIds);
+            var sql = $@"select ApplicationId, {sqlDateFormat} AS Date, AVG(DATEDIFF(day, AssignedAtUtc, ClosedAtUtc)) Duration
+                        from CommonIncidentProgressTracking
+                        where AssignedAtUtc < @to
+                        AND ClosedAtUtc > @from
+                        AND ApplicationId IN ({ids})
+                        group by {sqlDateFormat}, ApplicationId";
+
+            var rows = await _unitOfWork.ToListAsync<DurationRow>(sql, new {from = context.From, to = context.To});
+
+            if (context.Configuration.GenerateMetric) GenerateMetric(context, rows);
+
+            if (context.Configuration.GenerateChart) GenerateChart(context, rows);
+        }
+
+        // Generate a chart for:
+        // 1. Last X days
+        // 2. Last X weeks
+        // 3. Last X months.
+        private void GenerateChart(IMetricGenerationContext context, IReadOnlyCollection<DurationRow> rows)
+        {
+            var dates = context.GenerateDates();
+
+
+            var trendLines = new Dictionary<int, TrendLine>();
+
+            // Fill each application trend line so dates without values have 0.
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var line = new TrendLine(applicationId, dates.Length, 0);
+                trendLines[applicationId] = line;
+            }
+
+            // Add the system trend line (average per application).
+            var systemLine = new TrendLine(0, dates.Length, 0);
+
+            // Now fill all values.
+            for (var dateIndex = 0; dateIndex < dates.Length; dateIndex++)
+            {
+                var appRows = rows
+                    .Where(x => x.Date == dates[dateIndex])
+                    .GroupBy(x => x.ApplicationId)
+                    .ToList();
+
+                if (!appRows.Any()) continue;
+
+                systemLine.Assign(dateIndex,
+                    appRows.Average(x => x.Count()),
+                    appRows.Average(x => x.Count() / context.GetNumberOfFtes(x.Key.Value)));
+
+                foreach (var appRow in appRows)
+                {
+                    if (!appRow.Any()) continue;
+
+                    trendLines[appRow.Key.Value].Assign(dateIndex,
+                        appRow.Sum(x => x.Duration),
+                        appRow.Sum(x => x.Duration / context.GetNumberOfFtes(appRow.Key.Value)));
+                }
+            }
+
+            foreach (var trendLine in trendLines) context.Add(trendLine.Value);
+        }
+
+
+        private static void GenerateMetric(IMetricGenerationContext context, IEnumerable<DurationRow> rows)
+        {
+            // We either have only one application, or want to get one average counter for all our apps.
+            var ourMetrics = new List<Metric>();
+            var perApp = rows.GroupBy(x => x.ApplicationId);
+            foreach (var app in perApp)
+            {
+                var avg = app.Average(x => x.Duration);
+                var metric = new Metric(Name)
+                {
+                    ApplicationId = app.Key.Value,
+                    Value = avg,
+                    NormalizedValue = avg / context.GetNumberOfFtes(app.Key.Value)
+                };
+                ourMetrics.Add(metric);
+
+                // We'll only add each one if we said so,
+                // otherwise we'll only use them to generate the company average.
+                if (!context.Configuration.SummarizeApplications) context.Add(metric);
+            }
+
+            var companyMetric = new Metric(Name)
+            {
+                ApplicationId = 0, Value = ourMetrics.Average(x => (decimal)x.NormalizedValue)
+            };
+            context.Add(companyMetric);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/IMetricGenerationContext.cs b/src/Server/App/Coderr.Server.App/Metrics/IMetricGenerationContext.cs
new file mode 100644
index 00000000..0739a23c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/IMetricGenerationContext.cs
@@ -0,0 +1,91 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Security.Claims;
+using Coderr.Server.Api.Insights.Queries;
+
+namespace Coderr.Server.App.Metrics
+{
+    public class MetricGenerationContext : IMetricGenerationContext
+    {
+        private readonly IDictionary<int, int> _appIdFtes;
+        internal readonly List<Metric> Metrics = new List<Metric>();
+        internal readonly List<TrendLine> TrendLines = new List<TrendLine>();
+
+        public MetricGenerationContext(MetricConfiguration configuration, ClaimsPrincipal user, IDictionary<int,int> appIdFtes)
+        {
+            _appIdFtes = appIdFtes;
+            Configuration = configuration;
+            User = user;
+        }
+
+        public void Add(Metric metric)
+        {
+            if (metric == null) throw new ArgumentNullException(nameof(metric));
+            Metrics.Add(metric);
+        }
+
+        public void Add(TrendLine trendLine)
+        {
+            if (trendLine == null) throw new ArgumentNullException(nameof(trendLine));
+            TrendLines.Add(trendLine);
+        }
+
+        public MetricConfiguration Configuration { get; }
+        public ClaimsPrincipal User { get;  }
+        public DateTime From { get; set; }
+        public DateTime To { get; set; }
+        public int[] ApplicationIds { get; set; }
+        public Dictionary<int, int> FullTimeEmployees { get; set; }
+        public int GetNumberOfFtes(int applicationId)
+        {
+            if (_appIdFtes.TryGetValue(applicationId, out var ftes))
+            {
+                return ftes;
+            }
+
+            return 1;
+        }
+
+        public string GetApplicationName(int applicationId)
+        {
+            return "Ada";
+        }
+    }
+    public interface IMetricGenerationContext
+    {
+        void Add(Metric metric);
+        void Add(TrendLine metric);
+
+        MetricConfiguration Configuration { get; }
+        ClaimsPrincipal User { get; }
+
+
+        /// <summary>
+        /// Generated from the metric configuration
+        /// </summary>
+        DateTime From { get; }
+
+        /// <summary>
+        /// Generated from the metric configuration
+        /// </summary>
+        DateTime To { get; }
+
+
+        /// <summary>
+        /// Application ids to generate on.
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///Have been collected using the configuration, requested application and the apps that the user have access to.
+        /// </para>
+        /// </remarks>
+        int[] ApplicationIds { get; }
+
+        ///<summary>
+        /// Returns number of FTEs per applicationId.
+        /// </summary>
+        int GetNumberOfFtes(int applicationId);
+
+        string GetApplicationName(int applicationId);
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/IMetricGenerator.cs b/src/Server/App/Coderr.Server.App/Metrics/IMetricGenerator.cs
new file mode 100644
index 00000000..441b41d4
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/IMetricGenerator.cs
@@ -0,0 +1,14 @@
+﻿using System.Threading.Tasks;
+
+namespace Coderr.Server.App.Metrics
+{
+    public interface IMetricGenerator
+    {
+        /// <summary>
+        /// Gets information about this metric (what it generate etc)
+        /// </summary>
+        MetricDefinition Definition { get; }
+
+        Task Generate(IMetricGenerationContext context);
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Metrics/Metric.cs b/src/Server/App/Coderr.Server.App/Metrics/Metric.cs
new file mode 100644
index 00000000..641e8f7e
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/Metric.cs
@@ -0,0 +1,50 @@
+﻿using System;
+
+namespace Coderr.Server.App.Metrics
+{
+    public class Metric
+    {
+        public Metric(string name)
+        {
+            
+        }
+        /// <summary>
+        /// Describes values (for instance of it's the worst or best values)
+        /// </summary>
+        public string Description { get; set; }
+
+        /// <summary>
+        /// This metric is for a specific application.
+        /// </summary>
+        public int ApplicationId { get; set; }
+
+        /// <summary>
+        /// This metric is for a specific account.
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///This one can be combined with application id to tell that this metric is for that user in a specific application.
+        /// </para>
+        /// </remarks>
+        public int AccountId { get; set; }
+
+        public object Value { get; set; }
+
+        public MetricChart Chart { get; set; }
+
+        public object NormalizedValue { get; set; }
+    }
+
+    public class MetricChart
+    {
+        public DateTime Dates { get; set; }
+        public ChartLine[] Lines { get; set; }
+    }
+
+    public class ChartLine
+    {
+        public int AccountId { get; set; }
+        public int ApplicationId { get; set; }
+        public int[] Values { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/MetricAttribute.cs b/src/Server/App/Coderr.Server.App/Metrics/MetricAttribute.cs
new file mode 100644
index 00000000..0fa19098
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/MetricAttribute.cs
@@ -0,0 +1,14 @@
+﻿using System;
+
+namespace Coderr.Server.App.Metrics
+{
+    public class MetricAttribute : Attribute
+    {
+        public string Name { get; }
+
+        public MetricAttribute(string name)
+        {
+            Name = name;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/MetricConfiguration.cs b/src/Server/App/Coderr.Server.App/Metrics/MetricConfiguration.cs
new file mode 100644
index 00000000..4dd77d30
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/MetricConfiguration.cs
@@ -0,0 +1,61 @@
+﻿namespace Coderr.Server.App.Metrics
+{
+    /// <summary>
+    /// Configuration of an metric.
+    /// </summary>
+    /// <remarks>
+    ///<para>
+    ///Configured per application or system wide. An application specific configuration is not required, if none is specified, the system will take all global metric and apply application ids on them.
+    /// </para>
+    /// </remarks>
+    public class MetricConfiguration
+    {
+        /// <summary>
+        /// Name from <see cref="MetricAttribute"/> that the metric in question was tagged with.
+        /// </summary>
+        public string MetricName { get; set; }
+
+        /// <summary>
+        /// If specified, override the application ids in <see cref="ApplicationIds"/> and generate only for this application.
+        /// </summary>
+        public int? ConfiguredApplicationId { get; set; }
+
+        /// <summary>
+        /// Application group that we should generate metrics for.
+        /// </summary>
+        /// <remarks>
+        ///Field is used to generate all application ids in that group that the user have access to.
+        /// </remarks>
+        public int GroupId { get; set; }
+
+        /// <summary>
+        /// Applications that should be generated in this config.
+        /// </summary>
+        public int[] ApplicationIds { get; set; }
+
+        /// <summary>
+        /// Create one aggregated value for all apps.
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///If false, return one metric per application.
+        /// </para>
+        /// </remarks>
+        public bool SummarizeApplications { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public TimeDefinition Period { get; set; }
+
+        /// <summary>
+        /// Generate a metric value.
+        /// </summary>
+        public bool GenerateMetric { get; set; }
+
+        /// <summary>
+        /// Generate a chart.
+        /// </summary>
+        public bool GenerateChart { get; set; }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Metrics/MetricDefinition.cs b/src/Server/App/Coderr.Server.App/Metrics/MetricDefinition.cs
new file mode 100644
index 00000000..f7b58dd0
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/MetricDefinition.cs
@@ -0,0 +1,9 @@
+﻿namespace Coderr.Server.App.Metrics
+{
+    public class MetricDefinition
+    {
+        public string DisplayName { get; set; }
+        public string Description { get; set; }
+
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/MetricExtensions.cs b/src/Server/App/Coderr.Server.App/Metrics/MetricExtensions.cs
new file mode 100644
index 00000000..1bdca53d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/MetricExtensions.cs
@@ -0,0 +1,57 @@
+﻿using System;
+using System.Collections.Generic;
+
+namespace Coderr.Server.App.Metrics
+{
+    public static class MetricExtensions
+    {
+        private const string WeekSqlFormat = "YEAR(DATEADD(day, 26 - DATEPART(isoww, CreatedAtUtc), CreatedAtUtc))";
+        private const string MonthSqlFormat = "DATEADD(MONTH, DATEDIFF(MONTH, 0, CreatedAtUtc), 0)";
+        private const string DaySqlFormat = "CONVERT(date, CreatedAtUtc)";
+
+
+        /// <summary>
+        ///     Generate all labels for the chart.
+        /// </summary>
+        /// <param name="context"></param>
+        /// <returns></returns>
+        public static DateTime[] GenerateDates(this IMetricGenerationContext context)
+        {
+            var date = context.From;
+            var dates = new List<DateTime>();
+            while (date <= context.To)
+            {
+                dates.Add(date);
+                switch (context.Configuration.Period.TimeType)
+                {
+                    case TimeType.Days:
+                        date = date.AddDays(1);
+                        break;
+                    case TimeType.Weeks:
+                        date = date.AddDays(7);
+                        break;
+                    case TimeType.Months:
+                        date = date.AddMonths(1);
+                        break;
+                }
+            }
+
+            return dates.ToArray();
+        }
+
+
+        public static string GetSqlDateFormat(this TimeType periodTimeType)
+        {
+            switch (periodTimeType)
+            {
+                case TimeType.Days:
+                    return DaySqlFormat;
+                case TimeType.Weeks:
+                    return WeekSqlFormat;
+                default:
+                    return MonthSqlFormat;
+            }
+        }
+
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/Metrics/TimeDefinition.cs b/src/Server/App/Coderr.Server.App/Metrics/TimeDefinition.cs
new file mode 100644
index 00000000..efd40bdb
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/TimeDefinition.cs
@@ -0,0 +1,106 @@
+﻿using System;
+
+namespace Coderr.Server.App.Metrics
+{
+    public enum TimeType
+    {
+        Days,
+        Weeks,
+        Months
+    }
+
+    /// <summary>
+    ///     Allows us to define an running period.
+    /// </summary>
+    /// <remarks>
+    ///     <para>
+    ///         For instance, if we say 6 months we want to
+    ///     </para>
+    ///     <para>
+    ///         Do note that only one of the fields must be specified.
+    ///     </para>
+    /// </remarks>
+    public class TimeDefinition
+    {
+        public TimeDefinition(TimeType timeType, int @from, int to)
+        {
+            if (from < to)
+            {
+                throw new ArgumentOutOfRangeException(nameof(from), from,
+                    "Must be higher than to (since it should go back longer in the time from today).");
+            }
+            TimeType = timeType;
+            From = @from;
+            To = to;
+        }
+
+        /// <summary>
+        /// Adjust the to period so it's a monday or first day of month.
+        /// </summary>
+        public bool ToBeginningOfPeriod { get; set; }
+
+        public TimeType TimeType { get; private set; }
+
+        /// <summary>
+        /// Amount of days back from today (start of range)
+        /// </summary>
+        public int From { get; private set; }
+        /// <summary>
+        /// Amount of days back from today (end of range
+        /// </summary>
+        public int To { get; private set; }
+
+        public Tuple<DateTime, DateTime> ToDate()
+        {
+            var fromDate = DateTime.Today;
+
+            switch (TimeType)
+            {
+                case TimeType.Days:
+                    {
+                        fromDate = fromDate.AddDays(-From);
+                        if (ToBeginningOfPeriod)
+                        {
+                            fromDate = fromDate.DayOfWeek switch
+                            {
+                                DayOfWeek.Saturday => fromDate.AddDays(-1),
+                                DayOfWeek.Sunday => fromDate.AddDays(1),
+                                _ => fromDate
+                            };
+                        }
+
+                        break;
+                    }
+                case TimeType.Weeks:
+                    {
+                        fromDate = fromDate.AddDays(-(From * 7));
+                        if (ToBeginningOfPeriod)
+                        {
+                            while (fromDate.DayOfWeek != DayOfWeek.Monday)
+                            {
+                                fromDate = fromDate.AddDays(-1);
+                            }
+                        }
+
+                        break;
+                    }
+                case TimeType.Months:
+                    {
+                        fromDate = fromDate.AddMonths(-From);
+                        if (ToBeginningOfPeriod)
+                        {
+                            fromDate = fromDate.ToFirstDayOfMonth();
+                        }
+                    }
+                    break;
+
+                default:
+                    throw new InvalidOperationException("Nothing was configured");
+            }
+
+            var toDate = fromDate.AddDays(To - From);
+            return new Tuple<DateTime, DateTime>(fromDate, toDate);
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Metrics/Users/CloserMetricGenerator.cs b/src/Server/App/Coderr.Server.App/Metrics/Users/CloserMetricGenerator.cs
new file mode 100644
index 00000000..27cfe1c7
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Metrics/Users/CloserMetricGenerator.cs
@@ -0,0 +1,6 @@
+﻿namespace Coderr.Server.App.Metrics.Users
+{
+    class CloserMetricGenerator
+    {
+    }
+}
diff --git a/src/Server/Coderr.Server.App/Modules/History/Events/IncidentAssignedHandler.cs b/src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentAssignedHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/History/Events/IncidentAssignedHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentAssignedHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/History/Events/IncidentClosedHandler.cs b/src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentClosedHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/History/Events/IncidentClosedHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentClosedHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/History/Events/IncidentCreatedHandler.cs b/src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentCreatedHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/History/Events/IncidentCreatedHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentCreatedHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/History/Events/IncidentIgnoredHandler.cs b/src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentIgnoredHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/History/Events/IncidentIgnoredHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentIgnoredHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/History/Events/IncidentReOpenedHandler.cs b/src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentReOpenedHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/History/Events/IncidentReOpenedHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/History/Events/IncidentReOpenedHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/History/Queries/GetIncidentStateSummaryHandler.cs b/src/Server/App/Coderr.Server.App/Modules/History/Queries/GetIncidentStateSummaryHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/History/Queries/GetIncidentStateSummaryHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/History/Queries/GetIncidentStateSummaryHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Logs/Handlers/GetLogsHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Logs/Handlers/GetLogsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Logs/Handlers/GetLogsHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Logs/Handlers/GetLogsHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Logs/Handlers/HasLogsHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Logs/Handlers/HasLogsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Logs/Handlers/HasLogsHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Logs/Handlers/HasLogsHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Commands/DotNetSmtpSettings.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Commands/DotNetSmtpSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Commands/DotNetSmtpSettings.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Commands/DotNetSmtpSettings.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Commands/SendEmailHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Commands/SendEmailHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Commands/SendEmailHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Commands/SendEmailHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Commands/SendTemplateEmailHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Commands/SendTemplateEmailHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Commands/SendTemplateEmailHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Commands/SendTemplateEmailHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/ITemplateParser.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/ITemplateParser.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/ITemplateParser.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/ITemplateParser.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Template.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Template.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Template.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Template.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/DateFormatter.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/DateFormatter.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/DateFormatter.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/DateFormatter.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/JObjectReflector.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/JObjectReflector.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/JObjectReflector.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/JObjectReflector.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/ObjectToDictionaryConverter.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/ObjectToDictionaryConverter.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/ObjectToDictionaryConverter.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/ObjectToDictionaryConverter.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatExtensions.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatExtensions.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatExtensions.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatter.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatter.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatter.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/StringFormatter.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Token.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Token.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Token.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Token.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Tokenizer.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Tokenizer.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Tokenizer.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Formatting/Tokenizer.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/ImageHelper.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/ImageHelper.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/ImageHelper.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/ImageHelper.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Layout/Template.html b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Layout/Template.html
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Layout/Template.html
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Layout/Template.html
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Layout/logo2.png b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Layout/logo2.png
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Layout/logo2.png
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Layout/logo2.png
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/Size.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Size.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/Size.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/Size.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/TemplateLoader.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/TemplateLoader.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/TemplateLoader.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/TemplateLoader.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Messaging/Templating/TemplateParser.cs b/src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/TemplateParser.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Messaging/Templating/TemplateParser.cs
rename to src/Server/App/Coderr.Server.App/Modules/Messaging/Templating/TemplateParser.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Mine/IRecommendationProvider.cs b/src/Server/App/Coderr.Server.App/Modules/Mine/IRecommendationProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Mine/IRecommendationProvider.cs
rename to src/Server/App/Coderr.Server.App/Modules/Mine/IRecommendationProvider.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Mine/IRecommendationService.cs b/src/Server/App/Coderr.Server.App/Modules/Mine/IRecommendationService.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Mine/IRecommendationService.cs
rename to src/Server/App/Coderr.Server.App/Modules/Mine/IRecommendationService.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Mine/RecommendIncidentContext.cs b/src/Server/App/Coderr.Server.App/Modules/Mine/RecommendIncidentContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Mine/RecommendIncidentContext.cs
rename to src/Server/App/Coderr.Server.App/Modules/Mine/RecommendIncidentContext.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Mine/RecommendationService.cs b/src/Server/App/Coderr.Server.App/Modules/Mine/RecommendationService.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Mine/RecommendationService.cs
rename to src/Server/App/Coderr.Server.App/Modules/Mine/RecommendationService.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Mine/RecommendedIncident.cs b/src/Server/App/Coderr.Server.App/Modules/Mine/RecommendedIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Mine/RecommendedIncident.cs
rename to src/Server/App/Coderr.Server.App/Modules/Mine/RecommendedIncident.cs
diff --git a/src/Server/Coderr.Server.App/Modules/MonthlyStats/AppResult.cs b/src/Server/App/Coderr.Server.App/Modules/MonthlyStats/AppResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/MonthlyStats/AppResult.cs
rename to src/Server/App/Coderr.Server.App/Modules/MonthlyStats/AppResult.cs
diff --git a/src/Server/Coderr.Server.App/Modules/MonthlyStats/ApplicationUsageStatisticsDto.cs b/src/Server/App/Coderr.Server.App/Modules/MonthlyStats/ApplicationUsageStatisticsDto.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/MonthlyStats/ApplicationUsageStatisticsDto.cs
rename to src/Server/App/Coderr.Server.App/Modules/MonthlyStats/ApplicationUsageStatisticsDto.cs
diff --git a/src/Server/Coderr.Server.App/Modules/MonthlyStats/CollectStatsJob.cs b/src/Server/App/Coderr.Server.App/Modules/MonthlyStats/CollectStatsJob.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/MonthlyStats/CollectStatsJob.cs
rename to src/Server/App/Coderr.Server.App/Modules/MonthlyStats/CollectStatsJob.cs
diff --git a/src/Server/Coderr.Server.App/Modules/MonthlyStats/UsageStatisticsDto.cs b/src/Server/App/Coderr.Server.App/Modules/MonthlyStats/UsageStatisticsDto.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/MonthlyStats/UsageStatisticsDto.cs
rename to src/Server/App/Coderr.Server.App/Modules/MonthlyStats/UsageStatisticsDto.cs
diff --git a/src/Server/Coderr.Server.App/Modules/MonthlyStats/UsageStatsSettings.cs b/src/Server/App/Coderr.Server.App/Modules/MonthlyStats/UsageStatsSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/MonthlyStats/UsageStatsSettings.cs
rename to src/Server/App/Coderr.Server.App/Modules/MonthlyStats/UsageStatsSettings.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Onboarding/Commands/SetOnboardingChoicesHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Onboarding/Commands/SetOnboardingChoicesHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Onboarding/Commands/SetOnboardingChoicesHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Onboarding/Commands/SetOnboardingChoicesHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Onboarding/OnboardingSettings.cs b/src/Server/App/Coderr.Server.App/Modules/Onboarding/OnboardingSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Onboarding/OnboardingSettings.cs
rename to src/Server/App/Coderr.Server.App/Modules/Onboarding/OnboardingSettings.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Onboarding/Queries/GetOnboardingStateHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Onboarding/Queries/GetOnboardingStateHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Onboarding/Queries/GetOnboardingStateHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Onboarding/Queries/GetOnboardingStateHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForApplicationHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForApplicationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForApplicationHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForApplicationHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForIncidentHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForIncidentHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsForIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Tagging/Handlers/GetTagsHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/ActionConfigurationData.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/ActionConfigurationData.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/ActionConfigurationData.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/ActionConfigurationData.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Commands/CreateTriggerHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Commands/CreateTriggerHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Commands/CreateTriggerHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Commands/CreateTriggerHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Commands/DtoToDomainConverters.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Commands/DtoToDomainConverters.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Commands/DtoToDomainConverters.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Commands/DtoToDomainConverters.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Commands/UpdateTriggerHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Commands/UpdateTriggerHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Commands/UpdateTriggerHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Commands/UpdateTriggerHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/DomainTriggerRuleJsonConverter.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/DomainTriggerRuleJsonConverter.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/DomainTriggerRuleJsonConverter.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/DomainTriggerRuleJsonConverter.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/FilterCondition.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/FilterCondition.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/FilterCondition.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/FilterCondition.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/FilterResult.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/FilterResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/FilterResult.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/FilterResult.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/ITriggerRepository.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/ITriggerRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/ITriggerRepository.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/ITriggerRepository.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/JsonCreationConverter.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/JsonCreationConverter.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/JsonCreationConverter.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/JsonCreationConverter.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/LastTriggerAction.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/LastTriggerAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/LastTriggerAction.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/LastTriggerAction.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Queries/DomainToDtoConverters.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Queries/DomainToDtoConverters.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Queries/DomainToDtoConverters.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Queries/DomainToDtoConverters.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Queries/GetTriggerHandler.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Queries/GetTriggerHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Queries/GetTriggerHandler.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Queries/GetTriggerHandler.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Rules/ContextCollectionRule.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Rules/ContextCollectionRule.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Rules/ContextCollectionRule.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Rules/ContextCollectionRule.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Rules/ExceptionRule.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Rules/ExceptionRule.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Rules/ExceptionRule.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Rules/ExceptionRule.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Rules/RuleBase.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Rules/RuleBase.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Rules/RuleBase.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Rules/RuleBase.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Triggers/Trigger.cs b/src/Server/App/Coderr.Server.App/Modules/Triggers/Trigger.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Triggers/Trigger.cs
rename to src/Server/App/Coderr.Server.App/Modules/Triggers/Trigger.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Versions/NewVersionReported.cs b/src/Server/App/Coderr.Server.App/Modules/Versions/NewVersionReported.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Versions/NewVersionReported.cs
rename to src/Server/App/Coderr.Server.App/Modules/Versions/NewVersionReported.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Versions/VersionQuickFactProvider.cs b/src/Server/App/Coderr.Server.App/Modules/Versions/VersionQuickFactProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Versions/VersionQuickFactProvider.cs
rename to src/Server/App/Coderr.Server.App/Modules/Versions/VersionQuickFactProvider.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Whitelists/IWhitelistRepository.cs b/src/Server/App/Coderr.Server.App/Modules/Whitelists/IWhitelistRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Whitelists/IWhitelistRepository.cs
rename to src/Server/App/Coderr.Server.App/Modules/Whitelists/IWhitelistRepository.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Whitelists/IWhitelistService.cs b/src/Server/App/Coderr.Server.App/Modules/Whitelists/IWhitelistService.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Whitelists/IWhitelistService.cs
rename to src/Server/App/Coderr.Server.App/Modules/Whitelists/IWhitelistService.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Whitelists/IpType.cs b/src/Server/App/Coderr.Server.App/Modules/Whitelists/IpType.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Whitelists/IpType.cs
rename to src/Server/App/Coderr.Server.App/Modules/Whitelists/IpType.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Whitelists/Whitelist.cs b/src/Server/App/Coderr.Server.App/Modules/Whitelists/Whitelist.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Whitelists/Whitelist.cs
rename to src/Server/App/Coderr.Server.App/Modules/Whitelists/Whitelist.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Whitelists/WhitelistService.cs b/src/Server/App/Coderr.Server.App/Modules/Whitelists/WhitelistService.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Whitelists/WhitelistService.cs
rename to src/Server/App/Coderr.Server.App/Modules/Whitelists/WhitelistService.cs
diff --git a/src/Server/Coderr.Server.App/Modules/Whitelists/WhitelistedDomainIp.cs b/src/Server/App/Coderr.Server.App/Modules/Whitelists/WhitelistedDomainIp.cs
similarity index 100%
rename from src/Server/Coderr.Server.App/Modules/Whitelists/WhitelistedDomainIp.cs
rename to src/Server/App/Coderr.Server.App/Modules/Whitelists/WhitelistedDomainIp.cs
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Commands/CreatePartitionHandler.cs b/src/Server/App/Coderr.Server.App/Partitions/Commands/CreatePartitionHandler.cs
new file mode 100644
index 00000000..706cdbee
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Commands/CreatePartitionHandler.cs
@@ -0,0 +1,33 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Api.Partitions.Commands;
+using Coderr.Server.Domain.Modules.Partitions;
+using DotNetCqs;
+
+namespace Coderr.Server.App.Partitions.Commands
+{
+    public class CreatePartitionHandler : IMessageHandler<CreatePartition>
+    {
+        private readonly IPartitionRepository _repository;
+
+        public CreatePartitionHandler(IPartitionRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task HandleAsync(IMessageContext context, CreatePartition message)
+        {
+            var partitionDefinition = new PartitionDefinition(message.ApplicationId, message.Name, message.PartitionKey)
+            {
+                Weight = message.Weight,
+                NumberOfItems = message.NumberOfItems,
+            };
+
+            if (message.CriticalThreshold > 0)
+                partitionDefinition.CriticalThreshold = message.CriticalThreshold;
+            if (message.ImportantThreshold > 0)
+                partitionDefinition.ImportantThreshold = message.ImportantThreshold;
+
+            await _repository.CreateAsync(partitionDefinition);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Commands/DeletePartitionHandler.cs b/src/Server/App/Coderr.Server.App/Partitions/Commands/DeletePartitionHandler.cs
new file mode 100644
index 00000000..46d19dd0
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Commands/DeletePartitionHandler.cs
@@ -0,0 +1,22 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Api.Partitions.Commands;
+using Coderr.Server.Domain.Modules.Partitions;
+using DotNetCqs;
+
+namespace Coderr.Server.App.Partitions.Commands
+{
+    public class DeletePartitionHandler : IMessageHandler<DeletePartition>
+    {
+        private readonly IPartitionRepository _repository;
+
+        public DeletePartitionHandler(IPartitionRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task HandleAsync(IMessageContext context, DeletePartition message)
+        {
+            await _repository.DeleteDefinitionByIdAsync(message.Id);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Commands/UpdatePartitionHandler.cs b/src/Server/App/Coderr.Server.App/Partitions/Commands/UpdatePartitionHandler.cs
new file mode 100644
index 00000000..fd21d4cc
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Commands/UpdatePartitionHandler.cs
@@ -0,0 +1,32 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Api.Partitions.Commands;
+using Coderr.Server.Domain.Modules.Partitions;
+using DotNetCqs;
+
+namespace Coderr.Server.App.Partitions.Commands
+{
+    public class UpdatePartitionHandler : IMessageHandler<UpdatePartition>
+    {
+        private readonly IPartitionRepository _repository;
+
+        public UpdatePartitionHandler(IPartitionRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task HandleAsync(IMessageContext context, UpdatePartition message)
+        {
+            var partition = await _repository.GetByIdAsync(message.Id);
+            partition.Name = message.Name;
+            partition.NumberOfItems = message.NumberOfItems;
+            partition.Weight = message.Weight;
+
+            if (message.CriticalThreshold > 0)
+                partition.CriticalThreshold = message.CriticalThreshold;
+            if (message.ImportantThreshold > 0)
+                partition.ImportantThreshold = message.ImportantThreshold;
+
+            await _repository.UpdateAsync(partition);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Events/ProvidePartitionsAsFacts.cs b/src/Server/App/Coderr.Server.App/Partitions/Events/ProvidePartitionsAsFacts.cs
new file mode 100644
index 00000000..4db36e53
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Events/ProvidePartitionsAsFacts.cs
@@ -0,0 +1,39 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Incidents;
+using Coderr.Server.Api.Core.Incidents.Queries;
+using Coderr.Server.Domain.Modules.Partitions;
+
+namespace Coderr.Server.App.Partitions.Events
+{
+    [ContainerService]
+    public class ProvidePartitionsAsFacts : IQuickfactProvider
+    {
+        private readonly IPartitionRepository _repository;
+
+        public ProvidePartitionsAsFacts(IPartitionRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task CollectAsync(QuickFactContext context)
+        {
+            var partitions = await _repository.GetIncidentSummary(context.ApplicationId, context.IncidentId);
+            foreach (var partition in partitions)
+            {
+                if (partition.PartitionTitle.EndsWith("Id"))
+                    partition.PartitionTitle = partition.PartitionTitle
+                        .Substring(0, partition.PartitionTitle.Length - 2);
+
+                context.CollectedFacts.Add(new QuickFact
+                {
+                    Title = "Affected " + partition.PartitionTitle.ToLower().Pluralize(),
+                    Description = "Known total was either specified in the administration pages, or aggregated by coderr from all application incidents.",
+                    Value = $"{partition.ValueCount} <em class=\"text-muted\">({partition.ValueCount*100/partition.TotalCount}%)</em>",
+                    Url =
+                        $"#/application/{context.ApplicationId}/incident/{context.IncidentId}/partitions/{partition.Id}"
+                });
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Events/SuggestPartitionIncidents.cs b/src/Server/App/Coderr.Server.App/Partitions/Events/SuggestPartitionIncidents.cs
new file mode 100644
index 00000000..bd645379
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Events/SuggestPartitionIncidents.cs
@@ -0,0 +1,60 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Modules.Mine;
+using Coderr.Server.Domain.Modules.Partitions;
+
+namespace Coderr.Server.App.Partitions.Events
+{
+    [ContainerService]
+    public class SuggestPartitionIncidents : IRecommendationProvider
+    {
+        private readonly IPartitionRepository _partitionRepository;
+
+        public SuggestPartitionIncidents(IPartitionRepository partitionRepository)
+        {
+            _partitionRepository = partitionRepository;
+        }
+
+        public async Task Recommend(RecommendIncidentContext context)
+        {
+            var items = context.ApplicationId == null
+                ? await _partitionRepository.GetPrioritized()
+                : await _partitionRepository.GetPrioritized(context.ApplicationId.Value);
+
+            foreach (var item in items)
+            {
+                var name = GetNiceName(item.PartitionTitle);
+                var pluralName = name.Pluralize().ToLower();
+
+                var percentage = item.ValueCount * 100 / item.TotalCount;
+                string motivation;
+                if (item.ValueCount == item.TotalCount)
+                    motivation = $"Affects all of your {pluralName}";
+                else
+                    motivation = item.ValueCount == 1
+                        ? $"Affects one {name.ToLower()}"
+                        : $"Affects {percentage}% of your {pluralName}";
+
+                var suggestion = new RecommendedIncident
+                {
+                    IncidentId = item.IncidentId,
+                    Motivation = motivation,
+                    Score = item.Severity
+                    // But why?!
+                    //Score = item.Severity < 10
+                    //    ? item.Severity * percentage
+                    //    : (int)(item.Severity * (percentage / 100d))
+                };
+
+                context.Add(suggestion, item.Severity);
+            }
+        }
+
+        private string GetNiceName(string partitionTitle)
+        {
+            if (partitionTitle.EndsWith("Id"))
+                partitionTitle = partitionTitle.Substring(0, partitionTitle.Length - 2);
+            return partitionTitle;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Inflector.cs b/src/Server/App/Coderr.Server.App/Partitions/Inflector.cs
new file mode 100644
index 00000000..73c19620
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Inflector.cs
@@ -0,0 +1,213 @@
+﻿using System.Collections.Generic;
+using System.Text.RegularExpressions;
+
+namespace Coderr.Server.App.Partitions
+{
+    /// <summary>
+    ///     From: https://github.com/srkirkland/Inflector
+    ///     License: MIT
+    /// </summary>
+    public static class Inflector
+    {
+        private static readonly List<Rule> _plurals = new List<Rule>();
+        private static readonly List<Rule> _singulars = new List<Rule>();
+        private static readonly List<string> _uncountables = new List<string>();
+
+        static Inflector()
+        {
+            AddPlural("$", "s");
+            AddPlural("s$", "s");
+            AddPlural("(ax|test)is$", "$1es");
+            AddPlural("(octop|vir|alumn|fung)us$", "$1i");
+            AddPlural("(alias|status)$", "$1es");
+            AddPlural("(bu)s$", "$1ses");
+            AddPlural("(buffal|tomat|volcan)o$", "$1oes");
+            AddPlural("([ti])um$", "$1a");
+            AddPlural("sis$", "ses");
+            AddPlural("(?:([^f])fe|([lr])f)$", "$1$2ves");
+            AddPlural("(hive)$", "$1s");
+            AddPlural("([^aeiouy]|qu)y$", "$1ies");
+            AddPlural("(x|ch|ss|sh)$", "$1es");
+            AddPlural("(matr|vert|ind)ix|ex$", "$1ices");
+            AddPlural("([m|l])ouse$", "$1ice");
+            AddPlural("^(ox)$", "$1en");
+            AddPlural("(quiz)$", "$1zes");
+            AddSingular("s$", "");
+            AddSingular("(n)ews$", "$1ews");
+            AddSingular("([ti])a$", "$1um");
+            AddSingular("((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$", "$1$2sis");
+            AddSingular("(^analy)ses$", "$1sis");
+            AddSingular("([^f])ves$", "$1fe");
+            AddSingular("(hive)s$", "$1");
+            AddSingular("(tive)s$", "$1");
+            AddSingular("([lr])ves$", "$1f");
+            AddSingular("([^aeiouy]|qu)ies$", "$1y");
+            AddSingular("(s)eries$", "$1eries");
+            AddSingular("(m)ovies$", "$1ovie");
+            AddSingular("(x|ch|ss|sh)es$", "$1");
+            AddSingular("([m|l])ice$", "$1ouse");
+            AddSingular("(bus)es$", "$1");
+            AddSingular("(o)es$", "$1");
+            AddSingular("(shoe)s$", "$1");
+            AddSingular("(cris|ax|test)es$", "$1is");
+            AddSingular("(octop|vir|alumn|fung)i$", "$1us");
+            AddSingular("(alias|status)es$", "$1");
+            AddSingular("^(ox)en", "$1");
+            AddSingular("(vert|ind)ices$", "$1ex");
+            AddSingular("(matr)ices$", "$1ix");
+            AddSingular("(quiz)zes$", "$1");
+            AddIrregular("person", "people");
+            AddIrregular("man", "men");
+            AddIrregular("child", "children");
+            AddIrregular("sex", "sexes");
+            AddIrregular("move", "moves");
+            AddIrregular("goose", "geese");
+            AddIrregular("alumna", "alumnae");
+            AddUncountable("equipment");
+            AddUncountable("information");
+            AddUncountable("rice");
+            AddUncountable("money");
+            AddUncountable("species");
+            AddUncountable("series");
+            AddUncountable("fish");
+            AddUncountable("sheep");
+            AddUncountable("deer");
+            AddUncountable("aircraft");
+        }
+
+        public static string Camelize(this string lowercaseAndUnderscoredWord)
+        {
+            return lowercaseAndUnderscoredWord.Pascalize().Uncapitalize();
+        }
+
+        public static string Capitalize(this string word)
+        {
+            return word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower();
+        }
+
+        public static string Dasherize(this string underscoredWord)
+        {
+            return underscoredWord.Replace('_', '-');
+        }
+
+        public static string Humanize(this string lowercaseAndUnderscoredWord)
+        {
+            return Regex.Replace(lowercaseAndUnderscoredWord, "_", " ").Capitalize();
+        }
+
+        public static string Ordinalize(this string numberString)
+        {
+            return Ordanize(int.Parse(numberString), numberString);
+        }
+
+        public static string Ordinalize(this int number)
+        {
+            return Ordanize(number, number.ToString());
+        }
+
+        public static string Pascalize(this string lowercaseAndUnderscoredWord)
+        {
+            return Regex.Replace(lowercaseAndUnderscoredWord, "(?:^|_)(.)", match => match.Groups[1].Value.ToUpper());
+        }
+
+        public static string Pluralize(this string word)
+        {
+            return ApplyRules(_plurals, word);
+        }
+
+        public static string Singularize(this string word)
+        {
+            return ApplyRules(_singulars, word);
+        }
+
+        public static string Titleize(this string word)
+        {
+            return Regex.Replace(word.Underscore().Humanize(), "\\b([a-z])",
+                match => match.Captures[0].Value.ToUpper());
+        }
+
+        public static string Uncapitalize(this string word)
+        {
+            return word.Substring(0, 1).ToLower() + word.Substring(1);
+        }
+
+        public static string Underscore(this string pascalCasedWord)
+        {
+            return Regex
+                .Replace(
+                    Regex.Replace(Regex.Replace(pascalCasedWord, "([A-Z]+)([A-Z][a-z])", "$1_$2"), "([a-z\\d])([A-Z])",
+                        "$1_$2"), "[-\\s]", "_").ToLower();
+        }
+
+        private static void AddIrregular(string singular, string plural)
+        {
+            AddPlural("(" + singular[0] + ")" + singular.Substring(1) + "$", "$1" + plural.Substring(1));
+            AddSingular("(" + plural[0] + ")" + plural.Substring(1) + "$", "$1" + singular.Substring(1));
+        }
+
+        private static void AddPlural(string rule, string replacement)
+        {
+            _plurals.Add(new Rule(rule, replacement));
+        }
+
+        private static void AddSingular(string rule, string replacement)
+        {
+            _singulars.Add(new Rule(rule, replacement));
+        }
+
+        private static void AddUncountable(string word)
+        {
+            _uncountables.Add(word.ToLower());
+        }
+
+        private static string ApplyRules(List<Rule> rules, string word)
+        {
+            var str = word;
+            if (!_uncountables.Contains(word.ToLower()))
+            {
+                var index = rules.Count - 1;
+                while (index >= 0 && (str = rules[index].Apply(word)) == null)
+                    --index;
+            }
+
+            return str;
+        }
+
+        private static string Ordanize(int number, string numberString)
+        {
+            var num = number % 100;
+            if (num >= 11 && num <= 13)
+                return numberString + "th";
+            switch (number % 10)
+            {
+                case 1:
+                    return numberString + "st";
+                case 2:
+                    return numberString + "nd";
+                case 3:
+                    return numberString + "rd";
+                default:
+                    return numberString + "th";
+            }
+        }
+
+        private class Rule
+        {
+            private readonly Regex _regex;
+            private readonly string _replacement;
+
+            public Rule(string pattern, string replacement)
+            {
+                _regex = new Regex(pattern, RegexOptions.IgnoreCase);
+                _replacement = replacement;
+            }
+
+            public string Apply(string word)
+            {
+                if (!_regex.IsMatch(word))
+                    return null;
+                return _regex.Replace(word, _replacement);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitions.cs b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitions.cs
new file mode 100644
index 00000000..c961e4bb
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitions.cs
@@ -0,0 +1,6 @@
+﻿namespace Coderr.Server.App.Partitions.Queries
+{
+    public class GetPartitionDefinitions
+    {
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitionsResult.cs b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitionsResult.cs
new file mode 100644
index 00000000..aa0e831b
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitionsResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.App.Partitions.Queries
+{
+    public class GetPartitionDefinitionsResult
+    {
+        public GetPartitionDefinitionsResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitionsResultItem.cs b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitionsResultItem.cs
new file mode 100644
index 00000000..497d2d61
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionDefinitionsResultItem.cs
@@ -0,0 +1,10 @@
+﻿namespace Coderr.Server.App.Partitions.Queries
+{
+    public class GetPartitionDefinitionsResultItem
+    {
+        public string Description { get; set; }
+        public string DisplayName { get; set; }
+        public int Id { get; set; }
+        public int Name { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionHandler.cs b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionHandler.cs
new file mode 100644
index 00000000..4bc039c0
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionHandler.cs
@@ -0,0 +1,33 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Api.Partitions.Queries;
+using Coderr.Server.Domain.Modules.Partitions;
+using DotNetCqs;
+
+namespace Coderr.Server.App.Partitions.Queries
+{
+    internal class GetPartitionHandler : IQueryHandler<GetPartition, GetPartitionResult>
+    {
+        private readonly IPartitionRepository _repository;
+
+        public GetPartitionHandler(IPartitionRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task<GetPartitionResult> HandleAsync(IMessageContext context, GetPartition query)
+        {
+            var partition = await _repository.GetByIdAsync(query.Id);
+
+            return new GetPartitionResult
+            {
+                Id = partition.Id,
+                Name = partition.Name,
+                NumberOfItems = partition.NumberOfItems,
+                PartitionKey = partition.PartitionKey,
+                Weight = partition.Weight,
+                ImportantThreshold = partition.ImportantThreshold,
+                CriticalThreshold = partition.CriticalThreshold
+            };
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionsHandler.cs b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionsHandler.cs
new file mode 100644
index 00000000..e96d45b8
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetPartitionsHandler.cs
@@ -0,0 +1,37 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Partitions.Queries;
+using Coderr.Server.Domain.Modules.Partitions;
+using DotNetCqs;
+
+namespace Coderr.Server.App.Partitions.Queries
+{
+    internal class GetPartitionsHandler : IQueryHandler<GetPartitions, GetPartitionsResult>
+    {
+        private readonly IPartitionRepository _repository;
+
+        public GetPartitionsHandler(IPartitionRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task<GetPartitionsResult> HandleAsync(IMessageContext context, GetPartitions query)
+        {
+            var partitions = await _repository.GetDefinitions(query.ApplicationId);
+            var items = partitions
+                .Select(x => new GetPartitionsResultItem
+                {
+                    Id = x.Id,
+                    Name = x.Name,
+                    PartitionKey = x.PartitionKey,
+                    Weight = x.Weight
+                })
+                .OrderBy(x => x.Name)
+                .ToArray();
+            return new GetPartitionsResult
+            {
+                Items = items
+            };
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurations.cs b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurations.cs
new file mode 100644
index 00000000..825c44f9
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurations.cs
@@ -0,0 +1,23 @@
+﻿using System;
+
+namespace Coderr.Server.App.Partitions.Queries
+{
+    public class GetUserPartitionConfigurations
+    {
+        public GetUserPartitionConfigurations(int applicationId, int accountId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            if (accountId <= 0) throw new ArgumentOutOfRangeException(nameof(accountId));
+            ApplicationId = applicationId;
+            AccountId = accountId;
+        }
+
+        protected GetUserPartitionConfigurations()
+        {
+        }
+
+        public int AccountId { get; private set; }
+
+        public int ApplicationId { get; private set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurationsResult.cs b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurationsResult.cs
new file mode 100644
index 00000000..a19cfa04
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurationsResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.App.Partitions.Queries
+{
+    public class GetUserPartitionConfigurationsResult
+    {
+        public GetUserPartitionConfigurationsResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurationsResultItem.cs b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurationsResultItem.cs
new file mode 100644
index 00000000..8b091f29
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Partitions/Queries/GetUserPartitionConfigurationsResultItem.cs
@@ -0,0 +1,11 @@
+﻿namespace Coderr.Server.App.Partitions.Queries
+{
+    public class GetUserPartitionConfigurationsResultItem
+    {
+        public int DaysFrom { get; set; }
+        public int DaysTo { get; set; }
+        public int Id { get; set; }
+
+        public int Name { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/PossibleSolutions/SqlServer/MissingTable.cs b/src/Server/App/Coderr.Server.App/PossibleSolutions/SqlServer/MissingTable.cs
new file mode 100644
index 00000000..79ed48ab
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/PossibleSolutions/SqlServer/MissingTable.cs
@@ -0,0 +1,22 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Incidents;
+
+namespace Coderr.Server.App.PossibleSolutions.SqlServer
+{
+    [ContainerService]
+    internal class MissingTable : ISolutionProvider
+    {
+        public Task SuggestSolutionAsync(SolutionProviderContext context)
+        {
+            if (!context.FullName.EndsWith("SqlException"))
+                return Task.CompletedTask;
+
+            if (!context.Description.Contains("Invalid object name"))
+                return Task.CompletedTask;
+
+            context.AddSuggestion("Correct your database schema", "One of your database tables are missing. Add it ;)");
+            return Task.CompletedTask;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/PossibleSolutions/SqlServer/ZombieConnections.cs b/src/Server/App/Coderr.Server.App/PossibleSolutions/SqlServer/ZombieConnections.cs
new file mode 100644
index 00000000..c8a9c79a
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/PossibleSolutions/SqlServer/ZombieConnections.cs
@@ -0,0 +1,51 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Incidents;
+
+namespace Coderr.Server.App.PossibleSolutions.SqlServer
+{
+    [ContainerService]
+    class ZombieConnections : ISolutionProvider
+    {
+        public Task SuggestSolutionAsync(SolutionProviderContext context)
+        {
+            if (!context.FullName.EndsWith("InvalidOperationException"))
+                return Task.CompletedTask;
+
+            if (!context.Description.Contains("This SqlTransaction has completed; it is no longer usable"))
+                return Task.CompletedTask;
+
+            if (!context.StackTrace.Contains("ZombieCheck"))
+                return Task.CompletedTask;
+
+            context.AddSuggestion(@"Try to run the transaction again.
+
+```csharp
+try
+{
+  // Invoke your code here
+}
+catch (InvalidOperationException ex)
+{
+    // not this error
+    if (!ex.TargetSite.Contains(""ZombieCheck"")
+       throw;
+    
+
+    // Invoke same code here.
+}
+```
+", @"Server side error
+================
+
+SqlServer can rollback transactions if there are a server side error. That 
+results in this error (when 'ZombieCheck' is present in the stack trace).
+
+There is nothing that you can do to avoid this, except to try to run the transaction again.
+
+[Read more](https://stackoverflow.com/questions/16692854/zombiecheck-exception-this-sqltransaction-has-completed-it-is-no-longer-usabl)
+");
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/LiveWriterSolutionProvider.cs b/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/LiveWriterSolutionProvider.cs
new file mode 100644
index 00000000..5dd4485f
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/LiveWriterSolutionProvider.cs
@@ -0,0 +1,21 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Incidents;
+
+namespace Coderr.Server.App.PossibleSolutions.Web
+{
+    class LiveWriterSolutionProvider : ISolutionProvider
+    {
+        public Task SuggestSolutionAsync(SolutionProviderContext context)
+        {
+            if (!context.Description.Contains("wlwmanifest.xml"))
+                return Task.CompletedTask;
+
+            context.AddSuggestion(@"The file is a Windows Live Writer Manifest link
+
+It enables Windows Live Writer to know how to connect to your website/blog.
+
+Some WordPress bots looks for this file to detect word press sites.", "Can be ignored if you are not using Windows Live Writer.");
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/SiteManifest.cs b/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/SiteManifest.cs
new file mode 100644
index 00000000..8b81ebb2
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/SiteManifest.cs
@@ -0,0 +1,80 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Incidents;
+
+namespace Coderr.Server.App.PossibleSolutions.Web
+{
+    [ContainerService]
+    class SiteManifest : ISolutionProvider
+    {
+        /*TODO: 
+         * 404 without this:
+         		<staticContent>
+			<mimeMap fileExtension=".json" mimeType="application/json" />
+			<mimeMap fileExtension=".webmanifest" mimeType="application/manifest+json" />
+		</staticContent>
+
+         **/
+        public Task SuggestSolutionAsync(SolutionProviderContext context)
+        {
+            if (!context.Description.EndsWith("site.webmanifest"))
+            {
+                return Task.CompletedTask;
+            }
+
+            context.AddSuggestion(@"Add a site.webmanifest to your web root.
+
+Example
+
+```javascript
+{
+    ""name"": ""HackerWeb"",
+    ""short_name"": ""HackerWeb"",
+    ""start_url"": ""."",
+    ""display"": ""standalone"",
+    ""background_color"": ""#fff"",
+    ""description"": ""A simply readable Hacker News app."",
+    ""icons"": [{
+        ""src"": ""images/touch/homescreen48.png"",
+        ""sizes"": ""48x48"",
+        ""type"": ""image/png""
+    }, {
+        ""src"": ""images/touch/homescreen72.png"",
+        ""sizes"": ""72x72"",
+        ""type"": ""image/png""
+    }, {
+        ""src"": ""images/touch/homescreen96.png"",
+        ""sizes"": ""96x96"",
+        ""type"": ""image/png""
+    }, {
+        ""src"": ""images/touch/homescreen144.png"",
+        ""sizes"": ""144x144"",
+        ""type"": ""image/png""
+    }, {
+        ""src"": ""images/touch/homescreen168.png"",
+        ""sizes"": ""168x168"",
+        ""type"": ""image/png""
+    }, {
+        ""src"": ""images/touch/homescreen192.png"",
+        ""sizes"": ""192x192"",
+        ""type"": ""image/png""
+    }],
+    ""related_applications"": [{
+        ""platform"": ""play"",
+        ""url"": ""https://play.google.com/store/apps/details?id=cheeaun.hackerweb""
+    }]
+}
+```
+
+Then link it in your HTML header:
+
+```html
+<link rel=""manifest"" href=""/site.webmanifest"">
+```", "site.webmanifset is used to the apperance of your application icon on the home screen of devices." +
+      "" +
+"More information at [MDN](https://developer.mozilla.org/en-US/docs/Web/Manifest)");
+
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/WellKnownUri.cs b/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/WellKnownUri.cs
new file mode 100644
index 00000000..bd7bc019
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/PossibleSolutions/Web/WellKnownUri.cs
@@ -0,0 +1,28 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Incidents;
+
+namespace Coderr.Server.App.PossibleSolutions.Web
+{
+    [ContainerService]
+    public class WellKnownUri : ISolutionProvider
+    {
+        public Task SuggestSolutionAsync(SolutionProviderContext context)
+        {
+            if (!context.Description.Contains("/.wellknown/"))
+            {
+                return Task.CompletedTask;
+            }
+
+            var pos = context.Description.IndexOf("/.wellknown/") + "/.wellknown/".Length;
+            var proto = context.Description.Substring(pos);
+            context.AddSuggestion("Either 'Ignore' this incident so that it won't be reopened or add support for '" + proto + "'.",
+                "Well-known services" +
+                "======================" +
+                "" +
+                "The wellknown folder is used to provide metadata and policys for different web protocols." +
+                "You can find a list at [wikipedia](https://en.wikipedia.org/wiki/List_of_/.well-known/_services_offered_by_webservers).");
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git a/src/Server/Coderr.Server.App/ReadMe.md b/src/Server/App/Coderr.Server.App/ReadMe.md
similarity index 96%
rename from src/Server/Coderr.Server.App/ReadMe.md
rename to src/Server/App/Coderr.Server.App/ReadMe.md
index cd40f960..86332bfd 100644
--- a/src/Server/Coderr.Server.App/ReadMe.md
+++ b/src/Server/App/Coderr.Server.App/ReadMe.md
@@ -1,4 +1,4 @@
-﻿App
-======
-
-Takes care of everything tha tthe user want to do either through the UI or the web API.
+﻿App
+======
+
+Takes care of everything tha tthe user want to do either through the UI or the web API.
diff --git a/src/Server/App/Coderr.Server.App/Tags/Events/NotifyOnAttachedTags.cs b/src/Server/App/Coderr.Server.App/Tags/Events/NotifyOnAttachedTags.cs
new file mode 100644
index 00000000..049345ad
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Tags/Events/NotifyOnAttachedTags.cs
@@ -0,0 +1,139 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Client;
+using Coderr.Server.Abstractions.Config;
+using Coderr.Server.Api.Core.Messaging;
+using Coderr.Server.Api.Core.Messaging.Commands;
+using Coderr.Server.Api.Modules.Tagging.Events;
+using Coderr.Server.Domain.Core.Applications;
+using Coderr.Server.Domain.Core.Incidents;
+using Coderr.Server.Domain.Modules.UserNotifications;
+using Coderr.Server.Infrastructure.Configuration;
+using Coderr.Server.ReportAnalyzer.Abstractions.Notifications.Commands;
+using DotNetCqs;
+
+namespace Coderr.Server.App.Tags.Events
+{
+    public class NotifyOnAttachedTags : IMessageHandler<TagAttachedToIncident>
+    {
+        private readonly BaseConfiguration _baseConfiguration;
+        private readonly IUserNotificationsRepository _repository;
+        private readonly IApplicationRepository _applicationRepository;
+        private IMessageContext _context;
+        private readonly IIncidentRepository _incidentRepository;
+
+        public NotifyOnAttachedTags(IUserNotificationsRepository repository, IConfiguration<BaseConfiguration> baseConfiguration,
+            IApplicationRepository applicationRepository, IIncidentRepository incidentRepository)
+        {
+            _repository = repository;
+            _baseConfiguration = baseConfiguration.Value;
+            _applicationRepository = applicationRepository;
+            _incidentRepository = incidentRepository;
+        }
+
+
+        public async Task HandleAsync(IMessageContext context, TagAttachedToIncident message)
+        {
+            _context = context;
+            var notificationSettings = (await _repository.GetAllAsync(message.ApplicationId)).ToList();
+            if (notificationSettings.All(x =>
+                x.CriticalIncident == NotificationState.Disabled && x.ImportantIncident == NotificationState.Disabled))
+                return;
+
+            var isImportant = message.Tags.Any(x => x == "important");
+            var isCritical = message.Tags.Any(x => x == "critical");
+            if (!isImportant && !isCritical) return;
+
+            var app = await _applicationRepository.GetByIdAsync(message.ApplicationId);
+            foreach (var setting in notificationSettings)
+            {
+                if (setting.CriticalIncident == NotificationState.Disabled &&
+                    setting.ImportantIncident == NotificationState.Disabled)
+                    continue;
+
+                var appName = app.Name;
+
+                if (setting.CriticalIncident != NotificationState.Disabled && isCritical)
+                {
+                    var state = setting.CriticalIncident;
+                    var tagStatement = "a critical";
+                    await SendNotification(context, message, state, setting, tagStatement, appName);
+                }
+                else if (setting.ImportantIncident != NotificationState.Disabled && isImportant)
+                {
+                    var state = setting.ImportantIncident;
+                    var tagStatement = "an important";
+                    await SendNotification(context, message, state, setting, tagStatement, appName);
+                }
+            }
+        }
+
+        private async Task<SendBrowserNotification> BuildBrowserNotification(TagAttachedToIncident e, string appName,
+            string tagStatement, UserNotificationSettings setting)
+        {
+            var incident = await _incidentRepository.GetAsync(e.IncidentId);
+            var notification =
+                new SendBrowserNotification(setting.AccountId)
+                {
+                    Body = $"Application: {appName}\r\nTitle: {incident.Description}",
+                    Title = $"Coderr have received {tagStatement} incident.",
+                    Actions = new List<SendBrowserNotificationAction>
+                    {
+                        new SendBrowserNotificationAction {Title = "View", Action = "viewIncident"}
+                    },
+                    UserData = new
+                    {
+                        applicationId = e.ApplicationId,
+                        incidentId = e.IncidentId,
+                        accountId = setting.AccountId,
+                        viewIncidentUrl = $"{_baseConfiguration.BaseUrl}/go/incident/{e.IncidentId}"
+                    },
+                    Timestamp = incident.CreatedAtUtc
+                };
+            return notification;
+        }
+
+        private async Task<EmailMessage> BuildEmail(TagAttachedToIncident e, UserNotificationSettings setting,
+            string tagStatement, string appName)
+        {
+            var incident = await _incidentRepository.GetAsync(e.IncidentId);
+            var msg = new EmailMessage(setting.AccountId.ToString())
+            {
+                Subject = $"Received {tagStatement} incident for application {appName}",
+                HtmlBody =
+                    $"We've received a new incident for application {appName}\r\n" +
+                    $"{_baseConfiguration.BaseUrl}/go/incident/{e.IncidentId}\r\n" +
+                    "\r\n" +
+                    $"Name: {incident.Description}\r\n" +
+                    $"Type: {incident.FullName}\r\n"
+            };
+            return msg;
+        }
+
+        private async Task SendNotification(IMessageContext context, TagAttachedToIncident message,
+            NotificationState state,
+            UserNotificationSettings setting, string tagStatement, string appName)
+        {
+            if (state == NotificationState.Email)
+            {
+                var msg = await BuildEmail(message, setting, tagStatement, appName);
+                var cmd = new SendEmail(msg);
+                await context.SendAsync(cmd);
+            }
+            else
+            {
+                var notification = await BuildBrowserNotification(message, appName, tagStatement, setting);
+                try
+                {
+                    await _context.SendAsync(notification);
+                }
+                catch (Exception ex)
+                {
+                    Err.Report(ex, new {setting, notification});
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/Tags/Services/RecommendUsingTags.cs b/src/Server/App/Coderr.Server.App/Tags/Services/RecommendUsingTags.cs
new file mode 100644
index 00000000..76592b79
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/Tags/Services/RecommendUsingTags.cs
@@ -0,0 +1,50 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Modules.Mine;
+using Coderr.Server.Domain.Modules.Tags;
+
+namespace Coderr.Server.App.Tags.Services
+{
+    [ContainerService]
+    class RecommendUsingTags : IRecommendationProvider
+    {
+        private ITagsRepository _tagsRepository;
+
+        public RecommendUsingTags(ITagsRepository tagsRepository)
+        {
+            _tagsRepository = tagsRepository;
+        }
+
+        public async Task Recommend(RecommendIncidentContext context)
+        {
+            var importantIncidents = await _tagsRepository.GetNewIncidentsForTag(context.ApplicationId, "important");
+            var criticalIncidents = await _tagsRepository.GetNewIncidentsForTag(context.ApplicationId, "critical");
+            var itemsLeft = context.NumberOfItems;
+            foreach (var incident in criticalIncidents)
+            {
+                if (itemsLeft-- == 0)
+                    break;
+
+                context.Add(new RecommendedIncident
+                {
+                    IncidentId = incident,
+                    Score = 100,
+                    Motivation = "Marked as critical"
+
+                }, 10);
+            }
+            foreach (var incident in importantIncidents)
+            {
+                if (itemsLeft-- == 0)
+                    break;
+
+                context.Add(new RecommendedIncident
+                {
+                    IncidentId = incident,
+                    Score = 90,
+                    Motivation = "Marked as important"
+                }, 10);
+            }
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/WorkItems/Commands/CreateWorkItemHandler.cs b/src/Server/App/Coderr.Server.App/WorkItems/Commands/CreateWorkItemHandler.cs
new file mode 100644
index 00000000..b4233fe4
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/WorkItems/Commands/CreateWorkItemHandler.cs
@@ -0,0 +1,23 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Api.WorkItems.Commands;
+using DotNetCqs;
+
+namespace Coderr.Server.App.WorkItems.Commands
+{
+    class CreateWorkItemHandler : IMessageHandler<CreateWorkItem>
+    {
+        private IWorkItemServiceProvider _provider;
+
+        public CreateWorkItemHandler(IWorkItemServiceProvider provider)
+        {
+            _provider = provider;
+        }
+
+
+        public async Task HandleAsync(IMessageContext context, CreateWorkItem message)
+        {
+            await _provider.CreateAsync(message.ApplicationId, message.IncidentId);
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/WorkItems/Events/AssignWorkItemWhenIncidentAssigned.cs b/src/Server/App/Coderr.Server.App/WorkItems/Events/AssignWorkItemWhenIncidentAssigned.cs
new file mode 100644
index 00000000..d78fedb5
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/WorkItems/Events/AssignWorkItemWhenIncidentAssigned.cs
@@ -0,0 +1,43 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Api.Core.Incidents.Events;
+using Coderr.Server.Domain;
+using DotNetCqs;
+using log4net;
+
+namespace Coderr.Server.App.WorkItems.Events
+{
+    internal class AssignWorkItemWhenIncidentAssigned : IMessageHandler<IncidentAssigned>
+    {
+        private readonly IWorkItemServiceProvider _itemServiceProvider;
+        private readonly IWorkItemRepository _workItemRepository;
+        private readonly ILog _logger = LogManager.GetLogger(typeof(AssignWorkItemWhenIncidentAssigned));
+        public AssignWorkItemWhenIncidentAssigned(IWorkItemServiceProvider itemServiceProvider,
+            IWorkItemRepository workItemRepository)
+        {
+            _itemServiceProvider = itemServiceProvider;
+            _workItemRepository = workItemRepository;
+        }
+
+
+        public async Task HandleAsync(IMessageContext context, IncidentAssigned message)
+        {
+            var workItem = await _workItemRepository.Find(message.IncidentId);
+            if (workItem == null)
+                return;
+
+            var service = await _itemServiceProvider.FindService(workItem.ApplicationId);
+            try
+            {
+                await service.Assign(workItem.ApplicationId, workItem.WorkItemId, message.AssignedToId);
+            }
+            catch (EntityNotFoundException ex)
+            {
+                _logger.Error($"Failed to find {workItem.WorkItemId} in azure, invalid mapping for incident {message.IncidentId}.", ex);
+
+                // Been deleted in Azure DevOps
+                await _workItemRepository.Delete(workItem);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/WorkItems/Events/CloseWorkItemWhenIncidentClosed.cs b/src/Server/App/Coderr.Server.App/WorkItems/Events/CloseWorkItemWhenIncidentClosed.cs
new file mode 100644
index 00000000..ba214d1f
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/WorkItems/Events/CloseWorkItemWhenIncidentClosed.cs
@@ -0,0 +1,45 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Api.Core.Incidents.Events;
+using Coderr.Server.Domain;
+using DotNetCqs;
+using log4net;
+
+namespace Coderr.Server.App.WorkItems.Events
+{
+    internal class CloseWorkItemWhenIncidentClosed : IMessageHandler<IncidentClosed>
+    {
+        private readonly IWorkItemServiceProvider _itemServiceProvider;
+        private readonly IWorkItemRepository _workItemRepository;
+        private readonly ILog _logger = LogManager.GetLogger(typeof(CloseWorkItemWhenIncidentClosed));
+
+        public CloseWorkItemWhenIncidentClosed(IWorkItemServiceProvider itemServiceProvider,
+            IWorkItemRepository workItemRepository)
+        {
+            _itemServiceProvider = itemServiceProvider;
+            _workItemRepository = workItemRepository;
+        }
+
+
+        public async Task HandleAsync(IMessageContext context, IncidentClosed message)
+        {
+            var workItem = await _workItemRepository.Find(message.IncidentId);
+            if (workItem == null)
+                return;
+
+            var service = await _itemServiceProvider.FindService(workItem.ApplicationId);
+            try
+            {
+                await service.Solve(workItem.ApplicationId, workItem.WorkItemId, message.ClosedById, message.Solution,
+                    message.ApplicationVersion);
+            }
+            catch (EntityNotFoundException ex)
+            {
+                _logger.Error($"Failed to find {workItem.WorkItemId} in azure, invalid mapping for incident {message.IncidentId}.", ex);
+
+                // Been deleted in Azure DevOps
+                await _workItemRepository.Delete(workItem);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/WorkItems/Queries/FindIntegrationHandler.cs b/src/Server/App/Coderr.Server.App/WorkItems/Queries/FindIntegrationHandler.cs
new file mode 100644
index 00000000..2a84fbff
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/WorkItems/Queries/FindIntegrationHandler.cs
@@ -0,0 +1,26 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Api.WorkItems.Queries;
+using DotNetCqs;
+
+namespace Coderr.Server.App.WorkItems.Queries
+{
+    internal class FindIntegrationHandler : IQueryHandler<FindIntegration, FindIntegrationResult>
+    {
+        private readonly IWorkItemServiceProvider _workItemServiceProvider;
+
+        public FindIntegrationHandler(IWorkItemServiceProvider workItemServiceProvider)
+        {
+            _workItemServiceProvider = workItemServiceProvider;
+        }
+
+        public async Task<FindIntegrationResult> HandleAsync(IMessageContext context, FindIntegration query)
+        {
+            var service = await _workItemServiceProvider.FindService(query.ApplicationId);
+            if (service == null)
+                return new FindIntegrationResult {HaveIntegration = false};
+
+            return new FindIntegrationResult {HaveIntegration = true, Title = service.Title, Name = service.Name};
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/WorkItems/Queries/FindWorkItemHandler.cs b/src/Server/App/Coderr.Server.App/WorkItems/Queries/FindWorkItemHandler.cs
new file mode 100644
index 00000000..408bbe71
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/WorkItems/Queries/FindWorkItemHandler.cs
@@ -0,0 +1,28 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Api.WorkItems.Queries;
+using DotNetCqs;
+
+namespace Coderr.Server.App.WorkItems.Queries
+{
+    public class FindWorkItemHandler : IQueryHandler<FindWorkItem, FindWorkItemResult>
+    {
+        private readonly IWorkItemRepository _workItemRepository;
+
+        public FindWorkItemHandler(IWorkItemRepository workItemRepository)
+        {
+            _workItemRepository = workItemRepository;
+        }
+
+        public async Task<FindWorkItemResult> HandleAsync(IMessageContext context, FindWorkItem query)
+        {
+            var item = await _workItemRepository.Find(query.IncidentId);
+            if (item == null)
+            {
+                return null;
+            }
+
+            return new FindWorkItemResult {Name = item.Name, Url = item.UiUrl, WorkItemId = item.WorkItemId, ApplicationId = item.ApplicationId};
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/WorkItems/WorkItemIntegrationMapping.cs b/src/Server/App/Coderr.Server.App/WorkItems/WorkItemIntegrationMapping.cs
new file mode 100644
index 00000000..80602085
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/WorkItems/WorkItemIntegrationMapping.cs
@@ -0,0 +1,8 @@
+﻿namespace Coderr.Server.App.WorkItems
+{
+    public class WorkItemIntegrationMapping
+    {
+        public int ApplicationId { get; set; }
+        public string IntegrationName { get; set; }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.App/WorkItems/WorkItemServiceProvider.cs b/src/Server/App/Coderr.Server.App/WorkItems/WorkItemServiceProvider.cs
new file mode 100644
index 00000000..460ac33b
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/WorkItems/WorkItemServiceProvider.cs
@@ -0,0 +1,132 @@
+﻿using System;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Config;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.App.Partitions;
+using Coderr.Server.Domain.Core.Incidents;
+using Coderr.Server.Domain.Modules.ApplicationVersions;
+using Coderr.Server.Domain.Modules.Partitions;
+using Coderr.Server.Domain.Modules.Tags;
+using Coderr.Server.Infrastructure.Configuration;
+
+namespace Coderr.Server.App.WorkItems
+{
+    [ContainerService(IsTransient = true)]
+    internal class WorkItemServiceProvider : IWorkItemServiceProvider
+    {
+        private readonly IApplicationVersionRepository _applicationVersionRepository;
+        private readonly IIncidentRepository _incidentRepository;
+        private readonly IWorkItemRepository _workItemRepository;
+        private readonly IServiceProvider _scope;
+        private ITagsRepository _tagsRepository;
+        private IPartitionRepository _partitionRepository;
+        private BaseConfiguration _baseConfig;
+        private IWorkItemServiceRegistrar _registrar;
+
+        public WorkItemServiceProvider(
+            IIncidentRepository incidentRepository,
+            IApplicationVersionRepository applicationVersionRepository,
+            IWorkItemRepository workItemRepository,
+            IServiceProvider scope,
+            IConfiguration<BaseConfiguration> config, 
+            IPartitionRepository partitionRepository, 
+            ITagsRepository tagsRepository, 
+            IWorkItemServiceRegistrar registrar)
+        {
+            _incidentRepository = incidentRepository;
+            _applicationVersionRepository = applicationVersionRepository;
+            _workItemRepository = workItemRepository;
+            _scope = scope;
+            _partitionRepository = partitionRepository;
+            _tagsRepository = tagsRepository;
+            _registrar = registrar;
+            _baseConfig = config.Value;
+        }
+
+
+        public async Task CreateAsync(int applicationId, int incidentId)
+        {
+            // validate that one have not been created
+            if (await _workItemRepository.Find(incidentId) != null)
+            {
+                return;
+            }
+            
+            var version =
+                (await _applicationVersionRepository.FindForIncidentAsync(incidentId))?.FirstOrDefault()?.Version ??
+                "Not specified";
+            var incident = await _incidentRepository.GetAsync(incidentId);
+
+            var summary = await _partitionRepository.GetIncidentSummary(applicationId, incidentId);
+            var impact = "";
+            foreach (var partition in summary)
+            {
+                impact +=
+                    $"Affected {partition.PartitionTitle.Pluralize()}: {partition.ValueCount} ({partition.ValueCount * 100 / partition.TotalCount}%)<br>\r\n";
+            }
+
+            var tags = await _tagsRepository.GetIncidentTagsAsync(incidentId);
+
+            var dto = new WorkItemDTO(applicationId, incidentId)
+            {
+                Title = Shorten(incident.Description),
+                ReproduceSteps =
+                    incident.Description + "\r\n" +
+                    incident.FullName + "\r\n" +
+                    incident.StackTrace,
+                State = WorkItemState.New,
+                IntegrationName = "AzureDevOps",
+                SystemInformation =
+                    $"Version: {version}<br>\r\n{impact}<br>For more information, view the bug in <a href=\"{_baseConfig.BaseUrl}go/incident/{incidentId}\">Coderr</a>.",
+                Tags = tags.Select(x => x.Name).ToArray()
+            };
+
+            var service = await FindService(applicationId);
+            await service.Create(dto);
+
+            if (incident.State == IncidentState.Active)
+            {
+                await service.Assign(applicationId, dto.WorkItemId, incident.AssignedToId.Value);
+            }
+
+            var mapping = new WorkItemMapping(applicationId, incidentId, service.Name)
+            {
+                Name = dto.Title,
+                UiUrl = dto.UiUrl,
+                ApiUrl = dto.ApiUrl,
+                WorkItemId = dto.WorkItemId,
+                LastSynchronizationAtUtc = DateTime.UtcNow
+            };
+            await _workItemRepository.Create(mapping);
+        }
+
+        private string Shorten(string text)
+        {
+            if (text.Length < 40)
+                return text;
+            return text.Substring(0, 35) + "[..]";
+        }
+
+        public async Task MapApplication(int applicationId, string integrationName)
+        {
+            if (integrationName == null) throw new ArgumentNullException(nameof(integrationName));
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+
+
+
+            await _workItemRepository.MapApplication(applicationId, integrationName);
+        }
+
+        public async Task<IWorkItemService> FindService(int applicationId)
+        {
+            var name = await _workItemRepository.GetIntegrationName(applicationId);
+            if (name == null)
+                return null;
+
+            var type = _registrar.GetServiceType(name);
+            return (IWorkItemService)_scope.GetService(type);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.App/WorkItems/WorkItemServiceRegistrar.cs b/src/Server/App/Coderr.Server.App/WorkItems/WorkItemServiceRegistrar.cs
new file mode 100644
index 00000000..ac99541d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.App/WorkItems/WorkItemServiceRegistrar.cs
@@ -0,0 +1,28 @@
+﻿using System;
+using System.Collections.Generic;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.WorkItems;
+
+namespace Coderr.Server.App.WorkItems
+{
+    [ContainerService(IsSingleInstance = true)]
+    public class WorkItemServiceRegistrar : IWorkItemServiceRegistrar
+    {
+        private readonly Dictionary<string, Type> _services = new Dictionary<string, Type>();
+
+        public void Register<T>(string integrationName) where T : IWorkItemService
+        {
+            _services[integrationName] = typeof(T);
+        }
+
+        public Type GetServiceType(string integrationName)
+        {
+            if (!_services.TryGetValue(integrationName, out var type))
+            {
+                throw new InvalidOperationException($"Integration {integrationName} do not exist.");
+            }
+
+            return type;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.App/codeRR.Server.App.csproj.DotSettings b/src/Server/App/Coderr.Server.App/codeRR.Server.App.csproj.DotSettings
similarity index 100%
rename from src/Server/Coderr.Server.App/codeRR.Server.App.csproj.DotSettings
rename to src/Server/App/Coderr.Server.App/codeRR.Server.App.csproj.DotSettings
diff --git a/src/Server/Coderr.Server.Domain/Coderr.Server.Domain.csproj b/src/Server/App/Coderr.Server.Domain/Coderr.Server.Domain.csproj
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Coderr.Server.Domain.csproj
rename to src/Server/App/Coderr.Server.Domain/Coderr.Server.Domain.csproj
diff --git a/src/Server/Coderr.Server.Domain/Core/Account/Account.cs b/src/Server/App/Coderr.Server.Domain/Core/Account/Account.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Account/Account.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Account/Account.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Account/AccountState.cs b/src/Server/App/Coderr.Server.Domain/Core/Account/AccountState.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Account/AccountState.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Account/AccountState.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Account/IAccountRepository.cs b/src/Server/App/Coderr.Server.Domain/Core/Account/IAccountRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Account/IAccountRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Account/IAccountRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Applications/Application.cs b/src/Server/App/Coderr.Server.Domain/Core/Applications/Application.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Applications/Application.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Applications/Application.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Applications/ApplicationRole.cs b/src/Server/App/Coderr.Server.Domain/Core/Applications/ApplicationRole.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Applications/ApplicationRole.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Applications/ApplicationRole.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Applications/ApplicationTeamMember.cs b/src/Server/App/Coderr.Server.Domain/Core/Applications/ApplicationTeamMember.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Applications/ApplicationTeamMember.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Applications/ApplicationTeamMember.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Applications/IApplicationRepository.cs b/src/Server/App/Coderr.Server.Domain/Core/Applications/IApplicationRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Applications/IApplicationRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Applications/IApplicationRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Applications/TypeOfApplication.cs b/src/Server/App/Coderr.Server.Domain/Core/Applications/TypeOfApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Applications/TypeOfApplication.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Applications/TypeOfApplication.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Applications/UserApplication.cs b/src/Server/App/Coderr.Server.Domain/Core/Applications/UserApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Applications/UserApplication.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Applications/UserApplication.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/ErrorReports/ErrorReportContextCollection.cs b/src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ErrorReportContextCollection.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/ErrorReports/ErrorReportContextCollection.cs
rename to src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ErrorReportContextCollection.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/ErrorReports/ErrorReportEntity.cs b/src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ErrorReportEntity.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/ErrorReports/ErrorReportEntity.cs
rename to src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ErrorReportEntity.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/ErrorReports/ErrorReportException.cs b/src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ErrorReportException.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/ErrorReports/ErrorReportException.cs
rename to src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ErrorReportException.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/ErrorReports/IReportsRepository.cs b/src/Server/App/Coderr.Server.Domain/Core/ErrorReports/IReportsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/ErrorReports/IReportsRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Core/ErrorReports/IReportsRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/ErrorReports/ReportMapping.cs b/src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ReportMapping.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/ErrorReports/ReportMapping.cs
rename to src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ReportMapping.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/ErrorReports/ReportsExtensions.cs b/src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ReportsExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/ErrorReports/ReportsExtensions.cs
rename to src/Server/App/Coderr.Server.Domain/Core/ErrorReports/ReportsExtensions.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Feedback/IFeedbackRepository.cs b/src/Server/App/Coderr.Server.Domain/Core/Feedback/IFeedbackRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Feedback/IFeedbackRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Feedback/IFeedbackRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Feedback/UserFeedback.cs b/src/Server/App/Coderr.Server.Domain/Core/Feedback/UserFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Feedback/UserFeedback.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Feedback/UserFeedback.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Incidents/EscalationState.cs b/src/Server/App/Coderr.Server.Domain/Core/Incidents/EscalationState.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Incidents/EscalationState.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Incidents/EscalationState.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Incidents/Events/IncidentCreated.cs b/src/Server/App/Coderr.Server.Domain/Core/Incidents/Events/IncidentCreated.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Incidents/Events/IncidentCreated.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Incidents/Events/IncidentCreated.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Incidents/Events/IncidentReOpened.cs b/src/Server/App/Coderr.Server.Domain/Core/Incidents/Events/IncidentReOpened.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Incidents/Events/IncidentReOpened.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Incidents/Events/IncidentReOpened.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Incidents/IIncidentRepository.cs b/src/Server/App/Coderr.Server.Domain/Core/Incidents/IIncidentRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Incidents/IIncidentRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Incidents/IIncidentRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Incidents/Incident.cs b/src/Server/App/Coderr.Server.Domain/Core/Incidents/Incident.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Incidents/Incident.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Incidents/Incident.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Incidents/IncidentSolution.cs b/src/Server/App/Coderr.Server.Domain/Core/Incidents/IncidentSolution.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Incidents/IncidentSolution.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Incidents/IncidentSolution.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/Incidents/IncidentState.cs b/src/Server/App/Coderr.Server.Domain/Core/Incidents/IncidentState.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/Incidents/IncidentState.cs
rename to src/Server/App/Coderr.Server.Domain/Core/Incidents/IncidentState.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/User/IUserRepository.cs b/src/Server/App/Coderr.Server.Domain/Core/User/IUserRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/User/IUserRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Core/User/IUserRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Core/User/User.cs b/src/Server/App/Coderr.Server.Domain/Core/User/User.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Core/User/User.cs
rename to src/Server/App/Coderr.Server.Domain/Core/User/User.cs
diff --git a/src/Server/Coderr.Server.Domain/EntityNotFoundException.cs b/src/Server/App/Coderr.Server.Domain/EntityNotFoundException.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/EntityNotFoundException.cs
rename to src/Server/App/Coderr.Server.Domain/EntityNotFoundException.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersion.cs b/src/Server/App/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersion.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersion.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersion.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersionMonth.cs b/src/Server/App/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersionMonth.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersionMonth.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/ApplicationVersions/ApplicationVersionMonth.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/ApplicationVersions/IApplicationVersionRepository.cs b/src/Server/App/Coderr.Server.Domain/Modules/ApplicationVersions/IApplicationVersionRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/ApplicationVersions/IApplicationVersionRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/ApplicationVersions/IApplicationVersionRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/ErrorOrigins/ErrorOrigin.cs b/src/Server/App/Coderr.Server.Domain/Modules/ErrorOrigins/ErrorOrigin.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/ErrorOrigins/ErrorOrigin.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/ErrorOrigins/ErrorOrigin.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/History/HistoryEntry.cs b/src/Server/App/Coderr.Server.Domain/Modules/History/HistoryEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/History/HistoryEntry.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/History/HistoryEntry.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/History/IHistoryRepository.cs b/src/Server/App/Coderr.Server.Domain/Modules/History/IHistoryRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/History/IHistoryRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/History/IHistoryRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/Logs/ILogsRepository.cs b/src/Server/App/Coderr.Server.Domain/Modules/Logs/ILogsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Logs/ILogsRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Logs/ILogsRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/Logs/LogEntry.cs b/src/Server/App/Coderr.Server.Domain/Modules/Logs/LogEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Logs/LogEntry.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Logs/LogEntry.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/Logs/LogLevel.cs b/src/Server/App/Coderr.Server.Domain/Modules/Logs/LogLevel.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Logs/LogLevel.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Logs/LogLevel.cs
diff --git a/src/Server/App/Coderr.Server.Domain/Modules/Partitions/ApplicationPartitionValue.cs b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/ApplicationPartitionValue.cs
new file mode 100644
index 00000000..dc9d39f9
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/ApplicationPartitionValue.cs
@@ -0,0 +1,58 @@
+﻿using System;
+
+namespace Coderr.Server.Domain.Modules.Partitions
+{
+    /// <summary>
+    ///     Tracks all partitions that have been uploaded for an application.
+    /// </summary>
+    /// <remarks>
+    ///     <para>
+    ///         This class and <see cref="IncidentPartitionValue" /> differs since this one keeps track of all distinct
+    ///         values, no matter which incident they was received for.
+    ///         The purpose is to tell which incident affected most known values. i.e. if incident #2 reported for "adam" and
+    ///         "anna" and incident #3 reported for "anna" we got two distinct values and
+    ///         incident #2 affected 100% (both users) while incident #3 only affected (50%).
+    ///     </para>
+    ///     <para>
+    ///         Since a partition is defined for a specific application, there is no application id in this table.
+    ///     </para>
+    /// </remarks>
+    public class ApplicationPartitionValue
+    {
+        public ApplicationPartitionValue(int partitionId, string value)
+        {
+            if (partitionId <= 0) throw new ArgumentOutOfRangeException(nameof(partitionId));
+            Value = value ?? throw new ArgumentNullException(nameof(value));
+            PartitionId = partitionId;
+        }
+
+        protected ApplicationPartitionValue()
+        {
+        }
+
+        public int PartitionId { get; private set; }
+
+        public string Value { get; private set; }
+        public int Id { get; set; }
+
+        public override bool Equals(object obj)
+        {
+            if (!(obj is ApplicationPartitionValue other))
+                return false;
+            return Equals(other);
+        }
+
+        public override int GetHashCode()
+        {
+            unchecked
+            {
+                return (PartitionId * 397) ^ (Value != null ? Value.GetHashCode() : 0);
+            }
+        }
+
+        protected bool Equals(ApplicationPartitionValue other)
+        {
+            return PartitionId == other.PartitionId && string.Equals(Value, other.Value);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IPartitionRepository.cs b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IPartitionRepository.cs
new file mode 100644
index 00000000..ff3a448c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IPartitionRepository.cs
@@ -0,0 +1,39 @@
+﻿using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Coderr.Server.Domain.Modules.Partitions
+{
+    public interface IPartitionRepository
+    {
+        Task CreateAsync(IncidentPartitionValue incidentPartitionValues);
+
+        Task CreateAsync(PartitionDefinition definition);
+        Task CreateAsync(ApplicationPartitionValue applicationValues);
+
+        Task<IList<ApplicationPartitionValue>> FindForApplication(int applicationId);
+
+        Task<IList<PartitionDefinition>> GetDefinitions(int applicationId);
+
+        Task<IList<PartitionDefinition>> GetDefinitionsToTag();
+
+        Task<IReadOnlyList<IncidentToTag>> GetIncidentsToTag(PartitionDefinition definition);
+
+        /// <summary>
+        ///     Get a summary for each partition that we've received for the specified incident.
+        /// </summary>
+        /// <param name="applicationId">Application that the incident belongs to</param>
+        /// <param name="incidentId">Incident to get information for</param>
+        /// <returns></returns>
+        Task<IList<IncidentPartitionSummary>> GetIncidentSummary(int applicationId, int incidentId);
+
+        Task<IEnumerable<IncidentPartitionSummary>> GetPrioritized(int[] incidentIds = null);
+        Task<IEnumerable<IncidentPartitionSummary>> GetPrioritized(int applicationId);
+
+        Task UpdateAsync(IncidentPartitionValue incidentPartitionValues);
+
+        Task UpdateAsync(PartitionDefinition definition);
+        Task UpdateAsync(ApplicationPartitionValue applicationValues);
+        Task<PartitionDefinition> GetByIdAsync(int id);
+        Task DeleteDefinitionByIdAsync(int partitionId);
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentPartitionSummary.cs b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentPartitionSummary.cs
new file mode 100644
index 00000000..a4323350
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentPartitionSummary.cs
@@ -0,0 +1,58 @@
+﻿namespace Coderr.Server.Domain.Modules.Partitions
+{
+    /// <summary>
+    /// </summary>
+    public class IncidentPartitionSummary
+    {
+        /// <summary>
+        ///     Partition id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        ///     Incident
+        /// </summary>
+        public int IncidentId { get; set; }
+
+        /// <summary>
+        ///     Title of partition
+        /// </summary>
+        public string PartitionTitle { get; set; }
+
+        /// <summary>
+        ///     Calculated severity (<see cref="PartitionDefinition.CalculateSeverity" />)
+        /// </summary>
+        /// <value>
+        ///     Largest value is most severe.
+        /// </value>
+        public int Severity { get; set; }
+
+
+        /// <summary>
+        ///     Total number of possible values
+        /// </summary>
+        /// <remarks>
+        ///     <para>
+        ///         Either NumberOfItems from <see cref="PartitionDefinition" /> or the total amount of unique values recieved for
+        ///         the
+        ///         partition.
+        ///     </para>
+        /// </remarks>
+        public int TotalCount { get; set; }
+
+        /// <summary>
+        /// Number of items that must be affected for this incident to be considered important.
+        /// </summary>
+        public int ImportantThreshold { get; set; }
+
+        /// <summary>
+        /// Number of items that must be affected for this incident to be considered critical.
+        /// </summary>
+        public int CriticalThreshold { get; set; }
+
+        /// <summary>
+        ///     Number of unique values that have been received for this incident
+        /// </summary>
+        public int ValueCount { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentPartitionValue.cs b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentPartitionValue.cs
new file mode 100644
index 00000000..d6e391d6
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentPartitionValue.cs
@@ -0,0 +1,60 @@
+﻿using System;
+using System.Collections.Generic;
+
+namespace Coderr.Server.Domain.Modules.Partitions
+{
+    /// <summary>
+    ///     A identified partition for an incident
+    /// </summary>
+    public class IncidentPartitionValue : IEquatable<IncidentPartitionValue>
+    {
+
+        public IncidentPartitionValue(int partitionId, int incidentId, int value)
+        {
+            if (partitionId <= 0) throw new ArgumentOutOfRangeException(nameof(partitionId));
+            if (incidentId <= 0) throw new ArgumentOutOfRangeException(nameof(incidentId));
+            PartitionId = partitionId;
+            IncidentId = incidentId;
+            ValueId = value;
+        }
+
+        protected IncidentPartitionValue()
+        {
+        }
+
+        public int Id { get; set; }
+        /// <summary>
+        ///     Incident that this partition information is for.
+        /// </summary>
+        public int IncidentId { get; private set; }
+
+        /// <summary>
+        ///     Which partition this information is for.
+        /// </summary>
+        public int PartitionId { get; private set; }
+
+        public int ValueId { get; private set; }
+
+        public bool Equals(IncidentPartitionValue other)
+        {
+            return other != null &&
+                   IncidentId == other.IncidentId &&
+                   PartitionId == other.PartitionId &&
+                   ValueId == other.ValueId;
+        }
+
+        public override bool Equals(object obj)
+        {
+            return Equals(obj as IncidentPartitionValue);
+        }
+
+        public override int GetHashCode()
+        {
+            var hashCode = 973172448;
+            hashCode = hashCode * -1521134295 + IncidentId.GetHashCode();
+            hashCode = hashCode * -1521134295 + PartitionId.GetHashCode();
+            hashCode = hashCode * -1521134295 + EqualityComparer<int>.Default.GetHashCode(ValueId);
+            return hashCode;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentToTag.cs b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentToTag.cs
new file mode 100644
index 00000000..c4bda119
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/IncidentToTag.cs
@@ -0,0 +1,13 @@
+﻿namespace Coderr.Server.Domain.Modules.Partitions
+{
+    public class IncidentToTag
+    {
+        public int IncidentId { get; set; }
+        public int Count { get; set; }
+        public int PartitionId { get; set; }
+
+        public bool MarkAsImportant { get; set; }
+        public bool MarkAsCritical { get; set; }
+        public int ApplicationId { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.Domain/Modules/Partitions/PartitionDefinition.cs b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/PartitionDefinition.cs
new file mode 100644
index 00000000..ba5be1c1
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Domain/Modules/Partitions/PartitionDefinition.cs
@@ -0,0 +1,126 @@
+﻿using System;
+
+namespace Coderr.Server.Domain.Modules.Partitions
+{
+    /// <summary>
+    ///     Defines a partition.
+    /// </summary>
+    public class PartitionDefinition
+    {
+        private int _weight = 1;
+
+        public PartitionDefinition(int applicationId, string title, string partitionKey)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            ApplicationId = applicationId;
+            Name = title ?? throw new ArgumentNullException(nameof(title));
+            PartitionKey = partitionKey ?? throw new ArgumentNullException(nameof(partitionKey));
+        }
+
+        protected PartitionDefinition()
+        {
+        }
+
+        /// <summary>
+        ///     Which application this partition is for.
+        /// </summary>
+        public int ApplicationId { get; private set; }
+
+        public int Id { get; set; }
+
+        /// <summary>
+        ///     Name of the partition (human friendly name)
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        ///     The amount of items that we can receive reports for in this partition.
+        /// </summary>
+        /// <remarks>
+        ///     For instance if the partition is called "UserName", then this value would indicate the total number of users. Allows
+        ///     us to
+        ///     calculate the percentage of the partition that an incident affects.
+        /// </remarks>
+        public int NumberOfItems { get; set; }
+
+        /// <summary>
+        /// Mark incident as important once the specified amount of items have been affected.
+        /// </summary>
+        public int? ImportantThreshold { get; set; }
+
+        /// <summary>
+        /// Mark incident as critical once the specified amount of items have been affected.
+        /// </summary>
+        public int? CriticalThreshold { get; set; }
+
+        /// <summary>
+        ///     Name of the item that is passed in the client context collection.
+        /// </summary>
+        public string PartitionKey { get; private set; }
+
+        /// <summary>
+        ///     How important this partition is (typically 1-10, but it's up to the user, highest weight wins).
+        /// </summary>
+        /// <remarks>
+        ///     <para>
+        ///         Used by <see cref="CalculateSeverity" />. Use it to weight the importance of different partitions.
+        ///     </para>
+        /// </remarks>
+        public int Weight
+        {
+            get => _weight;
+            set
+            {
+                if (value <= 0)
+                    throw new ArgumentOutOfRangeException(nameof(value), value,
+                        "Must be 1 or larger. 1 = no extra importance is given to this partition.");
+                _weight = value;
+            }
+        }
+
+        /// <summary>
+        ///     Calculate the priority order for this partition (more is better)
+        /// </summary>
+        /// <param name="numberOfItemsAffectedByIncident">Number of unique items for the defined partition key</param>
+        /// <param name="knownAmountOfItems">Number of unique items that we've received reports for in the application.</param>
+        /// <returns></returns>
+        /// <remarks>
+        ///     <para>
+        ///         Calculation can be done in two ways.
+        ///     </para>
+        ///     <para>
+        ///         First is used if <see cref="NumberOfItems" /> is specified. Then we take the partition impact  and then weight
+        ///         that. <c>(numberOfItemsAffectedByIncident/NumberOfItems)*Weight</c>
+        ///     </para>
+        ///     <para>
+        ///         If <c>NumberOfItems</c> is not specified, we can't be sure if we've received incidents for all items in a
+        ///         partition. Therefore any usage of percentage is not accurate. However,
+        ///         we still use percentage to get a priority similar to those partitions that have got <c>NumberOfItems</c>
+        ///         defined. But the severity calculation is only useful for all incidents
+        ///         in the same partition (or when no partition have <see cref="NumberOfItems" /> defined).
+        ///         we simply use the <c>numberOfAffectedItems * Weight</c>
+        ///     </para>
+        /// </remarks>
+        public int CalculateSeverity(int numberOfItemsAffectedByIncident, int knownAmountOfItems)
+        {
+            if (numberOfItemsAffectedByIncident <= 0)
+                throw new ArgumentOutOfRangeException(nameof(numberOfItemsAffectedByIncident));
+            if (NumberOfItems == 0 && knownAmountOfItems == 0)
+                throw new ArgumentOutOfRangeException(nameof(knownAmountOfItems),
+                    "Must be specified when the NumberOfItems property is not specified.");
+
+            var maxValue = NumberOfItems == 0 ? knownAmountOfItems : NumberOfItems;
+            var percentage = numberOfItemsAffectedByIncident * 100 / maxValue;
+            return Weight == 0 ? percentage : percentage * Weight;
+        }
+
+        /// <summary>
+        ///     Calculate amount of affected items
+        /// </summary>
+        /// <param name="numberOfItemsAffectedItems">Number of unique items for the defined partition key</param>
+        public int CalculatePercentage(int numberOfItemsAffectedItems)
+        {
+            return numberOfItemsAffectedItems * 100 / NumberOfItems;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Domain/Modules/ReportSpikes/ErrorReportSpike.cs b/src/Server/App/Coderr.Server.Domain/Modules/ReportSpikes/ErrorReportSpike.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/ReportSpikes/ErrorReportSpike.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/ReportSpikes/ErrorReportSpike.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/Similarities/SimilaritiesReport.cs b/src/Server/App/Coderr.Server.Domain/Modules/Similarities/SimilaritiesReport.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Similarities/SimilaritiesReport.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Similarities/SimilaritiesReport.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/Similarities/Similarity.cs b/src/Server/App/Coderr.Server.Domain/Modules/Similarities/Similarity.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Similarities/Similarity.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Similarities/Similarity.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/Similarities/SimilarityCollection.cs b/src/Server/App/Coderr.Server.Domain/Modules/Similarities/SimilarityCollection.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Similarities/SimilarityCollection.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Similarities/SimilarityCollection.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/Similarities/SimilarityValue.cs b/src/Server/App/Coderr.Server.Domain/Modules/Similarities/SimilarityValue.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Similarities/SimilarityValue.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Similarities/SimilarityValue.cs
diff --git a/src/Server/App/Coderr.Server.Domain/Modules/Statistics/IncidentProgressTracker.cs b/src/Server/App/Coderr.Server.Domain/Modules/Statistics/IncidentProgressTracker.cs
new file mode 100644
index 00000000..10e2a75f
--- /dev/null
+++ b/src/Server/App/Coderr.Server.Domain/Modules/Statistics/IncidentProgressTracker.cs
@@ -0,0 +1,69 @@
+﻿using System;
+
+namespace Coderr.Server.Domain.Modules.Statistics
+{
+    /// <summary>
+    /// An aggregated view of an incident, so that we can calculate statistics in an easier way.
+    /// </summary>
+    public class IncidentProgressTracker
+    {
+        public int IncidentId { get; set; }
+        public int ApplicationId { get; set; }
+        /// <summary>
+        ///     date only when the incident was created
+        /// </summary>
+        public DateTime CreatedAtUtc { get; set; }
+
+        public int AssignedToId { get; set; }
+
+        /// <summary>
+        ///     Date only when the incident was assigned
+        /// </summary>
+        public DateTime? AssignedAtUtc { get; set; }
+
+
+
+        public int ClosedById { get; set; }
+
+        /// <summary>
+        ///     Date only when the incident was closed
+        /// </summary>
+        public DateTime? ClosedAtUtc { get; set; }
+
+
+        /// <summary>
+        ///     Number of times this incident has been reopened.
+        /// </summary>
+        public int ReOpenCount { get; set; }
+
+        /// <summary>
+        ///     Date only when the incident was reopened
+        /// </summary>
+        public DateTime? ReOpenedAtUtc { get; set; }
+
+        /// <summary>
+        ///     Number of versions that this incident appeared in
+        /// </summary>
+        public int VersionCount { get; set; }
+
+        /// <summary>
+        ///     Version strings separated with colons (prefixed and suffixed with colon too)
+        /// </summary>
+        public string Versions { get; set; }
+
+        public override string ToString()
+        {
+            var assigned = AssignedAtUtc == null
+                ? ""
+                : $" Assigned {AssignedToId} at {AssignedAtUtc}";
+            var closed = ClosedAtUtc == null
+                ? ""
+                : $" Closed {ClosedById} at {ClosedAtUtc}, ";
+            var reopened = ReOpenedAtUtc == null
+                ? ""
+                : $" ReOpened {ReOpenedAtUtc} {ReOpenCount} times";
+
+            return $"{CreatedAtUtc.ToShortDateString()} {IncidentId} {ApplicationId} {assigned}{closed}{reopened}";
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Domain/Modules/Tags/ITagsRepository.cs b/src/Server/App/Coderr.Server.Domain/Modules/Tags/ITagsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Tags/ITagsRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Tags/ITagsRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/Tags/Tag.cs b/src/Server/App/Coderr.Server.Domain/Modules/Tags/Tag.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/Tags/Tag.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/Tags/Tag.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/UserNotifications/BrowserSubscription.cs b/src/Server/App/Coderr.Server.Domain/Modules/UserNotifications/BrowserSubscription.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/UserNotifications/BrowserSubscription.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/UserNotifications/BrowserSubscription.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/UserNotifications/IUserNotificationsRepository.cs b/src/Server/App/Coderr.Server.Domain/Modules/UserNotifications/IUserNotificationsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/UserNotifications/IUserNotificationsRepository.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/UserNotifications/IUserNotificationsRepository.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/UserNotifications/NotificationState.cs b/src/Server/App/Coderr.Server.Domain/Modules/UserNotifications/NotificationState.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/UserNotifications/NotificationState.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/UserNotifications/NotificationState.cs
diff --git a/src/Server/Coderr.Server.Domain/Modules/UserNotifications/UserNotificationSettings.cs b/src/Server/App/Coderr.Server.Domain/Modules/UserNotifications/UserNotificationSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.Domain/Modules/UserNotifications/UserNotificationSettings.cs
rename to src/Server/App/Coderr.Server.Domain/Modules/UserNotifications/UserNotificationSettings.cs
diff --git a/src/Server/Coderr.Server.Domain/ReadMe.md b/src/Server/App/Coderr.Server.Domain/ReadMe.md
similarity index 97%
rename from src/Server/Coderr.Server.Domain/ReadMe.md
rename to src/Server/App/Coderr.Server.Domain/ReadMe.md
index facfe97c..91f25faa 100644
--- a/src/Server/Coderr.Server.Domain/ReadMe.md
+++ b/src/Server/App/Coderr.Server.Domain/ReadMe.md
@@ -1,5 +1,5 @@
-﻿Coderr domain entities
-======================
-
-Contains all domain entities in complete isolation, focusing on defining the entities and their abilities.
-Should not depend on anything else in the system.
+﻿Coderr domain entities
+======================
+
+Contains all domain entities in complete isolation, focusing on defining the entities and their abilities.
+Should not depend on anything else in the system.
diff --git a/src/Server/App/Coderr.Server.WebPush/Coderr.Server.WebPush.csproj b/src/Server/App/Coderr.Server.WebPush/Coderr.Server.WebPush.csproj
new file mode 100644
index 00000000..700e7e82
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebPush/Coderr.Server.WebPush.csproj
@@ -0,0 +1,18 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+    <PackageReference Include="Portable.BouncyCastle" Version="1.8.9" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Common\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
+    <ProjectReference Include="..\..\Reporting\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj" />
+    <ProjectReference Include="..\..\Reporting\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Server/Coderr.Server.WebPush/Model/NotificationAction.cs b/src/Server/App/Coderr.Server.WebPush/Model/NotificationAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Model/NotificationAction.cs
rename to src/Server/App/Coderr.Server.WebPush/Model/NotificationAction.cs
diff --git a/src/Server/Coderr.Server.WebPush/Model/PushNotification.cs b/src/Server/App/Coderr.Server.WebPush/Model/PushNotification.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Model/PushNotification.cs
rename to src/Server/App/Coderr.Server.WebPush/Model/PushNotification.cs
diff --git a/src/Server/Coderr.Server.WebPush/Model/PushSubscription.cs b/src/Server/App/Coderr.Server.WebPush/Model/PushSubscription.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Model/PushSubscription.cs
rename to src/Server/App/Coderr.Server.WebPush/Model/PushSubscription.cs
diff --git a/src/Server/Coderr.Server.WebPush/Model/VapidDetails.cs b/src/Server/App/Coderr.Server.WebPush/Model/VapidDetails.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Model/VapidDetails.cs
rename to src/Server/App/Coderr.Server.WebPush/Model/VapidDetails.cs
diff --git a/src/Server/Coderr.Server.WebPush/ReadMe.md b/src/Server/App/Coderr.Server.WebPush/ReadMe.md
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/ReadMe.md
rename to src/Server/App/Coderr.Server.WebPush/ReadMe.md
diff --git a/src/Server/Coderr.Server.WebPush/Util/ECKeyHelper.cs b/src/Server/App/Coderr.Server.WebPush/Util/ECKeyHelper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Util/ECKeyHelper.cs
rename to src/Server/App/Coderr.Server.WebPush/Util/ECKeyHelper.cs
diff --git a/src/Server/Coderr.Server.WebPush/Util/EncryptionResult.cs b/src/Server/App/Coderr.Server.WebPush/Util/EncryptionResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Util/EncryptionResult.cs
rename to src/Server/App/Coderr.Server.WebPush/Util/EncryptionResult.cs
diff --git a/src/Server/Coderr.Server.WebPush/Util/Encryptor.cs b/src/Server/App/Coderr.Server.WebPush/Util/Encryptor.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Util/Encryptor.cs
rename to src/Server/App/Coderr.Server.WebPush/Util/Encryptor.cs
diff --git a/src/Server/Coderr.Server.WebPush/Util/HmacSha256.cs b/src/Server/App/Coderr.Server.WebPush/Util/HmacSha256.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Util/HmacSha256.cs
rename to src/Server/App/Coderr.Server.WebPush/Util/HmacSha256.cs
diff --git a/src/Server/Coderr.Server.WebPush/Util/JwsSigner.cs b/src/Server/App/Coderr.Server.WebPush/Util/JwsSigner.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Util/JwsSigner.cs
rename to src/Server/App/Coderr.Server.WebPush/Util/JwsSigner.cs
diff --git a/src/Server/Coderr.Server.WebPush/Util/UrlBase64Helper.cs b/src/Server/App/Coderr.Server.WebPush/Util/UrlBase64Helper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Util/UrlBase64Helper.cs
rename to src/Server/App/Coderr.Server.WebPush/Util/UrlBase64Helper.cs
diff --git a/src/Server/Coderr.Server.WebPush/Util/VapidHelper.cs b/src/Server/App/Coderr.Server.WebPush/Util/VapidHelper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Util/VapidHelper.cs
rename to src/Server/App/Coderr.Server.WebPush/Util/VapidHelper.cs
diff --git a/src/Server/Coderr.Server.WebPush/Util/VapidHttpHeaders.cs b/src/Server/App/Coderr.Server.WebPush/Util/VapidHttpHeaders.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/Util/VapidHttpHeaders.cs
rename to src/Server/App/Coderr.Server.WebPush/Util/VapidHttpHeaders.cs
diff --git a/src/Server/Coderr.Server.WebPush/WebPushClient.cs b/src/Server/App/Coderr.Server.WebPush/WebPushClient.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/WebPushClient.cs
rename to src/Server/App/Coderr.Server.WebPush/WebPushClient.cs
diff --git a/src/Server/Coderr.Server.WebPush/WebPushException.cs b/src/Server/App/Coderr.Server.WebPush/WebPushException.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebPush/WebPushException.cs
rename to src/Server/App/Coderr.Server.WebPush/WebPushException.cs
diff --git a/src/Server/Coderr.Server.WebSite/.gitignore b/src/Server/App/Coderr.Server.WebSite/.gitignore
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/.gitignore
rename to src/Server/App/Coderr.Server.WebSite/.gitignore
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/AccountController.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/AccountController.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/AccountController.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/AccountController.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/BootController.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/BootController.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/BootController.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/BootController.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/MessagingController.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/MessagingController.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/MessagingController.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/MessagingController.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/SetupController.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/SetupController.cs
similarity index 99%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/SetupController.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/SetupController.cs
index 6b0ec448..99eb2fd8 100644
--- a/src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/SetupController.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/SetupController.cs
@@ -104,6 +104,7 @@ public ActionResult Completed(string displayError = null)
             return View();
         }
 
+
         public ActionResult Stats()
         {
             return View();
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/SqlController.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/SqlController.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Controllers/SqlController.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Controllers/SqlController.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/InstallAuthorizationFilter.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/InstallAuthorizationFilter.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/InstallAuthorizationFilter.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/InstallAuthorizationFilter.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Models/AccountViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/AccountViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Models/AccountViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/AccountViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Models/BasicsViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/BasicsViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Models/BasicsViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/BasicsViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Models/EmailViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/EmailViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Models/EmailViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/EmailViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Models/ErrorTrackingViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/ErrorTrackingViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Models/ErrorTrackingViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/ErrorTrackingViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Models/QueueViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/QueueViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Models/QueueViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/QueueViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Models/SupportViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/SupportViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Models/SupportViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Models/SupportViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Account/Admin.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Account/Admin.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Account/Admin.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Account/Admin.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Messaging/Email.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Messaging/Email.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Messaging/Email.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Messaging/Email.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Basics.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Basics.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Basics.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Basics.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Completed.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Completed.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Completed.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Completed.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/ErrorTracking.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/ErrorTracking.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/ErrorTracking.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/ErrorTracking.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Index.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Index.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Index.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Index.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Stats.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Stats.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Stats.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Stats.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Support.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Support.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Support.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Setup/Support.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_JQueryReplacement.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_JQueryReplacement.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_JQueryReplacement.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_JQueryReplacement.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_Layout.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_Layout.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_Layout.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Shared/_Layout.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Index.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Index.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Index.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Index.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Tables.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Tables.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Tables.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/Sql/Tables.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/_ViewImports.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/_ViewImports.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/_ViewImports.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/_ViewImports.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/Views/_ViewStart.cshtml b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/_ViewStart.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/Views/_ViewStart.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/Views/_ViewStart.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/WizardStepInfo.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/WizardStepInfo.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/WizardStepInfo.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/WizardStepInfo.cs
diff --git a/src/Server/Coderr.Server.WebSite/Areas/Installation/WizardSteps.cs b/src/Server/App/Coderr.Server.WebSite/Areas/Installation/WizardSteps.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Areas/Installation/WizardSteps.cs
rename to src/Server/App/Coderr.Server.WebSite/Areas/Installation/WizardSteps.cs
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/.editorconfig b/src/Server/App/Coderr.Server.WebSite/ClientApp/.editorconfig
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/.editorconfig
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/.editorconfig
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/.gitignore b/src/Server/App/Coderr.Server.WebSite/ClientApp/.gitignore
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/.gitignore
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/.gitignore
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/README.md b/src/Server/App/Coderr.Server.WebSite/ClientApp/README.md
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/README.md
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/README.md
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/angular.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/angular.json
similarity index 83%
rename from src/Server/Coderr.Server.WebSite/ClientApp/angular.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/angular.json
index 4385bd16..c6656067 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/angular.json
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/angular.json
@@ -6,7 +6,7 @@
   "version": 1,
   "newProjectRoot": "projects",
   "projects": {
-    "coderr-frontend": {
+    "CoderrAngular2": {
       "root": "",
       "sourceRoot": "src",
       "projectType": "application",
@@ -67,19 +67,19 @@
         "serve": {
           "builder": "@angular-devkit/build-angular:dev-server",
           "options": {
-            "browserTarget": "coderr-frontend:build",
+            "browserTarget": "CoderrAngular2:build",
             "disableHostCheck": true
           },
           "configurations": {
             "production": {
-              "browserTarget": "coderr-frontend:build:production"
+              "browserTarget": "CoderrAngular2:build:production"
             }
           }
         },
         "extract-i18n": {
           "builder": "@angular-devkit/build-angular:extract-i18n",
           "options": {
-            "browserTarget": "coderr-frontend:build"
+            "browserTarget": "CoderrAngular2:build"
           }
         },
         "test": {
@@ -94,13 +94,6 @@
             "assets": [ "src/assets" ]
           }
         },
-        "lint": {
-          "builder": "@angular-devkit/build-angular:tslint",
-          "options": {
-            "tsConfig": [ "src/tsconfig.app.json", "src/tsconfig.spec.json" ],
-            "exclude": [ "**/node_modules/**" ]
-          }
-        },
         "server": {
           "builder": "@angular-devkit/build-angular:server",
           "options": {
@@ -132,7 +125,7 @@
         }
       }
     },
-    "coderr-frontend-e2e": {
+    "CoderrAngular2-e2e": {
       "root": "e2e/",
       "projectType": "application",
       "architect": {
@@ -140,18 +133,11 @@
           "builder": "@angular-devkit/build-angular:protractor",
           "options": {
             "protractorConfig": "e2e/protractor.conf.js",
-            "devServerTarget": "coderr-frontend:serve"
-          }
-        },
-        "lint": {
-          "builder": "@angular-devkit/build-angular:tslint",
-          "options": {
-            "tsConfig": "e2e/tsconfig.e2e.json",
-            "exclude": [ "**/node_modules/**" ]
+            "devServerTarget": "CoderrAngular2:serve"
           }
         }
       }
     }
   },
-  "defaultProject": "coderr-frontend"
+  "defaultProject": "CoderrAngular2"
 }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/browserslist b/src/Server/App/Coderr.Server.WebSite/ClientApp/browserslist
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/browserslist
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/browserslist
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.css b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.css
new file mode 100644
index 00000000..8d8c66e8
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.css
@@ -0,0 +1,32 @@
+.disable * {
+
+}
+.members td:first-child {
+    width: 150px;
+}
+
+.new-item {
+    animation-name: blinker;
+    animation-duration: 1s;
+    animation-timing-function: linear;
+    animation-iteration-count: 1;
+}
+
+@keyframes blinker {
+    0% {
+        opacity: 1.0;
+        color: red;
+    }
+
+    50% {
+        opacity: 0.0;
+    }
+
+    75% {
+        opacity: 1.0;
+        color: black;
+    }
+    100% {
+        opacity: 0;
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.ts
new file mode 100644
index 00000000..217a875b
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.ts
@@ -0,0 +1,322 @@
+import { AppRoot } from '@/services/AppRoot';
+import * as DevOps from "@/dto/Common/Azure/DevOps";
+import { Component, Mixins } from "vue-property-decorator";
+import { AppAware } from "@/AppMixins";
+
+interface IItem {
+    id: string;
+    text: string;
+}
+
+@Component
+export default class AzureDevOpsConnectionComponent extends Mixins(AppAware) {
+    applicationId: number = 0;
+    applicationName: string = null;
+    personalAccessToken: string = null;
+    url: string = null;
+    project: IItem = null;
+    areaPath: IItem = null;
+    projects: IItem[] = [];
+    areas: IItem[] = [];
+    iterations: IItem[] = [];
+    isConnected = false;
+    showConnectError = false;
+    hangOn = false;
+    isSaved = false;
+
+    // state fields
+    workItemTypes: string[] = [];
+    stateTypes: string[] = [];
+    isWorkItemTypeSelected = false;
+    autoAddImportant = false;
+    autoAddCritical = false;
+    assignedStateName: string = null;
+    closedStateName: string = null;
+    solvedStateName: string = null;
+    workItemTypeName: string = null;
+
+    mounted() {
+        this.onApplicationChanged(this.onAppSelected);
+        this.applicationId = parseInt(this.$route.params.applicationId);
+        AppRoot.Instance.applicationService.get(this.applicationId)
+            .then(x => this.applicationName = x.name);
+        this.load();
+    }
+
+    tryConnect() {
+        this.load();
+    }
+
+    save() {
+        var cmd = new DevOps.SaveSettings();
+        cmd.ApplicationId = this.applicationId;
+        cmd.AreaPathId = this.areaPath.id;
+        cmd.AreaPath = this.areaPath.text;
+        cmd.ProjectId = this.project.id;
+        cmd.ProjectName = this.project.text;
+        cmd.PersonalAccessToken = this.personalAccessToken;
+        cmd.Url = this.url;
+        cmd.AutoAddCritical = this.autoAddCritical;
+        cmd.AutoAddImportant = this.autoAddImportant;
+
+        cmd.AssignedStateName = this.assignedStateName;
+        cmd.ClosedStateName = this.closedStateName;
+        cmd.SolvedStateName = this.solvedStateName;
+        cmd.WorkItemTypeName = this.workItemTypeName;
+
+        AppRoot.Instance.apiClient.command(cmd);
+        this.isSaved = true;
+        AppRoot.notify("Settings have been saved.");
+    }
+
+    private onAppSelected(applicationId: number) {
+        this.clear();
+        this.applicationId = applicationId;
+        AppRoot.Instance.applicationService.get(this.applicationId)
+            .then(x => this.applicationName = x.name);
+        this.load();
+    }
+
+    onWorkItemTypeChanged() {
+        if (this.workItemTypeName != null) {
+            this.isWorkItemTypeSelected = true;
+            this.loadStateTypes();
+        } else {
+            this.isWorkItemTypeSelected = false;
+        }
+    }
+
+    onProjectChanged() {
+        this.loadAreas();
+        this.loadWorkItemTypes();
+        if (this.workItemTypeName != null) {
+            this.loadStateTypes();
+        }
+    }
+
+    private clear() {
+        this.projects = [];
+        this.areas = [];
+        this.areaPath = null;
+        this.project = null;
+        this.isSaved = false;
+        this.isConnected = false;
+    }
+
+    private async load(): Promise<object> {
+        if (!this.personalAccessToken) {
+            var query = new DevOps.GetSettings();
+            query.ApplicationId = this.applicationId;
+            var result = await AppRoot.Instance.apiClient.query<DevOps.GetSettingsResult>(query);
+            if (result != null) {
+                this.isSaved = true;
+                this.url = result.Url;
+                this.personalAccessToken = result.PersonalAccessToken;
+                this.autoAddCritical = result.AutoAddCritical;
+                this.autoAddImportant = result.AutoAddImportant;
+
+                if (result.ProjectName) {
+                    this.project = { id: result.ProjectId, text: result.ProjectName };
+                }
+
+                if (result.AreaPath) {
+                    this.areaPath = { id: result.AreaPathId, text: result.AreaPath };
+                }
+
+                this.assignedStateName = result.AssignedStateName;
+                this.closedStateName = result.ClosedStateName;
+                this.solvedStateName = result.SolvedStateName;
+                this.workItemTypeName = result.WorkItemTypeName;
+                if (this.isWorkItemTypeSelected) {
+                    this.loadStateTypes();
+                }
+            }
+        }
+
+        if (!this.url || !this.personalAccessToken) {
+            return;
+        }
+
+        if (this.projects.length === 0) {
+            var couldConnect = await this.loadProjects();
+            this.showConnectError = !couldConnect;
+            this.isConnected = couldConnect;
+            if (!this.isConnected) {
+                return;
+            }
+        }
+
+        // we do not wait here to load in parallel.
+
+        if (this.areas.length === 0 && this.project) {
+            this.loadAreas();
+        }
+        if (this.iterations.length === 0 && this.project) {
+            this.loadIterations();
+        }
+
+        if (this.project) {
+            this.loadWorkItemTypes();
+        }
+    }
+
+    private async loadProjects(): Promise<boolean> {
+
+        this.showConnectError = false;
+        this.hangOn = true;
+        var dto = new DevOps.GetProjects();
+        dto.PersonalAccessToken = this.personalAccessToken;
+        dto.Url = this.url;
+
+        let result = await AppRoot.Instance.apiClient.query<DevOps.GetProjectsResult>(dto);
+        this.hangOn = false;
+        if (result.Items.length === 0) {
+            return false;
+        }
+        result.Items.forEach(item => {
+            this.projects.push({
+                id: item.Id,
+                text: item.Name
+            });
+        });
+
+        return true;
+    }
+
+    private async loadAreas(): Promise<boolean> {
+        var dto = new DevOps.GetAreaPaths();
+        dto.PersonalAccessToken = this.personalAccessToken;
+        dto.ProjectNameOrId = this.project.id;
+        dto.Url = this.url;
+
+        this.areas = [];
+        let result = await AppRoot.Instance.apiClient.query<DevOps.GetAreaPathsResult>(dto);
+        if (result.Items.length === 0) {
+            return false;
+        }
+        result.Items.forEach(item => {
+            this.areas.push({
+                id: item.Path,
+                text: item.Path
+            });
+        });
+
+        return true;
+    }
+
+    private async loadWorkItemTypes(): Promise<boolean> {
+        var query = new DevOps.GetWorkItemTypes();
+        query.ProjectNameOrId = this.project.id;
+        query.PersonalAccessToken = this.personalAccessToken;
+        query.Url = this.url;
+
+        let result = await AppRoot.Instance.apiClient.query<DevOps.GetWorkItemTypesResult>(query);
+        if (result.Items.length === 0) {
+            return false;
+        }
+        this.workItemTypes = [];
+        result.Items.forEach(item => {
+            this.workItemTypes.push(item.Name);
+        });
+
+        let isLoaded = false;
+
+        if (this.workItemTypeName != null) {
+            if (!this.workItemTypes.find(x => x === this.workItemTypeName)) {
+                this.workItemTypeName = null;
+                this.isWorkItemTypeSelected = false;
+            } else {
+                isLoaded = true;
+            }
+        }
+        if (this.workItemTypeName == null) {
+            if (this.workItemTypes.find(x => x === "Bug")) {
+                this.workItemTypeName = "Bug";
+                isLoaded = true;
+            }
+            else if (this.workItemTypes.find(x => x === "Issue")) {
+                this.workItemTypeName = "Issue";
+                isLoaded = true;
+            }
+        }
+        if (isLoaded) {
+            this.isWorkItemTypeSelected = true;
+            this.loadStateTypes();
+        }
+
+        return true;
+    }
+
+    private async loadStateTypes(): Promise<boolean> {
+        var query = new DevOps.GetWorkItemStates();
+        query.ProjectId = this.project.id;
+        query.PersonalAccessToken = this.personalAccessToken;
+        query.Url = this.url;
+        query.WorkItemTypeName = this.workItemTypeName;
+
+        let result = await AppRoot.Instance.apiClient.query<DevOps.GetWorkItemStatesResult>(query);
+        this.stateTypes = [];
+        if (result.Items.length === 0) {
+            return false;
+        }
+        result.Items.forEach(item => {
+            this.stateTypes.push(item.Name);
+        });
+
+        if (!this.assignedStateName) {
+            if (this.stateTypes.find(x => x === "Committed")) {
+                this.assignedStateName = "Committed";
+            }
+            else if (this.stateTypes.find(x => x === "Active")) {
+                this.assignedStateName = "Active";
+            }
+            else if (this.stateTypes.find(x => x === "Doing")) {
+                this.assignedStateName = "Doing";
+            }
+            else if (this.stateTypes.find(x => x === "Assigned")) {
+                this.assignedStateName = "Assigned";
+            }
+        }
+
+        if (!this.solvedStateName) {
+            if (this.stateTypes.find(x => x === "Resolved")) {
+                this.solvedStateName = "Resolved";
+            }
+            else if (this.stateTypes.find(x => x === "Done")) {
+                this.solvedStateName = "Done";
+            }
+        }
+        if (!this.closedStateName) {
+            if (this.stateTypes.find(x => x === "Closed")) {
+                this.closedStateName = "Closed";
+            }
+            else if (this.stateTypes.find(x => x === "Removed")) {
+                this.closedStateName = "Removed";
+            }
+            else if (this.stateTypes.find(x => x === "Done")) {
+                this.closedStateName = "Done";
+            }
+        }
+        return true;
+    }
+
+    private async loadIterations(): Promise<boolean> {
+        var dto = new DevOps.GetIterations();
+        dto.ProjectNameOrId = this.project.id;
+        dto.PersonalAccessToken = this.personalAccessToken;
+        dto.Url = this.url;
+
+        let result = await AppRoot.Instance.apiClient.query<DevOps.GetIterationPathsResult>(dto);
+        if (result.Items.length === 0) {
+            return false;
+        }
+        result.Items.forEach(item => {
+            this.iterations.push({
+                id: item.Id,
+                text: item.Name
+            });
+        });
+
+        return true;
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.vue.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.vue.html
new file mode 100644
index 00000000..cf649ac8
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/devops/connection.vue.html
@@ -0,0 +1,165 @@
+<template>
+    <div class="mt-4">
+        <form @submit.prevent="save">
+            <div class="row">
+                <div class="col">
+                    <h2>Azure DevOps connection [{{applicationName}}]</h2>
+                </div>
+            </div>
+            <div class="row">
+
+                <div class="col">
+                    <div class="card">
+                        <div class="card-header">
+                            Connection settings
+                        </div>
+                        <div class="card-body">
+                            <div v-show="hangOn" class="alert alert-blue">Attempting to connect, hang on...</div>
+                            <div v-show="showConnectError" class="alert-red alert">Failed to connect to Azure Devops using the specified settings.</div>
+                            <div class="form-group">
+                                <label>
+                                    Azure DevOps API url
+                                </label>
+                                <input type="text" class="form-control" v-model="url" autofocus="autofocus" required="required" value="https://dev.azure.com/your_organization_name" />
+                                <em class="small">Typically "https://dev.azure.com/yourOrganizationName/"</em>
+                            </div>
+                            <div class="form-group">
+                                <label>
+                                    Personal access token
+                                </label>
+                                <input type="text" class="form-control" placeholder="" v-model="personalAccessToken" required="required" />
+                                <em class="small">Required to be able to connect. Work item access is enough when creating it in Azure DevOps.</em>
+                                <a href="#">documentation</a>
+                            </div>
+                            <div class="form-group" v-show="!isConnected">
+                                <button class="btn btn-primary" @click.prevent="tryConnect()" type="button">Try connect</button>
+                            </div>
+                            <div class="alert alert-blue" v-show="!isConnected">Configure settings above and click "Try connect"</div>
+                            <fieldset v-bind:disabled="!isConnected">
+                                <div class="form-group">
+                                    <label>
+                                        Project
+                                    </label>
+                                    <select class="form-control" v-model="project" required="required" @change="onProjectChanged()">
+                                        <option v-for="option in projects" :value="option">
+                                            {{ option.text }}
+                                        </option>
+                                    </select>
+                                    <em class="small">Project that bugs should be added to.</em>
+                                </div>
+                                <div class="form-group">
+                                    <label>
+                                        Area path
+                                    </label>
+                                    <select class="form-control" v-model="areaPath">
+                                        <option v-for="option in areas" :value="option">
+                                            {{ option.text }}
+                                        </option>
+                                    </select>
+                                    <em class="small">Area that new bugs should be placed in.</em>
+                                </div>
+
+                                <div class="form-group">
+                                </div>
+                            </fieldset>
+                        </div>
+                    </div>
+                </div>
+                <div class="col">
+                    <div class="card">
+                        <div class="card-header">
+                            State synchronization
+                        </div>
+                        <div class="card-body">
+                            <fieldset v-bind:disabled="!isConnected">
+                                <p>These fields are used when synchronizing errors between Coderr and Azure DevOps. Make sure that they are correct, or the two-way synchronization wont work.</p>
+
+                                <div class="form-group">
+                                    <label>
+                                        Work item type
+                                    </label>
+                                    <select class="form-control" v-model="workItemTypeName" @change="onWorkItemTypeChanged()">
+                                        <option v-for="name in workItemTypes" :value="name">
+                                            {{ name }}
+                                        </option>
+                                    </select>
+                                    <em class="small">Which type of work item should be created for incidents?</em>
+                                </div>
+                                <fieldset v-bind:disabled="!isWorkItemTypeSelected">
+                                    <div class="form-group">
+                                        <label>
+                                            Assigned an incident
+                                        </label>
+                                        <select class="form-control" v-model="assignedStateName">
+                                            <option v-for="name in stateTypes" :value="name">
+                                                {{ name }}
+                                            </option>
+                                        </select>
+                                        <em class="small">Value used when assigning a work item.</em>
+                                    </div>
+                                    <div class="form-group">
+                                        <label>
+                                            Solving an incident
+                                        </label>
+                                        <select class="form-control" v-model="closedStateName">
+                                            <option v-for="name in stateTypes" :value="name">
+                                                {{ name }}
+                                            </option>
+                                        </select>
+                                        <em class="small">Value used when solving a work item.</em>
+                                    </div>
+                                    <div class="form-group">
+                                        <label>
+                                            Closing an incident
+                                        </label>
+                                        <select class="form-control" v-model="solvedStateName">
+                                            <option v-for="name in stateTypes" :value="name">
+                                                {{ name }}
+                                            </option>
+                                        </select>
+                                        <em class="small">State when a work item is closed directly (can be same as when solving in some process templates).</em>
+                                    </div>
+                                </fieldset>
+                            </fieldset>
+                        </div>
+                    </div><div class="card">
+                        <div class="card-header">
+                            Error escalation
+                        </div>
+                        <div class="card-body">
+                            <fieldset v-bind:disabled="!isConnected">
+                                <p>Should work items be created when Coderr escalates errors?</p>
+                                <div class="form-group">
+                                    <input type="checkbox" v-model="autoAddImportant" id="autoAddImportant" />
+                                    <label for="autoAddImportant">
+                                        Auto-add errors escalated to "important".
+                                    </label>
+                                    <br />
+                                    <em class="small">When an error is escalated, create a bug in the backlog.</em>
+                                </div>
+                                <div class="form-group">
+                                    <input type="checkbox" v-model="autoAddCritical" id="autoAddCritical" />
+                                    <label for="autoAddCritical">
+                                        Auto-add errors escalated to "critical".
+                                    </label>
+                                    <br />
+                                    <em class="small">When an error is escalated, create a bug in the backlog.</em>
+                                </div>
+                            </fieldset>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col">
+                    <input type="submit" value="Save settings" class="btn btn-primary" />
+                    <button class="btn-red btn" @click.prevent="removeIntegration" v-show="isSaved">Remove integration</button>
+                </div>
+            </div>
+        </form>
+    </div>
+</template>
+
+
+<style src="./connection.css"></style>
+<script src="./connection.ts"></script>
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/home.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/home.ts
new file mode 100644
index 00000000..7336720c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/home.ts
@@ -0,0 +1,34 @@
+import Vue from "vue";
+import { Component, Watch } from "vue-property-decorator";
+
+interface IItem {
+    id: string;
+    text: string;
+}
+
+@Component
+export default class AzureDevOpsConnectionComponent extends Vue {
+    applicationId: number = 0;
+    applicationName: string = null;
+    personalAccessToken: string = null;
+    url: string = null;
+    projectName: string = null;
+    projectId: string | null = null;
+    areaPath: string = null;
+    areaPathId: string = null;
+    projects: IItem[] = [];
+    areas: IItem[] = [];
+    iterations: IItem[] = [];
+    isConnected = false;
+    showConnectError = false;
+
+    mounted() {
+
+    }
+
+    @Watch('$route.params.applicationId')
+    onApplicationChanged(value: string, oldValue: string) {
+        this.applicationId = parseInt(value);
+    }
+
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/home.vue.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/home.vue.html
new file mode 100644
index 00000000..36cda34d
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/manage/azure/home.vue.html
@@ -0,0 +1,14 @@
+<template>
+    <div class="mt-4">
+        <div class="row">
+            <div class="col-lg-8 members">
+                <div class="card">
+                    Home
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+
+<script src="./home.ts"></script>
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/common/services/WorkItemService.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/services/WorkItemService.ts
new file mode 100644
index 00000000..90dc521a
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/common/services/WorkItemService.ts
@@ -0,0 +1,56 @@
+﻿import * as WorkItems from "@/dto/Common/WorkItems";
+import { AppRoot } from "@/services/AppRoot";
+
+export interface IWorkItem {
+    incidentId: number;
+    applicationId: number;
+    name: string;
+    url: string;
+}
+
+export interface IIntegration {
+    title: string;
+    name: string;
+}
+
+export class WorkItemService {
+    
+    createWorkItem(applicationId: number, incidentId: number) {
+        var cmd = new WorkItems.CreateWorkItem();
+        cmd.IncidentId = incidentId;
+        cmd.ApplicationId = applicationId;
+        AppRoot.Instance.apiClient.command(cmd);
+    }
+
+    async getWorkItem(incidentId: number): Promise<IWorkItem> {
+        var dto = new WorkItems.FindWorkItem();
+        dto.IncidentId = incidentId;
+        var result = await AppRoot.Instance.apiClient.query<WorkItems.FindWorkItemResult>(dto);
+        if (result == null)
+            return null;
+
+        var item = {
+            incidentId,
+            applicationId: result.ApplicationId,
+            name: result.Name,
+            url: result.Url
+        };
+
+        return item;
+    }
+
+
+    async findIntegration(applicationId: number): Promise<IIntegration> {
+        var dto = new WorkItems.FindIntegration();
+        dto.ApplicationId = applicationId;
+        var result = await AppRoot.Instance.apiClient.query<WorkItems.FindIntegrationResult>(dto);
+        if (!result.HaveIntegration) {
+            return null;
+        }
+
+        return {
+            title: result.Title,
+            name: result.Name
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/incidents/impact.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/incidents/impact.ts
new file mode 100644
index 00000000..945ce343
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/incidents/impact.ts
@@ -0,0 +1,37 @@
+import { PubSubService } from "@/services/PubSub";
+import { AppRoot } from '@/services/AppRoot';
+import { Component, Vue } from "vue-property-decorator";
+import * as dto from "@/dto/Common/Partitions"
+
+@Component
+export default class IncidentImpactComponent extends Vue {
+    solution = "";
+    partitions: dto.GetPartitionsResultItem[] = [];
+    values: dto.GetPartitionValuesResultItem[] = [];
+    incidentId: number = 0;
+    partitionId: number = 0;
+
+    mounted() {
+        this.incidentId = parseInt(this.$route.params.incidentId, 10);
+        AppRoot.Instance.incidentService.get(this.incidentId)
+            .then(incident => {
+                var query = new dto.GetPartitions();
+                query.ApplicationId = incident.ApplicationId;
+                AppRoot.Instance.apiClient.query<dto.GetPartitionsResult>(query)
+                    .then(x => {
+                        this.partitions = x.Items;
+                    });
+            });
+    }
+
+    onPartitionChanged() {
+        var query = new dto.GetPartitionValues();
+        query.IncidentId = this.incidentId;
+        query.PartitionId = this.partitionId;
+        AppRoot.Instance.apiClient.query<dto.GetPartitionValuesResult>(query)
+            .then(result => {
+                this.values = result.Items;
+            });
+
+    }
+}
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/incidents/impact.vue.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/incidents/impact.vue.html
new file mode 100644
index 00000000..47a06ba5
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/incidents/impact.vue.html
@@ -0,0 +1,39 @@
+<template>
+    <div class="CloseView">
+        <div class="row">
+            <div class="col">
+                <h2>Business impact</h2>
+                <div class="bg-white p-4">
+                    <form>
+                        <div class="form-group">
+                            <label>Select indicator</label>
+                            <br/>
+                            <select v-model.number="partitionId" @change="onPartitionChanged" class="form-control w-50">
+                                <option v-for="item in partitions" :value="item.Id">{{item.Name}}</option>
+                            </select>
+                        </div>
+                    </form>
+                    <div v-show="values.length > 0">
+                        <table class="table">
+                            <thead>
+                            <tr>
+                                <th>Value</th>
+                                <th>Last received</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            <tr v-for="item in values">
+                                <td>{{item.Value}}</td>
+                                <td>{{item.ReceivedAtUtc|ago}}</td>
+                            </tr>
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+
+<script src="./impact.ts"></script>
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.css b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.css
new file mode 100644
index 00000000..c23e79b3
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.css
@@ -0,0 +1,33 @@
+.LogsView table td {
+    font-weight: normal
+}
+
+.LogsView .log-1 {
+    color: #999999;
+}
+
+.LogsView .log-2 {
+    color: green;
+}
+
+.LogsView .log-3 {
+    color: #9932cc;
+}
+
+.LogsView .log-4 {
+    color: #9932cc;
+}
+
+.LogsView .log-5 {
+    color: #9932cc;
+}
+
+.LogsView .log-6 {
+    color: #9932cc;
+}
+
+
+.LogsView .exception {
+    border-top: 1px solid #ccc;
+    color: #333;
+}
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.ts
new file mode 100644
index 00000000..41f12278
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.ts
@@ -0,0 +1,58 @@
+import { AppRoot } from '../../../services/AppRoot';
+import * as api from "@/dto/Common/Logs";
+import { Component, Vue } from "vue-property-decorator";
+
+interface ILogEntry {
+    message: string;
+    logLevel: number;
+    exception: string;
+    timeStampUtc: Date;
+}
+
+@Component
+export default class AnalyzeIncidentLogsComponent extends Vue {
+
+    incidentId: number = 0;
+    entries: ILogEntry[] = [];
+    allEntries: ILogEntry[] = [];
+    filterText = "";
+
+    created() {
+        this.incidentId = parseInt(this.$route.params.incidentId, 10);
+
+        var q = new api.GetLogs();
+        q.IncidentId = this.incidentId;
+        AppRoot.Instance.apiClient.query<api.GetLogsResult>(q)
+            .then(result => {
+                console.log(result);
+                result.Entries.forEach(x => {
+                    if (x.Message) {
+                        this.allEntries.push({
+                            message: this.escapeHtml(x.Message).replace(/\r\n/, "<br>\r\n"),
+                            exception: this.escapeHtml(x.Exception).replace(/\r\n/, "<br>\r\n"),
+                            timeStampUtc: x.TimeStampUtc,
+                            logLevel: x.Level
+                        });
+                    }
+                });
+                this.entries = this.allEntries;
+            });
+    }
+
+    filterEntries($event: KeyboardEvent) {
+        var re = new RegExp(this.filterText, 'i');
+        this.entries = this.allEntries.filter(x => re.test(x.message) || re.test(x.exception));
+    }
+    
+    private escapeHtml(unsafe: string): string {
+        if (!unsafe) {
+            return "";
+        }
+        return unsafe
+            .replace(/&/g, "&amp;")
+            .replace(/</g, "&lt;")
+            .replace(/>/g, "&gt;")
+            .replace(/"/g, "&quot;")
+            .replace(/'/g, "&#039;");
+    }
+}
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.vue.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.vue.html
new file mode 100644
index 00000000..57a1da43
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/analyze/logs/incident-logs.vue.html
@@ -0,0 +1,47 @@
+<template>
+    <div class="LogsView">
+        <div class="card" v-show="allEntries.length == 0" style="display: none">
+            <div class="card-header">
+                Log entries
+            </div>
+            <div class="card-body">
+                <h6>No entries has been attached.</h6>
+                <p>Coderr will automatically attached the 100 most recent log entries (before the exception occurred) if you are using one of our log library integrations.</p>
+            </div>
+        </div>
+        <div class="card" v-show="allEntries.length > 0">
+            <div class="card-header">
+                <div class="float-right">
+                    <input type="text" placeholder="search.." @keyup="filterEntries" v-model="filterText" />
+                </div>
+                Log entries
+            </div>
+            <div class="card-body">
+                <table>
+                    <thead>
+                        <tr>
+                            <th style="min-width: 200px">When</th>
+                            <th>Entry</th>
+                        </tr>
+                    </thead>
+                    <tbody v-for="entry in entries">
+                        <tr :class="'log-' + entry.logLevel">
+                            <td style="vertical-align: top">{{entry.timeStampUtc|isoDate}}</td>
+                            <td>
+                                <div v-html="entry.message"></div>
+                                <div v-if="entry.exception" v-html="entry.exception" class="exception">
+                                </div>
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div class="card-footer">
+            </div>
+        </div>
+    </div>
+</template>
+
+
+<style src="./incident-logs.css"></style>
+<script src="./incident-logs.ts"></script>
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.css b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.css
new file mode 100644
index 00000000..bd1d25a0
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.css
@@ -0,0 +1,3 @@
+.members td:first-child {
+    width: 150px;
+}
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.ts
new file mode 100644
index 00000000..8537c18e
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.ts
@@ -0,0 +1,56 @@
+import { AppRoot } from '../../../../services/AppRoot';
+import * as dto from "@/dto/Core/Applications";
+import { ApplicationGroup } from "@/services/applications/ApplicationService";
+import Vue from "vue";
+import { Component, Watch } from "vue-property-decorator";
+
+
+@Component
+export default class ManageEnvironmentsComponent extends Vue {
+    groups: ApplicationGroup[] = [];
+    groupToDelete: number = -1;
+    groupToMoveAppsTo: number = -1;
+
+    mounted() {
+        this.load();
+    }
+
+    deleteGroup() {
+        var cmd = new dto.DeleteApplicationGroup();
+        cmd.GroupId = this.groupToDelete;
+        cmd.MoveAppsToGroupId = this.groupToMoveAppsTo;
+        AppRoot.Instance.apiClient.command(cmd)
+            .then(result => {
+                AppRoot.notify('Group have been deleted.');
+            });
+
+        var index = this.groups.findIndex(x => x.id === this.groupToDelete);
+        this.$delete(this.groups, index);
+        this.groupToDelete = -1;
+        this.groupToMoveAppsTo = -1;
+    }
+
+
+    private load() {
+        AppRoot.Instance.applicationService.getGroups()
+            .then(groups => {
+                this.groups = groups;
+            });
+
+    }
+
+    createGroup() {
+        AppRoot.modal({
+            contentId: "newGroupModal",
+            showFooter: true
+        }).then(result => {
+
+            // Fetch last since they modal is duplicated
+            var nodes = document.querySelectorAll('[name="newGroupName"]');
+            var value = (<HTMLInputElement>nodes[nodes.length - 1]).value;
+
+            AppRoot.Instance.applicationService.createGroup(value);
+        });
+    }
+
+}
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.vue.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.vue.html
new file mode 100644
index 00000000..dbbfcd32
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/manage/system/groups/groups.vue.html
@@ -0,0 +1,71 @@
+<template>
+    <div class="">
+        <div class="row minimal-gutters">
+            <div class="col-lg-8 environments">
+                <div class="card">
+                    <div class="card-header">
+                        <span class="float-right"><button class="btn btn-blue" @click.prevent="createGroup()">add</button></span>
+                        Application groups
+                    </div>
+                    <div class="card-body">
+                        <div class="ml-3">
+                            <ul>
+                                <li v-for="group in groups">
+                                    {{group.name}}
+                                </li>
+                            </ul>
+                        </div>
+                        <div v-if="groups.length == 0">
+                            <p><em>No groups have been specified.</em></p>
+                        </div>
+                        <hr/>
+                        <em>Groups are used to organize applications into smaller groups.</em>
+
+                    </div>
+                </div>
+            </div>
+            <div class="col-lg-4">
+                <div class="card" v-if="groups.length > 1">
+                    <div class="card-header">
+                        Delete group
+                    </div>
+                    <div class="card-body">
+                        <p><em>Will move all applications to the other group and then delete the selected one.</em></p>
+                        <form v-on:submit.prevent="deleteGroup()">
+                            <div class="form-group">
+                                <label>Group to delete</label>
+                                <select name="groupId" v-model="groupToDelete">
+                                    <option v-for="group in groups" :value="group.id">
+                                        {{group.name}}
+                                    </option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <label>Move apps to</label>
+                                <select name="groupId" v-model="groupToMoveAppsTo">
+                                    <option v-for="group in groups" :value="group.id">
+                                        {{group.name}}
+                                    </option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <button class="btn btn-red">Delete</button>
+                            </div>
+
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div id="newGroupModal" style="display:none">
+            <div class="modal-body">
+                <label>Create  new group:</label>
+                <input type="text" name="newGroupName" class="form-control" placeholder="Group name" />
+            </div>
+        </div>
+    </div>
+</template>
+
+
+<style src="./groups.css"></style>
+<script src="./groups.ts"></script>
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/next.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/next.ts
new file mode 100644
index 00000000..2d165567
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/next.ts
@@ -0,0 +1,44 @@
+import { AppRoot } from '@/services/AppRoot';
+import * as Onboarding from "@/dto/Modules/Onboarding";
+import * as App from "@/dto/Core/Applications"
+import Vue from "vue";
+import { Component } from "vue-property-decorator";
+import Prism from "prismjs";
+
+declare global {
+    interface Window { IsPremise: boolean; }
+}
+
+@Component
+export default class OnboardingNextComponent extends Vue {
+    libs: string[] = [];
+    mainFramework = '';
+    appKey = '';
+    sharedSecret = '';
+    showChat = !window.IsPremise;
+
+    created() {
+        var query = new Onboarding.GetOnboardingState();
+        AppRoot.Instance.apiClient.query<Onboarding.GetOnboardingStateResult>(query)
+            .then(result => {
+                this.libs = result.Libraries;
+                this.mainFramework = result.MainLanguage;
+            });
+
+        AppRoot.Instance.applicationService.get(-1).then(x => {
+            console.log(x);
+            this.appKey = x.appKey;
+            this.sharedSecret = x.sharedSecret;
+            Vue.nextTick(() => {
+                Prism.highlightAll();
+            });
+        });
+
+
+    }
+
+    mounted() {
+    }
+
+
+}
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/next.vue.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/next.vue.html
new file mode 100644
index 00000000..464c5777
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/next.vue.html
@@ -0,0 +1,104 @@
+<template>
+    <div class="onboarding-view">
+        <div class="row m-5">
+            <div class="col text-center">
+                <h2>Next steps</h2>
+                <p>It's time to configure your application. </p>
+            </div>
+        </div>
+        <div class="row">
+            <div class="col">
+                <div v-if="mainFramework == 'nodejs'">
+                    <h3>Node.js</h3>
+                    <p>For browsers:</p>
+
+                    <p>Using node</p>
+                    <pre><code>npm i -S coderr.client</code></pre>
+                    Then configure like this:
+
+                    <pre><code class="language-javascript">
+    import { CoderrClient, Configuration } from "coderr.client";
+
+    var config = new Configuration("https://report.coderr.io/", "{{appKey}}");
+    config.environmentName = 'production';
+    config.applicationVersion = '1.0';
+
+    var client = new CoderrClient(config);
+    client.catchDomErrors();
+</code></pre>
+
+                    <p>Examples in <a target="_blank" href="https://www.npmjs.com/package/coderr.client">npm</a>.</p>
+                </div>
+                <div v-else>
+                    <h3>.NET</h3>
+                    <p>All libraries are available in <a target="_blank" href="https://www.nuget.org/packages?q=coderr.client">nuget</a>.</p>
+                    <p>The base configuration is the same for all libraries.</p>
+                    <pre><code class="language-csharp">var url  = new Uri("https://report.coderr.io/");
+Err.Configuration.Credentials(url, "{{appKey}}", "{{sharedSecret}}");
+</code></pre>
+                    <p>Once done, you can try to report an exception:</p>
+                    <pre><code class="language-csharp">try
+{
+    throw new InvalidOperation("Some error");
+}
+catch (Exception ex)
+{
+    Err.Report(ex, new { ExampleId = 42 });
+}</code></pre>
+
+                    <div v-if="aspNetCore">
+                        <h3>ASP.NET Core MVC</h3>
+                        <p>To enable automated reporting, you need to add some additional lines in Startup.cs:</p>
+                        <pre><code class="language-csharp">
+public void ConfigureServices(IServiceCollection services)
+{
+    services.AddControllersWithViews(x =>
+    {
+        // add this line
+        x.CatchMvcExceptions();
+    });
+}
+
+// Add the loggerFactory as a parameter
+public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
+{
+    // add this line to allow Coderr to pickup ASP.NET Core logging
+    loggerFactory.AddCoderrProvider();
+
+    // finally add this somewhere 
+    app.CatchMiddlewareExceptions();
+
+    // everything else here.
+}
+</code></pre>
+                    </div>
+                </div>
+                <p v-if="showChat">If you need help, use the chat down/right to talk with our devs.</p>
+                <router-link :to="{ name: 'discover'}" class="btn btn-blue">Configuration is done</router-link>
+            </div>
+            <div class="col">
+                <h2>Customizing Coderr</h2>
+                <p>Our <a href="https://coderr.io/documentation/pages/">documentation</a> contains information of most of our features.</p>
+                <div class="alert">
+                    <h2>Prioritizing errors</h2>
+                    <p>Here is a small example how you let Coderr prioritize errors.</p>
+                    <img src="https://coderr.io/documentation/?image=/screens/features/recommendations/recommended_partition.png" />
+                    <p>To let Coderr prioritize errors, you need to add information to each error.</p>
+                    <pre><code class="language-csharp">// Example for ASP.NET Core
+Err.Configuration.AddPartition(x =>
+{
+    x.AddPartition("ServerId", Environment.MachineName);
+});
+</code></pre>
+                    <p>
+                        <a class="btn btn-blue" target="_blank" href="https://coderr.io/documentation/features/recommendations/">Read more</a>
+                    </p>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+
+
+<script src="./next.ts"></script>
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/start.css b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/start.css
new file mode 100644
index 00000000..b42bc265
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/components/onboarding/home/start.css
@@ -0,0 +1,30 @@
+.btn.btn-white {
+    background: #fff;
+}
+
+.onboarding-view hr {
+    color: #eaeaea;
+    background: #eaeaea;
+}
+.onboarding-view .selected {
+    background: #59c1d5 !important;
+    color: #333 !important;
+}
+
+    .onboarding-view .selected strong, .onboarding-view .selected p {
+        color: #333 !important;
+    }
+
+
+.onboarding-view ul {
+    list-style: none;
+}
+
+    .onboarding-view ul li::before {
+        content: "\27BD";
+        color: #59c1d5;
+        font-weight: bold;
+        display: inline-block;
+        width: 1.5em;
+        margin-left: -1.5em;
+    }
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Azure/DevOps.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Azure/DevOps.ts
new file mode 100644
index 00000000..ecc840c4
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Azure/DevOps.ts
@@ -0,0 +1,121 @@
+export class SaveSettings {
+    public static TYPE_NAME: string = 'SaveSettings';
+    public PersonalAccessToken: string;
+    public Url: string;
+    public ApplicationId: number;
+    public ProjectName: string;
+    public ProjectId: string;
+    public AreaPath: string;
+    public AreaPathId: string;
+    public AutoAddImportant: boolean;
+    public AutoAddCritical: boolean;
+    public AssignedStateName: string;
+    public ClosedStateName: string;
+    public SolvedStateName: string;
+    public WorkItemTypeName: string;
+}
+
+export class GetSettings {
+    public static TYPE_NAME: string = 'GetSettings';
+    public ApplicationId: number;
+}
+
+
+export class GetSettingsResult {
+    public PersonalAccessToken: string;
+    public Url: string;
+    public ApplicationId: number;
+    public ProjectName: string;
+    public ProjectId: string;
+    public AreaPath: string;
+    public AreaPathId: string;
+    public AutoAddImportant: boolean;
+    public AutoAddCritical: boolean;
+    public AssignedStateName: string;
+    public ClosedStateName: string;
+    public SolvedStateName: string;
+    public StateFieldName: string;
+    public WorkItemTypeName: string;
+}
+
+export class GetAreaPaths {
+    public static TYPE_NAME: string = 'GetAreaPaths';
+    public PersonalAccessToken: string;
+    public Url: string;
+    public ProjectNameOrId: string;
+}
+export class GetAreaPathsResult {
+    public Items: GetAreaPathsResultItem[];
+}
+
+export class GetAreaPathsResultItem {
+    public Path: string;
+    public Name: string;
+    public Id: string;
+}
+
+
+export class GetIterations {
+    public static TYPE_NAME: string = 'GetIterations';
+    public PersonalAccessToken: string;
+    public Url: string;
+    public ProjectNameOrId: string;
+}
+export class GetIterationPathsResult {
+    public Items: GetProjectsResultItem[];
+}
+
+export class GetIterationPathsResultItem {
+    public Name: string;
+    public Id: string;
+}
+
+
+export class GetProjects {
+    public static TYPE_NAME: string = 'GetProjects';
+    public PersonalAccessToken: string;
+    public Url: string;
+}
+
+export class GetProjectsResult {
+    public Items: GetProjectsResultItem[];
+}
+
+export class GetProjectsResultItem {
+    public Name: string;
+    public Id: string;
+}
+
+export class GetWorkItemStates {
+    public static TYPE_NAME: string = 'GetWorkItemStates';
+    public PersonalAccessToken: string;
+    public Url: string;
+    public ProjectId: string;
+    public WorkItemTypeName: string;
+}
+
+export class GetWorkItemStatesResult {
+    public Items: GetWorkItemStatesResultItem[];
+}
+
+export class GetWorkItemStatesResultItem {
+    public Name: string;
+}
+
+
+export class GetWorkItemTypes {
+    public static TYPE_NAME: string = 'GetWorkItemTypes';
+    public PersonalAccessToken: string;
+    public Url: string;
+    public ProjectNameOrId: string;
+}
+
+export class GetWorkItemTypesResult {
+    public Items: GetWorkItemTypesResultItem[];
+}
+
+export class GetWorkItemTypesResultItem {
+    public Name: string;
+    public ReferenceName: string;
+}
+
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Demo.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Demo.ts
new file mode 100644
index 00000000..ecbe0b24
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Demo.ts
@@ -0,0 +1,17 @@
+﻿export class GetDemoIncidentOptions {
+    public static TYPE_NAME: string = 'GetDemoIncidentOptions';
+}
+export class GetDemoIncidentOptionsResult {
+    public Items: GetDemoIncidentOptionsResultItem[];
+}
+export class GetDemoIncidentOptionsResultItem {
+    public Category: string;
+    public Description: string;
+    public Id: string;
+    public Title: string;
+}
+
+export class GenerateDemoIncidents {
+    public static TYPE_NAME: string = 'GenerateDemoIncidents';
+    public DemoOptionIds: string[];
+}
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Insights.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Insights.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Insights.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Insights.ts
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Logs.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Logs.ts
new file mode 100644
index 00000000..c1dc3683
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/Logs.ts
@@ -0,0 +1,23 @@
+﻿export class HasLogs {
+    public static TYPE_NAME: string = 'HasLogs';
+    public IncidentId: number;
+    public ReportId: number | null;
+}
+export class HasLogsResult {
+    public HasLogs: boolean;
+}
+
+export class GetLogs {
+    public static TYPE_NAME: string = 'GetLogs';
+    public IncidentId: number;
+    public ReportId: number | null;
+}
+export class GetLogsResult {
+    public Entries: GetLogsResultEntry[];
+}
+export class GetLogsResultEntry {
+    public Message: string;
+    public Level: number;
+    public TimeStampUtc: Date;
+    public Exception: string;
+}
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/WorkItems.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/WorkItems.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/WorkItems.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Common/WorkItems.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Premise/ActiveDirectory.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Premise/ActiveDirectory.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Premise/ActiveDirectory.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/dto/Premise/ActiveDirectory.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/e2e/protractor.conf.js b/src/Server/App/Coderr.Server.WebSite/ClientApp/e2e/protractor.conf.js
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/e2e/protractor.conf.js
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/e2e/protractor.conf.js
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/e2e/src/app.e2e-spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/e2e/src/app.e2e-spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/e2e/src/app.e2e-spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/e2e/src/app.e2e-spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/e2e/src/app.po.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/e2e/src/app.po.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/e2e/src/app.po.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/e2e/src/app.po.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/e2e/tsconfig.e2e.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/e2e/tsconfig.e2e.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/e2e/tsconfig.e2e.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/e2e/tsconfig.e2e.json
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/ngserve.cmd b/src/Server/App/Coderr.Server.WebSite/ClientApp/ngserve.cmd
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/ngserve.cmd
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/ngserve.cmd
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/package-lock.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/package-lock.json
similarity index 92%
rename from src/Server/Coderr.Server.WebSite/ClientApp/package-lock.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/package-lock.json
index 0d8a673b..1dd42f26 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/package-lock.json
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/package-lock.json
@@ -1,23 +1,23 @@
 {
-  "name": "coderr-frontend",
+  "name": "coderrangular2",
   "version": "0.0.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
-      "name": "coderr-frontend",
+      "name": "coderrangular2",
       "version": "0.0.0",
       "dependencies": {
-        "@angular/animations": "^13.3.0",
-        "@angular/common": "^13.3.0",
-        "@angular/core": "13.3.0",
-        "@angular/forms": "^13.3.0",
-        "@angular/platform-browser": "^13.3.0",
-        "@angular/platform-browser-dynamic": "^13.3.0",
-        "@angular/platform-server": "^13.3.0",
-        "@angular/router": "^13.3.0",
+        "@angular/animations": "^13.2.2",
+        "@angular/common": "^13.2.2",
+        "@angular/core": "13.2.2",
+        "@angular/forms": "^13.2.2",
+        "@angular/platform-browser": "^13.2.2",
+        "@angular/platform-browser-dynamic": "^13.2.2",
+        "@angular/platform-server": "^13.2.2",
+        "@angular/router": "^13.2.2",
         "@microsoft/signalr": "^6.0.2",
-        "@popperjs/core": "^2.11.4",
+        "@popperjs/core": "^2.11.2",
         "apexcharts": "^3.29.0",
         "bootstrap": "^4.6.1",
         "core-js": "^3.19.0",
@@ -32,11 +32,11 @@
         "zone.js": "~0.11.4"
       },
       "devDependencies": {
-        "@angular-devkit/build-angular": "^13.3.0",
-        "@angular/cli": "^13.3.0",
-        "@angular/compiler": "^13.3.0",
-        "@angular/compiler-cli": "^13.3.0",
-        "@angular/language-service": "^13.3.0",
+        "@angular-devkit/build-angular": "^13.2.3",
+        "@angular/cli": "^13.2.3",
+        "@angular/compiler": "^13.2.2",
+        "@angular/compiler-cli": "^13.2.2",
+        "@angular/language-service": "^13.2.2",
         "@types/jasmine": "~3.4.4",
         "@types/jasminewd2": "^2.0.10",
         "@types/node": "~12.11.6",
@@ -70,12 +70,12 @@
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1303.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.0.tgz",
-      "integrity": "sha512-kTcKB917ICA8j53SGo4gn+qAlzx8si+iHnOTbp5QlMr7qt/Iz07SVVI8mRlMD6c6lr7eE/fVlCLzEZ1+WCQpTA==",
+      "version": "0.1302.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1302.3.tgz",
+      "integrity": "sha512-0m8jMKrFfIqsYt33zTUwSmyekyfuS67hna08RQ6USjzWQSE3z4S8ulCUARSjM6AzdMblX+whfy56nJUpT17NSA==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "13.3.0",
+        "@angular-devkit/core": "13.2.3",
         "rxjs": "6.6.7"
       },
       "engines": {
@@ -85,15 +85,15 @@
       }
     },
     "node_modules/@angular-devkit/build-angular": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.0.tgz",
-      "integrity": "sha512-3Ji7EeqGHj7i1Jgmeo3aIEXsnfKyFeQPpl65gcYmHwj5dP4lZzLSU4rMaWWUKksccgqCUXgPI2vKePTPazmikg==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.2.3.tgz",
+      "integrity": "sha512-cZ2gRcMRgW3t1WCeP+2D/wmr2M+BR/RICAh0wL9irIdypWAzIFt3Z2+2R/HmgAAxoEkdUMIfB9AnkYmwRVgFeA==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "1.1.1",
-        "@angular-devkit/architect": "0.1303.0",
-        "@angular-devkit/build-webpack": "0.1303.0",
-        "@angular-devkit/core": "13.3.0",
+        "@angular-devkit/architect": "0.1302.3",
+        "@angular-devkit/build-webpack": "0.1302.3",
+        "@angular-devkit/core": "13.2.3",
         "@babel/core": "7.16.12",
         "@babel/generator": "7.16.8",
         "@babel/helper-annotate-as-pure": "7.16.7",
@@ -104,7 +104,7 @@
         "@babel/runtime": "7.16.7",
         "@babel/template": "7.16.7",
         "@discoveryjs/json-ext": "0.5.6",
-        "@ngtools/webpack": "13.3.0",
+        "@ngtools/webpack": "13.2.3",
         "ansi-colors": "4.1.1",
         "babel-loader": "8.2.3",
         "babel-plugin-istanbul": "6.1.1",
@@ -115,7 +115,7 @@
         "core-js": "3.20.3",
         "critters": "0.0.16",
         "css-loader": "6.5.1",
-        "esbuild-wasm": "0.14.22",
+        "esbuild-wasm": "0.14.14",
         "glob": "7.2.0",
         "https-proxy-agent": "5.0.0",
         "inquirer": "8.2.0",
@@ -123,7 +123,7 @@
         "karma-source-map-support": "1.4.0",
         "less": "4.1.2",
         "less-loader": "10.2.0",
-        "license-webpack-plugin": "4.0.2",
+        "license-webpack-plugin": "4.0.1",
         "loader-utils": "3.2.0",
         "mini-css-extract-plugin": "2.5.3",
         "minimatch": "3.0.4",
@@ -145,11 +145,11 @@
         "source-map-support": "0.5.21",
         "stylus": "0.56.0",
         "stylus-loader": "6.2.0",
-        "terser": "5.11.0",
+        "terser": "5.10.0",
         "text-table": "0.2.0",
         "tree-kill": "1.2.2",
         "tslib": "2.3.1",
-        "webpack": "5.70.0",
+        "webpack": "5.67.0",
         "webpack-dev-middleware": "5.3.0",
         "webpack-dev-server": "4.7.3",
         "webpack-merge": "5.8.0",
@@ -161,17 +161,17 @@
         "yarn": ">= 1.13.0"
       },
       "optionalDependencies": {
-        "esbuild": "0.14.22"
+        "esbuild": "0.14.14"
       },
       "peerDependencies": {
-        "@angular/compiler-cli": "^13.0.0 || ^13.3.0-rc.0",
-        "@angular/localize": "^13.0.0 || ^13.3.0-rc.0",
-        "@angular/service-worker": "^13.0.0 || ^13.3.0-rc.0",
+        "@angular/compiler-cli": "^13.0.0",
+        "@angular/localize": "^13.0.0",
+        "@angular/service-worker": "^13.0.0",
         "karma": "^6.3.0",
         "ng-packagr": "^13.0.0",
         "protractor": "^7.0.0",
         "tailwindcss": "^2.0.0 || ^3.0.0",
-        "typescript": ">=4.4.3 <4.7"
+        "typescript": ">=4.4.3 <4.6"
       },
       "peerDependenciesMeta": {
         "@angular/localize": {
@@ -206,12 +206,12 @@
       }
     },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1303.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.0.tgz",
-      "integrity": "sha512-a+Veg2oYn3RM2Kl148BReuONmD1kjbbYBnMUVi8nD6rvJPStFZkqN5s5ZkYybKeWnzMGaB3VasKR88z5XeH22A==",
+      "version": "0.1302.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1302.3.tgz",
+      "integrity": "sha512-+JYH1lWU0UOjaWYxpoR2VLsdcb6nG9Gv+M1gH+kT0r2sAKOFaHnrksbOvca3EhDoaMa2b9LSGEE0OcSHWnN+eQ==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/architect": "0.1303.0",
+        "@angular-devkit/architect": "0.1302.3",
         "rxjs": "6.6.7"
       },
       "engines": {
@@ -225,9 +225,9 @@
       }
     },
     "node_modules/@angular-devkit/core": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.0.tgz",
-      "integrity": "sha512-8YrreVbWlJVZnk5zs4vfkRItrPEtWhUcxWOBfYT/Kwu4FwJVAnNuhJAxxXOAQ2Ckd7cv30Idh/RFVLbTZ5Gs9w==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.2.3.tgz",
+      "integrity": "sha512-/47RA8qmWzeS60xSdaprIn1MiSv0Iw83t0M9/ENH7irFS5vMAq62NCcwiWXH59pZmvvLbF+7xy/RgYUZLr4nHQ==",
       "dev": true,
       "dependencies": {
         "ajv": "8.9.0",
@@ -252,12 +252,12 @@
       }
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.0.tgz",
-      "integrity": "sha512-hq7tqnB3uVT/iDgqWWZ4kvnijeAcgd4cfLzZiCPaYn1nuhZf0tWsho6exhJ/odMZHvVp7w8OibqWiUKxNY9zHA==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.2.3.tgz",
+      "integrity": "sha512-+dyC4iKV0huvpjiuz4uyjLNK3FsCIp/Ghv5lXvhG6yok/dCAubsJItJOxi6G16aVCzG/E9zbsDfm9fNMyVOkgQ==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "13.3.0",
+        "@angular-devkit/core": "13.2.3",
         "jsonc-parser": "3.0.0",
         "magic-string": "0.25.7",
         "ora": "5.4.1",
@@ -270,9 +270,9 @@
       }
     },
     "node_modules/@angular/animations": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.3.0.tgz",
-      "integrity": "sha512-q7hkImhHCv0QdriR8HOFhsAW05QDmvapcHrBv3y862LUTR5e90/+81RYuwFuKX1lk/sa7LiHlHHWC7oCspzr2Q==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.2.2.tgz",
+      "integrity": "sha512-qX8LAMuCJaueHBVyuwKtqunx96G0Dr26k7y5Z03VTcscYst4Ib4V2d4i5dwn3HS82DehFdO86cm3Hi2PqE/qww==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -280,20 +280,20 @@
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/core": "13.3.0"
+        "@angular/core": "13.2.2"
       }
     },
     "node_modules/@angular/cli": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.0.tgz",
-      "integrity": "sha512-2qCKP/QsyxrJnpd3g4P/iTQ4TjI04N8r+bG5YLLfudoMDsQ/Ti4ogdI7PBeG2IMbRylZW9XLjHraWG42+Y9tWw==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.2.3.tgz",
+      "integrity": "sha512-QsakxpdQuO67u4fQNuOASqabYUO9gJb/5CpUGpWbuBzru0/9CMEF1CtXoF4EoDiwa5sJMirz3SJMKhtzFlv1cQ==",
       "dev": true,
       "hasInstallScript": true,
       "dependencies": {
-        "@angular-devkit/architect": "0.1303.0",
-        "@angular-devkit/core": "13.3.0",
-        "@angular-devkit/schematics": "13.3.0",
-        "@schematics/angular": "13.3.0",
+        "@angular-devkit/architect": "0.1302.3",
+        "@angular-devkit/core": "13.2.3",
+        "@angular-devkit/schematics": "13.2.3",
+        "@schematics/angular": "13.2.3",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.1",
         "debug": "4.3.3",
@@ -320,9 +320,9 @@
       }
     },
     "node_modules/@angular/common": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.0.tgz",
-      "integrity": "sha512-yl09TWBmz++Z3MKjzZIwU2wZHiedCn1DjGILjjNXegHFOfINRHiqLhHca4kGWFcTsdvcuEhd9Hk9JATqi45rjg==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.2.2.tgz",
+      "integrity": "sha512-56C/bheNLKtTCyQUZCiYtKbBIZN9jj6rjFILPtJCGls3cBCxp7t9tIdoLiQG/wVQRmaxdj1ioLT+sCWz7mLtQw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -330,14 +330,14 @@
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/core": "13.3.0",
+        "@angular/core": "13.2.2",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
     "node_modules/@angular/compiler": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.0.tgz",
-      "integrity": "sha512-oeUvaBOVpey2G1I5fWZa3JcyRuBQ3dAeRay5UtQhu1Xw2L8jd2tYkbZb1XOgP9J1/Ma4LO62pjSaOpR2EtO5ww==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.2.2.tgz",
+      "integrity": "sha512-XXQtB0/e7pR2LPrHmpEiTU72SX4xxHGy91vYWIj1JCjSn0fYF7vtHzSJPXDvkbnkNow/PXXzJJYaU1ctdMZPcA==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -346,16 +346,16 @@
       }
     },
     "node_modules/@angular/compiler-cli": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.0.tgz",
-      "integrity": "sha512-f9m55YejHJNIDTwHyGwf3wn5AvZepDfdAgeJP0Re4XmO1mf/Z9Ob5mJP5Q1yLNhqk0DlURWsZ1CbJqufPXMTbQ==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.2.2.tgz",
+      "integrity": "sha512-tuOIcEEKVIht+mKrj0rtX3I8gc+ByPjzpCZhFQRggxM6xbKJIToO1zERbEGKrZ+sUJ6BB5KLvscDy+Pddy3b8w==",
       "dev": true,
       "dependencies": {
-        "@babel/core": "^7.17.2",
+        "@babel/core": "^7.8.6",
         "chokidar": "^3.0.0",
         "convert-source-map": "^1.5.1",
         "dependency-graph": "^0.11.0",
-        "magic-string": "^0.26.0",
+        "magic-string": "^0.25.0",
         "reflect-metadata": "^0.1.2",
         "semver": "^7.0.0",
         "sourcemap-codec": "^1.4.8",
@@ -371,100 +371,14 @@
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "13.3.0",
-        "typescript": ">=4.4.2 <4.7"
-      }
-    },
-    "node_modules/@angular/compiler-cli/node_modules/@ampproject/remapping": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
-      "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@angular/compiler-cli/node_modules/@babel/core": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz",
-      "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==",
-      "dev": true,
-      "dependencies": {
-        "@ampproject/remapping": "^2.1.0",
-        "@babel/code-frame": "^7.16.7",
-        "@babel/generator": "^7.17.7",
-        "@babel/helper-compilation-targets": "^7.17.7",
-        "@babel/helper-module-transforms": "^7.17.7",
-        "@babel/helpers": "^7.17.8",
-        "@babel/parser": "^7.17.8",
-        "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
-        "@babel/types": "^7.17.0",
-        "convert-source-map": "^1.7.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.1.2",
-        "semver": "^6.3.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
-      }
-    },
-    "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/@angular/compiler-cli/node_modules/@babel/generator": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz",
-      "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.17.0",
-        "jsesc": "^2.5.1",
-        "source-map": "^0.5.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@angular/compiler-cli/node_modules/magic-string": {
-      "version": "0.26.1",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz",
-      "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==",
-      "dev": true,
-      "dependencies": {
-        "sourcemap-codec": "^1.4.8"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@angular/compiler-cli/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
+        "@angular/compiler": "13.2.2",
+        "typescript": ">=4.4.2 <4.6"
       }
     },
     "node_modules/@angular/core": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.0.tgz",
-      "integrity": "sha512-ZnuIMEK8YFBtthNqrxapYolMp6qRy4Yp/VG+M11YNiuBp/BoYYDjTaknwO8vu36Cn6372zWjcibsknkZMjdBkg==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.2.2.tgz",
+      "integrity": "sha512-zpctw0BxIVOsRFnckchK15SD1L8tzhf5GzwIDaM6+VylDQj1uYkm8mvAjJTQZyUuApomoFet2Rfj7XQPV+cNSQ==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -477,9 +391,9 @@
       }
     },
     "node_modules/@angular/forms": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.0.tgz",
-      "integrity": "sha512-eBySo+B3/AV+p3SmD15Tg41N+SoxYPyqGnlCTR+jSrFis5ZZNWf0kKpIKhJhW2taRq6K+1o3KcA0W9bnphrZDQ==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.2.2.tgz",
+      "integrity": "sha512-T61W4Ay9X9qhxjc6lLqpNFeHrGKwg2mqdsZ3zIm/c7oKo37mgl9TB5kkrtnS+205r3N2hF4ICnGFZ4a/egUP/g==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -487,25 +401,25 @@
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "13.3.0",
-        "@angular/core": "13.3.0",
-        "@angular/platform-browser": "13.3.0",
+        "@angular/common": "13.2.2",
+        "@angular/core": "13.2.2",
+        "@angular/platform-browser": "13.2.2",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
     "node_modules/@angular/language-service": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-13.3.0.tgz",
-      "integrity": "sha512-XzfamYk39h+ASxb2ycZKfn9nITmns+jTV+DPrFAY1BoW+4x3tAoqt3/CkdJn8UaCePswKXckDQ6y9i109TfddQ==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-13.2.2.tgz",
+      "integrity": "sha512-2P5+wRsbHgpI2rVeFwnsLWxyntUiw8kG9Tqh5BkVDqtQovbYtzFiaMkf5TFz/g938JBBgeRQzvXr1kQhEidAWQ==",
       "dev": true,
       "engines": {
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       }
     },
     "node_modules/@angular/platform-browser": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.0.tgz",
-      "integrity": "sha512-OgNVgRtqTPxzItZbJVe4NmSYKDLEKQYjGulStWl4ycQTsOKteF+sJi8gU5BvEU/KQNZItYnIQxMqTsFyS7xlRQ==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.2.2.tgz",
+      "integrity": "sha512-M7gWC8fFCPc/CRcHCzqe/j7WzwAUMeKt9vwlK633XnesHBoqZdYgbb3YHHc6WPVU0YI09Nb/Hm5sezEKmjUmPg==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -513,9 +427,9 @@
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/animations": "13.3.0",
-        "@angular/common": "13.3.0",
-        "@angular/core": "13.3.0"
+        "@angular/animations": "13.2.2",
+        "@angular/common": "13.2.2",
+        "@angular/core": "13.2.2"
       },
       "peerDependenciesMeta": {
         "@angular/animations": {
@@ -524,9 +438,9 @@
       }
     },
     "node_modules/@angular/platform-browser-dynamic": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.0.tgz",
-      "integrity": "sha512-7/r79Yn8SDH8t0/fJ26PmScm/S1JZ9hxjC8IoROdyC5xBrSGrp946mIKE/4/813zmF8uPj2lveV9p/XiKTbxSw==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.2.2.tgz",
+      "integrity": "sha512-lj6xwat0StLp+ROFqXU62upwHQhlxaQi0djhrS+DGKUK0Xu9bkBeaSCfBFgS78jPm1SwL8Xztu9/vuDAHLRrqw==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -534,16 +448,16 @@
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "13.3.0",
-        "@angular/compiler": "13.3.0",
-        "@angular/core": "13.3.0",
-        "@angular/platform-browser": "13.3.0"
+        "@angular/common": "13.2.2",
+        "@angular/compiler": "13.2.2",
+        "@angular/core": "13.2.2",
+        "@angular/platform-browser": "13.2.2"
       }
     },
     "node_modules/@angular/platform-server": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-13.3.0.tgz",
-      "integrity": "sha512-kfKyFi77f4MfcVfsv2O9icYz8FdqTjFdU1C8YDSC0OTgy4/QmwQ3lboZwcsvMRfF/aAb3liiFhPvNAjC2CYSEw==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-13.2.2.tgz",
+      "integrity": "sha512-v17/E9hWY5/MgUjk+E+aNUNZ/wmhHb08RyeKvvUKhx8Xb24hRiMdjA9yMkt1UsjOGJUIeZ8s5nn6xRiRc3t+9A==",
       "dependencies": {
         "domino": "^2.1.2",
         "tslib": "^2.3.0",
@@ -553,18 +467,18 @@
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/animations": "13.3.0",
-        "@angular/common": "13.3.0",
-        "@angular/compiler": "13.3.0",
-        "@angular/core": "13.3.0",
-        "@angular/platform-browser": "13.3.0",
-        "@angular/platform-browser-dynamic": "13.3.0"
+        "@angular/animations": "13.2.2",
+        "@angular/common": "13.2.2",
+        "@angular/compiler": "13.2.2",
+        "@angular/core": "13.2.2",
+        "@angular/platform-browser": "13.2.2",
+        "@angular/platform-browser-dynamic": "13.2.2"
       }
     },
     "node_modules/@angular/router": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.0.tgz",
-      "integrity": "sha512-Kz657mtycup+s9emRH66etkBobAF26h3UDXE9pnjUM6MuVTA38P31WyTWKyWJVk8Oruxm/hTHZZBfI88o9/1sA==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.2.2.tgz",
+      "integrity": "sha512-dt2b9/kGJAkmOqUmUD3aKlp4pGpdqLwB0zmhUYF3ktNEcQaPf4ZjWT/4jhy09gFL+TKOHG5OQW9GxBbhWI4bSg==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -572,9 +486,9 @@
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "@angular/common": "13.3.0",
-        "@angular/core": "13.3.0",
-        "@angular/platform-browser": "13.3.0",
+        "@angular/common": "13.2.2",
+        "@angular/core": "13.2.2",
+        "@angular/platform-browser": "13.2.2",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -597,9 +511,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
-      "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
+      "version": "7.17.0",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz",
+      "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -702,12 +616,12 @@
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
-      "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz",
+      "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.17.7",
+        "@babel/compat-data": "^7.16.4",
         "@babel/helper-validator-option": "^7.16.7",
         "browserslist": "^4.17.5",
         "semver": "^6.3.0"
@@ -729,9 +643,9 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.17.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz",
-      "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==",
+      "version": "7.17.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz",
+      "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.16.7",
@@ -856,12 +770,12 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
-      "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz",
+      "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -880,19 +794,19 @@
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
-      "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz",
+      "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==",
       "dev": true,
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.16.7",
         "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-simple-access": "^7.16.7",
         "@babel/helper-split-export-declaration": "^7.16.7",
         "@babel/helper-validator-identifier": "^7.16.7",
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
-        "@babel/types": "^7.17.0"
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -950,12 +864,12 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
-      "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz",
+      "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1019,13 +933,13 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz",
-      "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==",
+      "version": "7.17.2",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz",
+      "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==",
       "dev": true,
       "dependencies": {
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
+        "@babel/traverse": "^7.17.0",
         "@babel/types": "^7.17.0"
       },
       "engines": {
@@ -1047,9 +961,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz",
-      "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==",
+      "version": "7.17.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz",
+      "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -1124,12 +1038,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-class-static-block": {
-      "version": "7.17.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz",
-      "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz",
+      "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.17.6",
+        "@babel/helper-create-class-features-plugin": "^7.16.7",
         "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-class-static-block": "^7.14.5"
       },
@@ -1615,9 +1529,9 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz",
-      "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==",
+      "version": "7.17.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz",
+      "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==",
       "dev": true,
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.16.7"
@@ -1756,14 +1670,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz",
-      "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz",
+      "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.17.7",
+        "@babel/helper-module-transforms": "^7.16.7",
         "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-simple-access": "^7.16.7",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       },
       "engines": {
@@ -1774,13 +1688,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz",
-      "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz",
+      "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-hoist-variables": "^7.16.7",
-        "@babel/helper-module-transforms": "^7.17.7",
+        "@babel/helper-module-transforms": "^7.16.7",
         "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/helper-validator-identifier": "^7.16.7",
         "babel-plugin-dynamic-import-node": "^2.3.3"
@@ -2211,9 +2125,9 @@
       }
     },
     "node_modules/@babel/traverse/node_modules/@babel/generator": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz",
-      "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==",
+      "version": "7.17.3",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
+      "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
       "dev": true,
       "dependencies": {
         "@babel/types": "^7.17.0",
@@ -2246,19 +2160,10 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@colors/colors": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
-      "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.1.90"
-      }
-    },
     "node_modules/@csstools/postcss-progressive-custom-properties": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz",
-      "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.1.0.tgz",
+      "integrity": "sha512-DO76V3295AqhjJZvgeaDP5GAGAat4g6wYfF8X+1n+76MpJat8ffY5bCJ9eSUqFY71nImxXgaDTRYJcRnA9oo7g==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0"
@@ -2280,9 +2185,9 @@
       }
     },
     "node_modules/@gar/promisify": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
-      "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz",
+      "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==",
       "dev": true
     },
     "node_modules/@istanbuljs/load-nyc-config": {
@@ -2319,26 +2224,10 @@
         "node": ">=6.0.0"
       }
     },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.4.11",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
-      "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
-      "dev": true
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
-      "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
-      }
-    },
     "node_modules/@microsoft/signalr": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-6.0.3.tgz",
-      "integrity": "sha512-wWGVC2xi8OxNjyir8iQWuyxWHy3Dkakk2Q3VreCE7pDzFAgZ4pId6abJlRPMVIQxkUvUGc8knMW5l3sv2bJ/yw==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-6.0.2.tgz",
+      "integrity": "sha512-OYSRqvOyJWMA9cRvbOIKG0f5wE9xRiayQvkDTQ8gru3WT3WevHk8KGsBUV3x2NmizTSq7gSShQr/l9GkdT/e8g==",
       "dependencies": {
         "abort-controller": "^3.0.0",
         "eventsource": "^1.0.7",
@@ -2348,9 +2237,9 @@
       }
     },
     "node_modules/@ngtools/webpack": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.0.tgz",
-      "integrity": "sha512-QbTQWXK2WzYU+aKKVDG0ya7WYT+6rNAUXVt5ov9Nz1SGgDeozpiOx8ZqPWUvnToTY8EoodwWFGCVtkLHXUR+wA==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.3.tgz",
+      "integrity": "sha512-wooUZiV92QyoeFxkhqIwH/cfiAAAn+l8fEEuaaEIfJtpjpbShvvlboEVsqb28soeGiFJfLcmsZM3mUFgsG4QBQ==",
       "dev": true,
       "engines": {
         "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
@@ -2359,7 +2248,7 @@
       },
       "peerDependencies": {
         "@angular/compiler-cli": "^13.0.0",
-        "typescript": ">=4.4.3 <4.7",
+        "typescript": ">=4.4.3 <4.6",
         "webpack": "^5.30.0"
       }
     },
@@ -2496,22 +2385,22 @@
       }
     },
     "node_modules/@popperjs/core": {
-      "version": "2.11.4",
-      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz",
-      "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==",
+      "version": "2.11.2",
+      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz",
+      "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==",
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/popperjs"
       }
     },
     "node_modules/@schematics/angular": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.0.tgz",
-      "integrity": "sha512-WND6DXWf0ZFefqlC2hUm1FzHDonRfGpDEPWVhVulhYkB7IUUaXuCz8K41HAScyJ3bxUngs2Lx9+4omikc05fxA==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.2.3.tgz",
+      "integrity": "sha512-jloooGC7eco9AKxlIMMqFRptJYzZ0jNRBStWOp2dCISg6rmOKqpxbsHLtYFQIT1PnlomSxtKDAgYGQMDi9zhXw==",
       "dev": true,
       "dependencies": {
-        "@angular-devkit/core": "13.3.0",
-        "@angular-devkit/schematics": "13.3.0",
+        "@angular-devkit/core": "13.2.3",
+        "@angular-devkit/schematics": "13.2.3",
         "jsonc-parser": "3.0.0"
       },
       "engines": {
@@ -2615,9 +2504,9 @@
       }
     },
     "node_modules/@types/estree": {
-      "version": "0.0.51",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
-      "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+      "version": "0.0.50",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
+      "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
       "dev": true
     },
     "node_modules/@types/express": {
@@ -2668,9 +2557,9 @@
       }
     },
     "node_modules/@types/json-schema": {
-      "version": "7.0.11",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
-      "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+      "version": "7.0.9",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+      "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
       "dev": true
     },
     "node_modules/@types/mime": {
@@ -2750,9 +2639,9 @@
       }
     },
     "node_modules/@types/ws": {
-      "version": "8.5.3",
-      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz",
-      "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==",
+      "version": "8.2.2",
+      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz",
+      "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==",
       "dev": true,
       "dependencies": {
         "@types/node": "*"
@@ -2959,9 +2848,10 @@
       }
     },
     "node_modules/acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "version": "8.7.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+      "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+      "dev": true,
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -2969,6 +2859,15 @@
         "node": ">=0.4.0"
       }
     },
+    "node_modules/acorn-import-assertions": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+      "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
+      "dev": true,
+      "peerDependencies": {
+        "acorn": "^8"
+      }
+    },
     "node_modules/adjust-sourcemap-loader": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz",
@@ -3018,9 +2917,9 @@
       }
     },
     "node_modules/agentkeepalive": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
-      "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz",
+      "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==",
       "dev": true,
       "dependencies": {
         "debug": "^4.1.0",
@@ -3160,9 +3059,9 @@
       }
     },
     "node_modules/apexcharts": {
-      "version": "3.34.0",
-      "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.34.0.tgz",
-      "integrity": "sha512-0HMwkTRm4lwuM4TZ+BjFynXuIRQnCG8E36k2r0JoxEfh61rY6OmRa6iFHlTQiyILpemPyTHxuPvK4wkR8RKc9A==",
+      "version": "3.33.1",
+      "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.33.1.tgz",
+      "integrity": "sha512-5aVzrgJefd8EH4w7oRmuOhA3+cxJxQg27cYg3ANVGvPCOB4AY3mVVNtFHRFaIq7bv8ws4GRaA9MWfzoWQw3MPQ==",
       "dependencies": {
         "svg.draggable.js": "^2.2.2",
         "svg.easing.js": "^2.0.0",
@@ -3331,24 +3230,14 @@
       }
     },
     "node_modules/autoprefixer": {
-      "version": "10.4.4",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz",
-      "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==",
+      "version": "10.4.2",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
+      "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
       "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/autoprefixer"
-        }
-      ],
       "dependencies": {
-        "browserslist": "^4.20.2",
-        "caniuse-lite": "^1.0.30001317",
-        "fraction.js": "^4.2.0",
+        "browserslist": "^4.19.1",
+        "caniuse-lite": "^1.0.30001297",
+        "fraction.js": "^4.1.2",
         "normalize-range": "^0.1.2",
         "picocolors": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
@@ -3359,6 +3248,10 @@
       "engines": {
         "node": "^10 || ^12 || >=14"
       },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
       "peerDependencies": {
         "postcss": "^8.1.0"
       }
@@ -3599,20 +3492,20 @@
       }
     },
     "node_modules/body-parser": {
-      "version": "1.19.2",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz",
-      "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==",
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
+      "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
       "dev": true,
       "dependencies": {
-        "bytes": "3.1.2",
+        "bytes": "3.1.1",
         "content-type": "~1.0.4",
         "debug": "2.6.9",
         "depd": "~1.1.2",
         "http-errors": "1.8.1",
         "iconv-lite": "0.4.24",
         "on-finished": "~2.3.0",
-        "qs": "6.9.7",
-        "raw-body": "2.4.3",
+        "qs": "6.9.6",
+        "raw-body": "2.4.2",
         "type-is": "~1.6.18"
       },
       "engines": {
@@ -3690,25 +3583,15 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.20.2",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
-      "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
+      "version": "4.19.1",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
+      "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
       "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        }
-      ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001317",
-        "electron-to-chromium": "^1.4.84",
+        "caniuse-lite": "^1.0.30001286",
+        "electron-to-chromium": "^1.4.17",
         "escalade": "^3.1.1",
-        "node-releases": "^2.0.2",
+        "node-releases": "^2.0.1",
         "picocolors": "^1.0.0"
       },
       "bin": {
@@ -3716,6 +3599,10 @@
       },
       "engines": {
         "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/browserslist"
       }
     },
     "node_modules/browserstack": {
@@ -3813,9 +3700,9 @@
       "dev": true
     },
     "node_modules/bytes": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
+      "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==",
       "dev": true,
       "engines": {
         "node": ">= 0.8"
@@ -3882,20 +3769,14 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001322",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz",
-      "integrity": "sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==",
+      "version": "1.0.30001312",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz",
+      "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==",
       "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        }
-      ]
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/browserslist"
+      }
     },
     "node_modules/caseless": {
       "version": "0.12.0",
@@ -4437,9 +4318,9 @@
       }
     },
     "node_modules/core-js": {
-      "version": "3.21.1",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz",
-      "integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==",
+      "version": "3.21.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz",
+      "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==",
       "hasInstallScript": true,
       "funding": {
         "type": "opencollective",
@@ -4447,9 +4328,9 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.21.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz",
-      "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==",
+      "version": "3.21.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz",
+      "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.19.1",
@@ -4711,14 +4592,14 @@
       }
     },
     "node_modules/css-select": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
-      "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz",
+      "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==",
       "dev": true,
       "dependencies": {
         "boolbase": "^1.0.0",
-        "css-what": "^6.0.1",
-        "domhandler": "^4.3.1",
+        "css-what": "^5.1.0",
+        "domhandler": "^4.3.0",
         "domutils": "^2.8.0",
         "nth-check": "^2.0.1"
       },
@@ -4737,9 +4618,9 @@
       }
     },
     "node_modules/css-what": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.0.1.tgz",
-      "integrity": "sha512-z93ZGFLNc6yaoXAmVhqoSIb+BduplteCt1fepvwhBUQK6MNE4g6fgjpuZKJKp0esUe+vXWlIkwZZjNWoOKw0ZA==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
+      "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
       "dev": true,
       "engines": {
         "node": ">= 6"
@@ -4817,9 +4698,9 @@
       }
     },
     "node_modules/date-format": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz",
-      "integrity": "sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz",
+      "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==",
       "dev": true,
       "engines": {
         "node": ">=4.0"
@@ -5126,9 +5007,9 @@
       ]
     },
     "node_modules/domhandler": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
-      "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
+      "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
       "dev": true,
       "dependencies": {
         "domelementtype": "^2.2.0"
@@ -5176,9 +5057,9 @@
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.99",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.99.tgz",
-      "integrity": "sha512-YXMzbvlo6pW12KWw0bj6cIGCJi1Moy8PLCuuzgRzg6WYIcHILK3szU+HHnHFx2b373qRv+cfmHhbmRbatyAbPA==",
+      "version": "1.4.71",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz",
+      "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==",
       "dev": true
     },
     "node_modules/emoji-regex": {
@@ -5227,9 +5108,9 @@
       }
     },
     "node_modules/engine.io": {
-      "version": "6.1.3",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz",
-      "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz",
+      "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==",
       "dev": true,
       "dependencies": {
         "@types/cookie": "^0.4.1",
@@ -5240,7 +5121,7 @@
         "cookie": "~0.4.1",
         "cors": "~2.8.5",
         "debug": "~4.3.1",
-        "engine.io-parser": "~5.0.3",
+        "engine.io-parser": "~5.0.0",
         "ws": "~8.2.3"
       },
       "engines": {
@@ -5281,9 +5162,9 @@
       }
     },
     "node_modules/enhanced-resolve": {
-      "version": "5.9.2",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz",
-      "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==",
+      "version": "5.9.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.0.tgz",
+      "integrity": "sha512-weDYmzbBygL7HzGGS26M3hGQx68vehdEg6VUmqSOaFzXExFqlnKuSvsEJCVGQHScS8CQMbrAqftT+AzzHNt/YA==",
       "dev": true,
       "dependencies": {
         "graceful-fs": "^4.2.4",
@@ -5367,44 +5248,40 @@
       }
     },
     "node_modules/esbuild": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz",
-      "integrity": "sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.14.tgz",
+      "integrity": "sha512-aiK4ddv+uui0k52OqSHu4xxu+SzOim7Rlz4i25pMEiC8rlnGU0HJ9r+ZMfdWL5bzifg+nhnn7x4NSWTeehYblg==",
       "dev": true,
       "hasInstallScript": true,
       "optional": true,
       "bin": {
         "esbuild": "bin/esbuild"
       },
-      "engines": {
-        "node": ">=12"
-      },
       "optionalDependencies": {
-        "esbuild-android-arm64": "0.14.22",
-        "esbuild-darwin-64": "0.14.22",
-        "esbuild-darwin-arm64": "0.14.22",
-        "esbuild-freebsd-64": "0.14.22",
-        "esbuild-freebsd-arm64": "0.14.22",
-        "esbuild-linux-32": "0.14.22",
-        "esbuild-linux-64": "0.14.22",
-        "esbuild-linux-arm": "0.14.22",
-        "esbuild-linux-arm64": "0.14.22",
-        "esbuild-linux-mips64le": "0.14.22",
-        "esbuild-linux-ppc64le": "0.14.22",
-        "esbuild-linux-riscv64": "0.14.22",
-        "esbuild-linux-s390x": "0.14.22",
-        "esbuild-netbsd-64": "0.14.22",
-        "esbuild-openbsd-64": "0.14.22",
-        "esbuild-sunos-64": "0.14.22",
-        "esbuild-windows-32": "0.14.22",
-        "esbuild-windows-64": "0.14.22",
-        "esbuild-windows-arm64": "0.14.22"
+        "esbuild-android-arm64": "0.14.14",
+        "esbuild-darwin-64": "0.14.14",
+        "esbuild-darwin-arm64": "0.14.14",
+        "esbuild-freebsd-64": "0.14.14",
+        "esbuild-freebsd-arm64": "0.14.14",
+        "esbuild-linux-32": "0.14.14",
+        "esbuild-linux-64": "0.14.14",
+        "esbuild-linux-arm": "0.14.14",
+        "esbuild-linux-arm64": "0.14.14",
+        "esbuild-linux-mips64le": "0.14.14",
+        "esbuild-linux-ppc64le": "0.14.14",
+        "esbuild-linux-s390x": "0.14.14",
+        "esbuild-netbsd-64": "0.14.14",
+        "esbuild-openbsd-64": "0.14.14",
+        "esbuild-sunos-64": "0.14.14",
+        "esbuild-windows-32": "0.14.14",
+        "esbuild-windows-64": "0.14.14",
+        "esbuild-windows-arm64": "0.14.14"
       }
     },
     "node_modules/esbuild-android-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.22.tgz",
-      "integrity": "sha512-k1Uu4uC4UOFgrnTj2zuj75EswFSEBK+H6lT70/DdS4mTAOfs2ECv2I9ZYvr3w0WL0T4YItzJdK7fPNxcPw6YmQ==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.14.tgz",
+      "integrity": "sha512-be/Uw6DdpQiPfula1J4bdmA+wtZ6T3BRCZsDMFB5X+k0Gp8TIh9UvmAcqvKNnbRAafSaXG3jPCeXxDKqnc8hFQ==",
       "cpu": [
         "arm64"
       ],
@@ -5412,15 +5289,12 @@
       "optional": true,
       "os": [
         "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-darwin-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz",
-      "integrity": "sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.14.tgz",
+      "integrity": "sha512-BEexYmjWafcISK8cT6O98E3TfcLuZL8DKuubry6G54n2+bD4GkoRD6HYUOnCkfl2p7jodA+s4369IjSFSWjtHg==",
       "cpu": [
         "x64"
       ],
@@ -5428,15 +5302,12 @@
       "optional": true,
       "os": [
         "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-darwin-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.22.tgz",
-      "integrity": "sha512-YAt9Tj3SkIUkswuzHxkaNlT9+sg0xvzDvE75LlBo4DI++ogSgSmKNR6B4eUhU5EUUepVXcXdRIdqMq9ppeRqfw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.14.tgz",
+      "integrity": "sha512-tnBKm41pDOB1GtZ8q/w26gZlLLRzVmP8fdsduYjvM+yFD7E2DLG4KbPAqFMWm4Md9B+DitBglP57FY7AznxbTg==",
       "cpu": [
         "arm64"
       ],
@@ -5444,15 +5315,12 @@
       "optional": true,
       "os": [
         "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-freebsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.22.tgz",
-      "integrity": "sha512-ek1HUv7fkXMy87Qm2G4IRohN+Qux4IcnrDBPZGXNN33KAL0pEJJzdTv0hB/42+DCYWylSrSKxk3KUXfqXOoH4A==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.14.tgz",
+      "integrity": "sha512-Q9Rx6sgArOHalQtNwAaIzJ6dnQ8A+I7f/RsQsdkS3JrdzmnlFo8JEVofTmwVQLoIop7OKUqIVOGP4PoQcwfVMA==",
       "cpu": [
         "x64"
       ],
@@ -5460,15 +5328,12 @@
       "optional": true,
       "os": [
         "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-freebsd-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.22.tgz",
-      "integrity": "sha512-zPh9SzjRvr9FwsouNYTqgqFlsMIW07O8mNXulGeQx6O5ApgGUBZBgtzSlBQXkHi18WjrosYfsvp5nzOKiWzkjQ==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.14.tgz",
+      "integrity": "sha512-TJvq0OpLM7BkTczlyPIphcvnwrQwQDG1HqxzoYePWn26SMUAlt6wrLnEvxdbXAvNvDLVzG83kA+JimjK7aRNBA==",
       "cpu": [
         "arm64"
       ],
@@ -5476,15 +5341,12 @@
       "optional": true,
       "os": [
         "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-linux-32": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.22.tgz",
-      "integrity": "sha512-SnpveoE4nzjb9t2hqCIzzTWBM0RzcCINDMBB67H6OXIuDa4KqFqaIgmTchNA9pJKOVLVIKd5FYxNiJStli21qg==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.14.tgz",
+      "integrity": "sha512-h/CrK9Baimt5VRbu8gqibWV7e1P9l+mkanQgyOgv0Ng3jHT1NVFC9e6rb1zbDdaJVmuhWX5xVliUA5bDDCcJeg==",
       "cpu": [
         "ia32"
       ],
@@ -5492,15 +5354,12 @@
       "optional": true,
       "os": [
         "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-linux-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.22.tgz",
-      "integrity": "sha512-Zcl9Wg7gKhOWWNqAjygyqzB+fJa19glgl2JG7GtuxHyL1uEnWlpSMytTLMqtfbmRykIHdab797IOZeKwk5g0zg==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.14.tgz",
+      "integrity": "sha512-IC+wAiIg/egp5OhQp4W44D9PcBOH1b621iRn1OXmlLzij9a/6BGr9NMIL4CRwz4j2kp3WNZu5sT473tYdynOuQ==",
       "cpu": [
         "x64"
       ],
@@ -5508,15 +5367,12 @@
       "optional": true,
       "os": [
         "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-linux-arm": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.22.tgz",
-      "integrity": "sha512-soPDdbpt/C0XvOOK45p4EFt8HbH5g+0uHs5nUKjHVExfgR7du734kEkXR/mE5zmjrlymk5AA79I0VIvj90WZ4g==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.14.tgz",
+      "integrity": "sha512-gxpOaHOPwp7zSmcKYsHrtxabScMqaTzfSQioAMUaB047YiMuDBzqVcKBG8OuESrYkGrL9DDljXr/mQNg7pbdaQ==",
       "cpu": [
         "arm"
       ],
@@ -5524,15 +5380,12 @@
       "optional": true,
       "os": [
         "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-linux-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.22.tgz",
-      "integrity": "sha512-8q/FRBJtV5IHnQChO3LHh/Jf7KLrxJ/RCTGdBvlVZhBde+dk3/qS9fFsUy+rs3dEi49aAsyVitTwlKw1SUFm+A==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.14.tgz",
+      "integrity": "sha512-6QVul3RI4M5/VxVIRF/I5F+7BaxzR3DfNGoqEVSCZqUbgzHExPn+LXr5ly1C7af2Kw4AHpo+wDqx8A4ziP9avw==",
       "cpu": [
         "arm64"
       ],
@@ -5540,15 +5393,12 @@
       "optional": true,
       "os": [
         "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-linux-mips64le": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.22.tgz",
-      "integrity": "sha512-SiNDfuRXhGh1JQLLA9JPprBgPVFOsGuQ0yDfSPTNxztmVJd8W2mX++c4FfLpAwxuJe183mLuKf7qKCHQs5ZnBQ==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.14.tgz",
+      "integrity": "sha512-4Jl5/+xoINKbA4cesH3f4R+q0vltAztZ6Jm8YycS8lNhN1pgZJBDxWfI6HUMIAdkKlIpR1PIkA9aXQgZ8sxFAg==",
       "cpu": [
         "mips64el"
       ],
@@ -5556,15 +5406,12 @@
       "optional": true,
       "os": [
         "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-linux-ppc64le": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.22.tgz",
-      "integrity": "sha512-6t/GI9I+3o1EFm2AyN9+TsjdgWCpg2nwniEhjm2qJWtJyJ5VzTXGUU3alCO3evopu8G0hN2Bu1Jhz2YmZD0kng==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.14.tgz",
+      "integrity": "sha512-BitW37GxeebKxqYNl4SVuSdnIJAzH830Lr6Mkq3pBHXtzQay0vK+IeOR/Ele1GtNVJ+/f8wYM53tcThkv5SC5w==",
       "cpu": [
         "ppc64"
       ],
@@ -5572,31 +5419,12 @@
       "optional": true,
       "os": [
         "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/esbuild-linux-riscv64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.22.tgz",
-      "integrity": "sha512-AyJHipZKe88sc+tp5layovquw5cvz45QXw5SaDgAq2M911wLHiCvDtf/07oDx8eweCyzYzG5Y39Ih568amMTCQ==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-linux-s390x": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.22.tgz",
-      "integrity": "sha512-Sz1NjZewTIXSblQDZWEFZYjOK6p8tV6hrshYdXZ0NHTjWE+lwxpOpWeElUGtEmiPcMT71FiuA9ODplqzzSxkzw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.14.tgz",
+      "integrity": "sha512-vLj6p76HOZG3wfuTr5MyO3qW5iu8YdhUNxuY+tx846rPo7GcKtYSPMusQjeVEfZlJpSYoR+yrNBBxq+qVF9zrw==",
       "cpu": [
         "s390x"
       ],
@@ -5604,15 +5432,12 @@
       "optional": true,
       "os": [
         "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-netbsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.22.tgz",
-      "integrity": "sha512-TBbCtx+k32xydImsHxvFgsOCuFqCTGIxhzRNbgSL1Z2CKhzxwT92kQMhxort9N/fZM2CkRCPPs5wzQSamtzEHA==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.14.tgz",
+      "integrity": "sha512-fn8looXPQhpVqUyCBWUuPjesH+yGIyfbIQrLKG05rr1Kgm3rZD/gaYrd3Wpmf5syVZx70pKZPvdHp8OTA+y7cQ==",
       "cpu": [
         "x64"
       ],
@@ -5620,15 +5445,12 @@
       "optional": true,
       "os": [
         "netbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-openbsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.22.tgz",
-      "integrity": "sha512-vK912As725haT313ANZZZN+0EysEEQXWC/+YE4rQvOQzLuxAQc2tjbzlAFREx3C8+uMuZj/q7E5gyVB7TzpcTA==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.14.tgz",
+      "integrity": "sha512-HdAnJ399pPff3SKbd8g+P4o5znseni5u5n5rJ6Z7ouqOdgbOwHe2ofZbMow17WMdNtz1IyOZk2Wo9Ve6/lZ4Rg==",
       "cpu": [
         "x64"
       ],
@@ -5636,15 +5458,12 @@
       "optional": true,
       "os": [
         "openbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-sunos-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.22.tgz",
-      "integrity": "sha512-/mbJdXTW7MTcsPhtfDsDyPEOju9EOABvCjeUU2OJ7fWpX/Em/H3WYDa86tzLUbcVg++BScQDzqV/7RYw5XNY0g==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.14.tgz",
+      "integrity": "sha512-bmDHa99ulsGnYlh/xjBEfxoGuC8CEG5OWvlgD+pF7bKKiVTbtxqVCvOGEZeoDXB+ja6AvHIbPxrEE32J+m5nqQ==",
       "cpu": [
         "x64"
       ],
@@ -5652,27 +5471,24 @@
       "optional": true,
       "os": [
         "sunos"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-wasm": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz",
-      "integrity": "sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.14.tgz",
+      "integrity": "sha512-qTjK4MWnYtQHCMGg2qDUqeFYXfVvYq5qJkQTIsOV4VZCknoYePVaDTG9ygEB9Ct0kc0DWs7IrS6Ja+GjY62Kzw==",
       "dev": true,
       "bin": {
         "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=8"
       }
     },
     "node_modules/esbuild-windows-32": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.22.tgz",
-      "integrity": "sha512-1vRIkuvPTjeSVK3diVrnMLSbkuE36jxA+8zGLUOrT4bb7E/JZvDRhvtbWXWaveUc/7LbhaNFhHNvfPuSw2QOQg==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.14.tgz",
+      "integrity": "sha512-6tVooQcxJCNenPp5GHZBs/RLu31q4B+BuF4MEoRxswT+Eq2JGF0ZWDRQwNKB8QVIo3t6Svc5wNGez+CwKNQjBg==",
       "cpu": [
         "ia32"
       ],
@@ -5680,15 +5496,12 @@
       "optional": true,
       "os": [
         "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-windows-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.22.tgz",
-      "integrity": "sha512-AxjIDcOmx17vr31C5hp20HIwz1MymtMjKqX4qL6whPj0dT9lwxPexmLj6G1CpR3vFhui6m75EnBEe4QL82SYqw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.14.tgz",
+      "integrity": "sha512-kl3BdPXh0/RD/dad41dtzj2itMUR4C6nQbXQCyYHHo4zoUoeIXhpCrSl7BAW1nv5EFL8stT1V+TQVXGZca5A2A==",
       "cpu": [
         "x64"
       ],
@@ -5696,15 +5509,12 @@
       "optional": true,
       "os": [
         "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/esbuild-windows-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.22.tgz",
-      "integrity": "sha512-5wvQ+39tHmRhNpu2Fx04l7QfeK3mQ9tKzDqqGR8n/4WUxsFxnVLfDRBGirIfk4AfWlxk60kqirlODPoT5LqMUg==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.14.tgz",
+      "integrity": "sha512-dCm1wTOm6HIisLanmybvRKvaXZZo4yEVrHh1dY0v582GThXJOzuXGja1HIQgV09RpSHYRL3m4KoUBL00l6SWEg==",
       "cpu": [
         "arm64"
       ],
@@ -5712,10 +5522,7 @@
       "optional": true,
       "os": [
         "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      ]
     },
     "node_modules/escalade": {
       "version": "3.1.1",
@@ -5888,17 +5695,17 @@
       }
     },
     "node_modules/express": {
-      "version": "4.17.3",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz",
-      "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==",
+      "version": "4.17.2",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz",
+      "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==",
       "dev": true,
       "dependencies": {
-        "accepts": "~1.3.8",
+        "accepts": "~1.3.7",
         "array-flatten": "1.1.1",
-        "body-parser": "1.19.2",
+        "body-parser": "1.19.1",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.4.2",
+        "cookie": "0.4.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "~1.1.2",
@@ -5913,7 +5720,7 @@
         "parseurl": "~1.3.3",
         "path-to-regexp": "0.1.7",
         "proxy-addr": "~2.0.7",
-        "qs": "6.9.7",
+        "qs": "6.9.6",
         "range-parser": "~1.2.1",
         "safe-buffer": "5.2.1",
         "send": "0.17.2",
@@ -5934,6 +5741,15 @@
       "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
       "dev": true
     },
+    "node_modules/express/node_modules/cookie": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+      "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/express/node_modules/debug": {
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -6171,9 +5987,9 @@
       "dev": true
     },
     "node_modules/follow-redirects": {
-      "version": "1.14.9",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
-      "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
+      "version": "1.14.8",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz",
+      "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==",
       "dev": true,
       "funding": [
         {
@@ -6223,9 +6039,9 @@
       }
     },
     "node_modules/fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz",
+      "integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==",
       "dev": true,
       "engines": {
         "node": "*"
@@ -6245,9 +6061,9 @@
       }
     },
     "node_modules/fs-extra": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz",
-      "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==",
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
+      "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
       "dev": true,
       "dependencies": {
         "graceful-fs": "^4.2.0",
@@ -6303,22 +6119,23 @@
       "devOptional": true
     },
     "node_modules/gauge": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
-      "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz",
+      "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==",
       "dev": true,
       "dependencies": {
+        "ansi-regex": "^5.0.1",
         "aproba": "^1.0.3 || ^2.0.0",
-        "color-support": "^1.1.3",
-        "console-control-strings": "^1.1.0",
+        "color-support": "^1.1.2",
+        "console-control-strings": "^1.0.0",
         "has-unicode": "^2.0.1",
-        "signal-exit": "^3.0.7",
+        "signal-exit": "^3.0.0",
         "string-width": "^4.2.3",
         "strip-ansi": "^6.0.1",
-        "wide-align": "^1.1.5"
+        "wide-align": "^1.1.2"
       },
       "engines": {
-        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+        "node": "^12.13.0 || ^14.15.0 || >=16"
       }
     },
     "node_modules/gensync": {
@@ -6550,9 +6367,9 @@
       }
     },
     "node_modules/has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+      "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
       "dev": true,
       "engines": {
         "node": ">= 0.4"
@@ -6648,9 +6465,9 @@
       }
     },
     "node_modules/html-entities": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
-      "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==",
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
+      "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==",
       "dev": true
     },
     "node_modules/html-escaper": {
@@ -6688,9 +6505,9 @@
       }
     },
     "node_modules/http-parser-js": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz",
-      "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz",
+      "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==",
       "dev": true
     },
     "node_modules/http-proxy": {
@@ -6722,9 +6539,9 @@
       }
     },
     "node_modules/http-proxy-middleware": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz",
-      "integrity": "sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz",
+      "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==",
       "dev": true,
       "dependencies": {
         "@types/http-proxy": "^1.17.8",
@@ -7039,9 +6856,9 @@
       }
     },
     "node_modules/inquirer/node_modules/rxjs": {
-      "version": "7.5.5",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-      "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz",
+      "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==",
       "dev": true,
       "dependencies": {
         "tslib": "^2.1.0"
@@ -7332,9 +7149,9 @@
       "devOptional": true
     },
     "node_modules/isbinaryfile": {
-      "version": "4.0.10",
-      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
-      "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
+      "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==",
       "dev": true,
       "engines": {
         "node": ">= 8.0.0"
@@ -7671,9 +7488,9 @@
       }
     },
     "node_modules/jasmine-core": {
-      "version": "3.99.1",
-      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz",
-      "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==",
+      "version": "3.99.0",
+      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.0.tgz",
+      "integrity": "sha512-+ZDaJlEfRopINQqgE+hvzRyDIQDeKfqqTvF8RzXsvU1yE3pBDRud2+Qfh9WvGgRpuzqxyQJVI6Amy5XQ11r/3w==",
       "dev": true
     },
     "node_modules/jasmine-spec-reporter": {
@@ -7811,10 +7628,13 @@
       "optional": true
     },
     "node_modules/json5": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
-      "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+      "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
       "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.5"
+      },
       "bin": {
         "json5": "lib/cli.js"
       },
@@ -7906,15 +7726,15 @@
       "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
     },
     "node_modules/karma": {
-      "version": "6.3.17",
-      "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.17.tgz",
-      "integrity": "sha512-2TfjHwrRExC8yHoWlPBULyaLwAFmXmxQrcuFImt/JsAsSZu1uOWTZ1ZsWjqQtWpHLiatJOHL5jFjXSJIgCd01g==",
+      "version": "6.3.16",
+      "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.16.tgz",
+      "integrity": "sha512-nEU50jLvDe5yvXqkEJRf8IuvddUkOY2x5Xc4WXHz6dxINgGDrgD2uqQWeVrJs4hbfNaotn+HQ1LZJ4yOXrL7xQ==",
       "dev": true,
       "dependencies": {
-        "@colors/colors": "1.5.0",
         "body-parser": "^1.19.0",
         "braces": "^3.0.2",
         "chokidar": "^3.5.1",
+        "colors": "1.4.0",
         "connect": "^3.7.0",
         "di": "^0.0.1",
         "dom-serialize": "^2.2.1",
@@ -7944,9 +7764,9 @@
       }
     },
     "node_modules/karma-chrome-launcher": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz",
-      "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
+      "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
       "dev": true,
       "dependencies": {
         "which": "^1.2.1"
@@ -8000,13 +7820,22 @@
         "source-map-support": "^0.5.5"
       }
     },
+    "node_modules/karma/node_modules/colors": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+      "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.1.90"
+      }
+    },
     "node_modules/karma/node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
       "dev": true,
       "dependencies": {
-        "minimist": "^1.2.6"
+        "minimist": "^1.2.5"
       },
       "bin": {
         "mkdirp": "bin/cmd.js"
@@ -8182,9 +8011,9 @@
       }
     },
     "node_modules/license-webpack-plugin": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz",
-      "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.1.tgz",
+      "integrity": "sha512-SQum9mg3BgnY5BK+2KYl4W7pk9b26Q8tW2lTsO6tidD0/Ds9ksdXvp3ip2s9LqDjj5gtBMyWRfOPZptWj4PfCg==",
       "dev": true,
       "dependencies": {
         "webpack-sources": "^3.0.0"
@@ -8342,38 +8171,21 @@
       }
     },
     "node_modules/log4js": {
-      "version": "6.4.4",
-      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.4.tgz",
-      "integrity": "sha512-ncaWPsuw9Vl1CKA406hVnJLGQKy1OHx6buk8J4rE2lVW+NW5Y82G5/DIloO7NkqLOUtNPEANaWC1kZYVjXssPw==",
+      "version": "6.4.1",
+      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz",
+      "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==",
       "dev": true,
       "dependencies": {
-        "date-format": "^4.0.6",
-        "debug": "^4.3.4",
-        "flatted": "^3.2.5",
+        "date-format": "^4.0.3",
+        "debug": "^4.3.3",
+        "flatted": "^3.2.4",
         "rfdc": "^1.3.0",
-        "streamroller": "^3.0.6"
+        "streamroller": "^3.0.2"
       },
       "engines": {
         "node": ">=8.0"
       }
     },
-    "node_modules/log4js/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/lru-cache": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -8504,13 +8316,13 @@
       }
     },
     "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+      "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
       "dev": true,
       "dependencies": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
+        "braces": "^3.0.1",
+        "picomatch": "^2.2.3"
       },
       "engines": {
         "node": ">=8.6"
@@ -8529,21 +8341,21 @@
       }
     },
     "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "version": "1.51.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+      "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
       "devOptional": true,
       "engines": {
         "node": ">= 0.6"
       }
     },
     "node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "version": "2.1.34",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+      "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
       "devOptional": true,
       "dependencies": {
-        "mime-db": "1.52.0"
+        "mime-db": "1.51.0"
       },
       "engines": {
         "node": ">= 0.6"
@@ -8615,9 +8427,9 @@
       }
     },
     "node_modules/minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "devOptional": true
     },
     "node_modules/minipass": {
@@ -8764,9 +8576,9 @@
       "dev": true
     },
     "node_modules/nanoid": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
-      "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.0.tgz",
+      "integrity": "sha512-JzxqqT5u/x+/KOFSd7JP15DOo9nOoHpx6DYatqIHUW2+flybkm+mdcraotSQR5WcnZr+qhGVh8Ted0KdfSMxlg==",
       "dev": true,
       "bin": {
         "nanoid": "bin/nanoid.cjs"
@@ -8819,9 +8631,9 @@
       "dev": true
     },
     "node_modules/ngx-toastr": {
-      "version": "14.2.2",
-      "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-14.2.2.tgz",
-      "integrity": "sha512-/Ajr9E0llr51Zij8WgnxQpe7a5JK+k1n07/uWJcQ112OBH0GCktHi8M8QfGvw5Ih67hG8iowrT+aHXHS49gZcQ==",
+      "version": "14.2.1",
+      "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-14.2.1.tgz",
+      "integrity": "sha512-1Kq//y8tTgglUYKHIziZwpo4R7fe4/neidcxfbAXzXtcViSjT4Z21Vgqn/inoBlwoc7E9qXQDuZoJr2lanCgGA==",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -8873,9 +8685,9 @@
       }
     },
     "node_modules/node-forge": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz",
-      "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz",
+      "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==",
       "dev": true,
       "engines": {
         "node": ">= 6.13.0"
@@ -9059,19 +8871,6 @@
         "node": "^12.13.0 || ^14.15.0 || >=16"
       }
     },
-    "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz",
-      "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==",
-      "dev": true,
-      "dependencies": {
-        "@gar/promisify": "^1.1.3",
-        "semver": "^7.3.5"
-      },
-      "engines": {
-        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
-      }
-    },
     "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
@@ -9081,35 +8880,6 @@
         "node": ">= 10"
       }
     },
-    "node_modules/npm-registry-fetch/node_modules/cacache": {
-      "version": "16.0.3",
-      "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.3.tgz",
-      "integrity": "sha512-eC7wYodNCVb97kuHGk5P+xZsvUJHkhSEOyNwkenqQPAsOtrTjvWOE5vSPNBpz9d8X3acIf6w2Ub5s4rvOCTs4g==",
-      "dev": true,
-      "dependencies": {
-        "@npmcli/fs": "^2.1.0",
-        "@npmcli/move-file": "^1.1.2",
-        "chownr": "^2.0.0",
-        "fs-minipass": "^2.1.0",
-        "glob": "^7.2.0",
-        "infer-owner": "^1.0.4",
-        "lru-cache": "^7.7.1",
-        "minipass": "^3.1.6",
-        "minipass-collect": "^1.0.2",
-        "minipass-flush": "^1.0.5",
-        "minipass-pipeline": "^1.2.4",
-        "mkdirp": "^1.0.4",
-        "p-map": "^4.0.0",
-        "promise-inflight": "^1.0.1",
-        "rimraf": "^3.0.2",
-        "ssri": "^8.0.1",
-        "tar": "^6.1.11",
-        "unique-filename": "^1.1.1"
-      },
-      "engines": {
-        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
-      }
-    },
     "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
@@ -9125,30 +8895,30 @@
       }
     },
     "node_modules/npm-registry-fetch/node_modules/lru-cache": {
-      "version": "7.7.1",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz",
-      "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==",
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.3.1.tgz",
+      "integrity": "sha512-nX1x4qUrKqwbIAhv4s9et4FIUVzNOpeY07bsjGUy8gwJrXH/wScImSQqXErmo/b2jZY2r0mohbLA9zVj7u1cNw==",
       "dev": true,
       "engines": {
         "node": ">=12"
       }
     },
     "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": {
-      "version": "10.1.1",
-      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.1.tgz",
-      "integrity": "sha512-3/mCljDQNjmrP7kl0vhS5WVlV+TvSKoZaFhdiYV7MOijEnrhrjaVnqbp/EY/7S+fhUB2KpH7j8c1iRsIOs+kjw==",
+      "version": "10.0.3",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.3.tgz",
+      "integrity": "sha512-CzarPHynPpHjhF5in/YapnO44rSZeYX5VCMfdXa99+gLwpbfFLh20CWa6dP/taV9Net9PWJwXNKtp/4ZTCQnag==",
       "dev": true,
       "dependencies": {
-        "agentkeepalive": "^4.2.1",
-        "cacache": "^16.0.2",
+        "agentkeepalive": "^4.2.0",
+        "cacache": "^15.3.0",
         "http-cache-semantics": "^4.1.0",
         "http-proxy-agent": "^5.0.0",
         "https-proxy-agent": "^5.0.0",
         "is-lambda": "^1.0.1",
-        "lru-cache": "^7.7.1",
+        "lru-cache": "^7.3.1",
         "minipass": "^3.1.6",
         "minipass-collect": "^1.0.2",
-        "minipass-fetch": "^2.0.3",
+        "minipass-fetch": "^1.4.1",
         "minipass-flush": "^1.0.5",
         "minipass-pipeline": "^1.2.4",
         "negotiator": "^0.6.3",
@@ -9157,24 +8927,7 @@
         "ssri": "^8.0.1"
       },
       "engines": {
-        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
-      }
-    },
-    "node_modules/npm-registry-fetch/node_modules/make-fetch-happen/node_modules/minipass-fetch": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz",
-      "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==",
-      "dev": true,
-      "dependencies": {
-        "minipass": "^3.1.6",
-        "minipass-sized": "^1.0.3",
-        "minizlib": "^2.1.2"
-      },
-      "engines": {
-        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
-      },
-      "optionalDependencies": {
-        "encoding": "^0.1.13"
+        "node": "^12.13.0 || ^14.15.0 || >=16"
       }
     },
     "node_modules/npm-run-path": {
@@ -9295,6 +9048,17 @@
         "serialize-javascript": "^4.0.0"
       }
     },
+    "node_modules/oidc-client/node_modules/acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
     "node_modules/oidc-client/node_modules/serialize-javascript": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
@@ -9838,12 +9602,12 @@
       }
     },
     "node_modules/portfinder/node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
       "dev": true,
       "dependencies": {
-        "minimist": "^1.2.6"
+        "minimist": "^1.2.5"
       },
       "bin": {
         "mkdirp": "bin/cmd.js"
@@ -9937,9 +9701,9 @@
       }
     },
     "node_modules/postcss-custom-properties": {
-      "version": "12.1.5",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.5.tgz",
-      "integrity": "sha512-FHbbB/hRo/7cxLGkc2NS7cDRIDN1oFqQnUKBiyh4b/gwk8DD8udvmRDpUhEK836kB8ggUCieHVOvZDnF9XhI3g==",
+      "version": "12.1.4",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.4.tgz",
+      "integrity": "sha512-i6AytuTCoDLJkWN/MtAIGriJz3j7UX6bV7Z5t+KgFz+dwZS15/mlTJY1S0kRizlk6ba0V8u8hN50Fz5Nm7tdZw==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0"
@@ -9982,12 +9746,11 @@
       }
     },
     "node_modules/postcss-double-position-gradients": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz",
-      "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==",
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.5.tgz",
+      "integrity": "sha512-XiZzvdxLOWZwtt/1GgHJYGoD9scog/DD/yI5dcvPrXNdNDEv7T53/6tL7ikl+EM3jcerII5/XIQzd1UHOdTi2w==",
       "dev": true,
       "dependencies": {
-        "@csstools/postcss-progressive-custom-properties": "^1.1.0",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -9998,9 +9761,9 @@
       }
     },
     "node_modules/postcss-env-function": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz",
-      "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.5.tgz",
+      "integrity": "sha512-gPUJc71ji9XKyl0WSzAalBeEA/89kU+XpffpPxSaaaZ1c48OL36r1Ep5R6+9XAPkIiDlSvVAwP4io12q/vTcvA==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0"
@@ -10105,9 +9868,9 @@
       }
     },
     "node_modules/postcss-lab-function": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.1.2.tgz",
-      "integrity": "sha512-isudf5ldhg4fk16M8viAwAbg6Gv14lVO35N3Z/49NhbwPQ2xbiEoHgrRgpgQojosF4vF7jY653ktB6dDrUOR8Q==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.1.0.tgz",
+      "integrity": "sha512-59uHN/2wRaOd7whDyeaJ82E0kncIEeJkwcmvXFPNus8v1YMhtv2IUo9OtOAncn7sifZVMRsyoPlhxwckTjn4cQ==",
       "dev": true,
       "dependencies": {
         "@csstools/postcss-progressive-custom-properties": "^1.1.0",
@@ -10226,18 +9989,18 @@
       }
     },
     "node_modules/postcss-nesting": {
-      "version": "10.1.3",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.3.tgz",
-      "integrity": "sha512-wUC+/YCik4wH3StsbC5fBG1s2Z3ZV74vjGqBFYtmYKlVxoio5TYGM06AiaKkQPPlkXWn72HKfS7Cw5PYxnoXSw==",
+      "version": "10.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.2.tgz",
+      "integrity": "sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ==",
       "dev": true,
       "dependencies": {
-        "postcss-selector-parser": "^6.0.9"
+        "postcss-selector-parser": "^6.0.8"
       },
       "engines": {
         "node": "^12 || ^14 || >=16"
       },
       "peerDependencies": {
-        "postcss": "^8.4"
+        "postcss": "^8.3"
       }
     },
     "node_modules/postcss-overflow-shorthand": {
@@ -10721,9 +10484,9 @@
       }
     },
     "node_modules/qs": {
-      "version": "6.9.7",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
-      "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
+      "version": "6.9.6",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
+      "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==",
       "dev": true,
       "engines": {
         "node": ">=0.6"
@@ -10775,12 +10538,12 @@
       }
     },
     "node_modules/raw-body": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz",
-      "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==",
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
+      "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
       "dev": true,
       "dependencies": {
-        "bytes": "3.1.2",
+        "bytes": "3.1.1",
         "http-errors": "1.8.1",
         "iconv-lite": "0.4.24",
         "unpipe": "1.0.0"
@@ -11409,12 +11172,12 @@
       }
     },
     "node_modules/selfsigned": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz",
-      "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz",
+      "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==",
       "dev": true,
       "dependencies": {
-        "node-forge": "^1"
+        "node-forge": "^1.2.0"
       },
       "engines": {
         "node": ">=10"
@@ -11929,38 +11692,21 @@
       "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
       "dev": true,
       "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/streamroller": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.6.tgz",
-      "integrity": "sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg==",
-      "dev": true,
-      "dependencies": {
-        "date-format": "^4.0.6",
-        "debug": "^4.3.4",
-        "fs-extra": "^10.0.1"
-      },
-      "engines": {
-        "node": ">=8.0"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/streamroller/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+    "node_modules/streamroller": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz",
+      "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==",
       "dev": true,
       "dependencies": {
-        "ms": "2.1.2"
+        "date-format": "^4.0.3",
+        "debug": "^4.1.1",
+        "fs-extra": "^10.0.0"
       },
       "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
+        "node": ">=8.0"
       }
     },
     "node_modules/string_decoder": {
@@ -12221,12 +11967,11 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz",
-      "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==",
+      "version": "5.10.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
+      "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
       "dev": true,
       "dependencies": {
-        "acorn": "^8.5.0",
         "commander": "^2.20.0",
         "source-map": "~0.7.2",
         "source-map-support": "~0.5.20"
@@ -12236,6 +11981,14 @@
       },
       "engines": {
         "node": ">=10"
+      },
+      "peerDependencies": {
+        "acorn": "^8.5.0"
+      },
+      "peerDependenciesMeta": {
+        "acorn": {
+          "optional": true
+        }
       }
     },
     "node_modules/terser-webpack-plugin": {
@@ -12330,18 +12083,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/terser/node_modules/acorn": {
-      "version": "8.7.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
-      "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/test-exclude": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -12517,12 +12258,12 @@
       }
     },
     "node_modules/tslint/node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
       "devOptional": true,
       "dependencies": {
-        "minimist": "^1.2.6"
+        "minimist": "^1.2.5"
       },
       "bin": {
         "mkdirp": "bin/cmd.js"
@@ -12605,15 +12346,15 @@
       }
     },
     "node_modules/typed-assert": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
-      "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.8.tgz",
+      "integrity": "sha512-5NkbXZUlmCE73Fs7gvkp1XXJWHYetPkg60QnQ2NXQmBYNFxbBr2zA8GCtaH4K2s2WhOmSlgiSTmrjrcm5tnM5g==",
       "dev": true
     },
     "node_modules/typescript": {
-      "version": "4.6.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
-      "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
+      "version": "4.5.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+      "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
       "devOptional": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -12728,9 +12469,9 @@
       }
     },
     "node_modules/url-parse": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "version": "1.5.6",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz",
+      "integrity": "sha512-xj3QdUJ1DttD1LeSfvJlU1eiF1RvBSBfUu8GplFGdUzSO28y5yUtEl7wb//PI4Af6qh0o/K8545vUmucRrfWsw==",
       "dependencies": {
         "querystringify": "^2.1.1",
         "requires-port": "^1.0.0"
@@ -12958,13 +12699,13 @@
       "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
     },
     "node_modules/webpack": {
-      "version": "5.70.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz",
-      "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==",
+      "version": "5.67.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz",
+      "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==",
       "dev": true,
       "dependencies": {
-        "@types/eslint-scope": "^3.7.3",
-        "@types/estree": "^0.0.51",
+        "@types/eslint-scope": "^3.7.0",
+        "@types/estree": "^0.0.50",
         "@webassemblyjs/ast": "1.11.1",
         "@webassemblyjs/wasm-edit": "1.11.1",
         "@webassemblyjs/wasm-parser": "1.11.1",
@@ -12972,7 +12713,7 @@
         "acorn-import-assertions": "^1.7.6",
         "browserslist": "^4.14.5",
         "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.9.2",
+        "enhanced-resolve": "^5.8.3",
         "es-module-lexer": "^0.9.0",
         "eslint-scope": "5.1.1",
         "events": "^3.2.0",
@@ -13285,27 +13026,6 @@
         }
       }
     },
-    "node_modules/webpack/node_modules/acorn": {
-      "version": "8.7.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
-      "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/webpack/node_modules/acorn-import-assertions": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
-      "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
-      "dev": true,
-      "peerDependencies": {
-        "acorn": "^8"
-      }
-    },
     "node_modules/webpack/node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -13551,9 +13271,9 @@
       }
     },
     "node_modules/yargs": {
-      "version": "17.4.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz",
-      "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==",
+      "version": "17.3.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz",
+      "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==",
       "dev": true,
       "dependencies": {
         "cliui": "^7.0.2",
@@ -13569,9 +13289,9 @@
       }
     },
     "node_modules/yargs-parser": {
-      "version": "21.0.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
-      "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
+      "version": "21.0.0",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
+      "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==",
       "dev": true,
       "engines": {
         "node": ">=12"
@@ -13587,11 +13307,11 @@
       }
     },
     "node_modules/zone.js": {
-      "version": "0.11.5",
-      "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.5.tgz",
-      "integrity": "sha512-D1/7VxEuQ7xk6z/kAROe4SUbd9CzxY4zOwVGnGHerd/SgLIVU5f4esDzQUsOCeArn933BZfWMKydH7l7dPEp0g==",
+      "version": "0.11.4",
+      "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz",
+      "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==",
       "dependencies": {
-        "tslib": "^2.3.0"
+        "tslib": "^2.0.0"
       }
     }
   },
@@ -13607,25 +13327,25 @@
       }
     },
     "@angular-devkit/architect": {
-      "version": "0.1303.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.0.tgz",
-      "integrity": "sha512-kTcKB917ICA8j53SGo4gn+qAlzx8si+iHnOTbp5QlMr7qt/Iz07SVVI8mRlMD6c6lr7eE/fVlCLzEZ1+WCQpTA==",
+      "version": "0.1302.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1302.3.tgz",
+      "integrity": "sha512-0m8jMKrFfIqsYt33zTUwSmyekyfuS67hna08RQ6USjzWQSE3z4S8ulCUARSjM6AzdMblX+whfy56nJUpT17NSA==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "13.3.0",
+        "@angular-devkit/core": "13.2.3",
         "rxjs": "6.6.7"
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.0.tgz",
-      "integrity": "sha512-3Ji7EeqGHj7i1Jgmeo3aIEXsnfKyFeQPpl65gcYmHwj5dP4lZzLSU4rMaWWUKksccgqCUXgPI2vKePTPazmikg==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.2.3.tgz",
+      "integrity": "sha512-cZ2gRcMRgW3t1WCeP+2D/wmr2M+BR/RICAh0wL9irIdypWAzIFt3Z2+2R/HmgAAxoEkdUMIfB9AnkYmwRVgFeA==",
       "dev": true,
       "requires": {
         "@ampproject/remapping": "1.1.1",
-        "@angular-devkit/architect": "0.1303.0",
-        "@angular-devkit/build-webpack": "0.1303.0",
-        "@angular-devkit/core": "13.3.0",
+        "@angular-devkit/architect": "0.1302.3",
+        "@angular-devkit/build-webpack": "0.1302.3",
+        "@angular-devkit/core": "13.2.3",
         "@babel/core": "7.16.12",
         "@babel/generator": "7.16.8",
         "@babel/helper-annotate-as-pure": "7.16.7",
@@ -13636,7 +13356,7 @@
         "@babel/runtime": "7.16.7",
         "@babel/template": "7.16.7",
         "@discoveryjs/json-ext": "0.5.6",
-        "@ngtools/webpack": "13.3.0",
+        "@ngtools/webpack": "13.2.3",
         "ansi-colors": "4.1.1",
         "babel-loader": "8.2.3",
         "babel-plugin-istanbul": "6.1.1",
@@ -13647,8 +13367,8 @@
         "core-js": "3.20.3",
         "critters": "0.0.16",
         "css-loader": "6.5.1",
-        "esbuild": "0.14.22",
-        "esbuild-wasm": "0.14.22",
+        "esbuild": "0.14.14",
+        "esbuild-wasm": "0.14.14",
         "glob": "7.2.0",
         "https-proxy-agent": "5.0.0",
         "inquirer": "8.2.0",
@@ -13656,7 +13376,7 @@
         "karma-source-map-support": "1.4.0",
         "less": "4.1.2",
         "less-loader": "10.2.0",
-        "license-webpack-plugin": "4.0.2",
+        "license-webpack-plugin": "4.0.1",
         "loader-utils": "3.2.0",
         "mini-css-extract-plugin": "2.5.3",
         "minimatch": "3.0.4",
@@ -13678,11 +13398,11 @@
         "source-map-support": "0.5.21",
         "stylus": "0.56.0",
         "stylus-loader": "6.2.0",
-        "terser": "5.11.0",
+        "terser": "5.10.0",
         "text-table": "0.2.0",
         "tree-kill": "1.2.2",
         "tslib": "2.3.1",
-        "webpack": "5.70.0",
+        "webpack": "5.67.0",
         "webpack-dev-middleware": "5.3.0",
         "webpack-dev-server": "4.7.3",
         "webpack-merge": "5.8.0",
@@ -13698,19 +13418,19 @@
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.1303.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.0.tgz",
-      "integrity": "sha512-a+Veg2oYn3RM2Kl148BReuONmD1kjbbYBnMUVi8nD6rvJPStFZkqN5s5ZkYybKeWnzMGaB3VasKR88z5XeH22A==",
+      "version": "0.1302.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1302.3.tgz",
+      "integrity": "sha512-+JYH1lWU0UOjaWYxpoR2VLsdcb6nG9Gv+M1gH+kT0r2sAKOFaHnrksbOvca3EhDoaMa2b9LSGEE0OcSHWnN+eQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1303.0",
+        "@angular-devkit/architect": "0.1302.3",
         "rxjs": "6.6.7"
       }
     },
     "@angular-devkit/core": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.0.tgz",
-      "integrity": "sha512-8YrreVbWlJVZnk5zs4vfkRItrPEtWhUcxWOBfYT/Kwu4FwJVAnNuhJAxxXOAQ2Ckd7cv30Idh/RFVLbTZ5Gs9w==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.2.3.tgz",
+      "integrity": "sha512-/47RA8qmWzeS60xSdaprIn1MiSv0Iw83t0M9/ENH7irFS5vMAq62NCcwiWXH59pZmvvLbF+7xy/RgYUZLr4nHQ==",
       "dev": true,
       "requires": {
         "ajv": "8.9.0",
@@ -13722,12 +13442,12 @@
       }
     },
     "@angular-devkit/schematics": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.0.tgz",
-      "integrity": "sha512-hq7tqnB3uVT/iDgqWWZ4kvnijeAcgd4cfLzZiCPaYn1nuhZf0tWsho6exhJ/odMZHvVp7w8OibqWiUKxNY9zHA==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.2.3.tgz",
+      "integrity": "sha512-+dyC4iKV0huvpjiuz4uyjLNK3FsCIp/Ghv5lXvhG6yok/dCAubsJItJOxi6G16aVCzG/E9zbsDfm9fNMyVOkgQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "13.3.0",
+        "@angular-devkit/core": "13.2.3",
         "jsonc-parser": "3.0.0",
         "magic-string": "0.25.7",
         "ora": "5.4.1",
@@ -13735,23 +13455,23 @@
       }
     },
     "@angular/animations": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.3.0.tgz",
-      "integrity": "sha512-q7hkImhHCv0QdriR8HOFhsAW05QDmvapcHrBv3y862LUTR5e90/+81RYuwFuKX1lk/sa7LiHlHHWC7oCspzr2Q==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.2.2.tgz",
+      "integrity": "sha512-qX8LAMuCJaueHBVyuwKtqunx96G0Dr26k7y5Z03VTcscYst4Ib4V2d4i5dwn3HS82DehFdO86cm3Hi2PqE/qww==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/cli": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.0.tgz",
-      "integrity": "sha512-2qCKP/QsyxrJnpd3g4P/iTQ4TjI04N8r+bG5YLLfudoMDsQ/Ti4ogdI7PBeG2IMbRylZW9XLjHraWG42+Y9tWw==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.2.3.tgz",
+      "integrity": "sha512-QsakxpdQuO67u4fQNuOASqabYUO9gJb/5CpUGpWbuBzru0/9CMEF1CtXoF4EoDiwa5sJMirz3SJMKhtzFlv1cQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1303.0",
-        "@angular-devkit/core": "13.3.0",
-        "@angular-devkit/schematics": "13.3.0",
-        "@schematics/angular": "13.3.0",
+        "@angular-devkit/architect": "0.1302.3",
+        "@angular-devkit/core": "13.2.3",
+        "@angular-devkit/schematics": "13.2.3",
+        "@schematics/angular": "13.2.3",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.1",
         "debug": "4.3.3",
@@ -13770,149 +13490,81 @@
       }
     },
     "@angular/common": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.0.tgz",
-      "integrity": "sha512-yl09TWBmz++Z3MKjzZIwU2wZHiedCn1DjGILjjNXegHFOfINRHiqLhHca4kGWFcTsdvcuEhd9Hk9JATqi45rjg==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.2.2.tgz",
+      "integrity": "sha512-56C/bheNLKtTCyQUZCiYtKbBIZN9jj6rjFILPtJCGls3cBCxp7t9tIdoLiQG/wVQRmaxdj1ioLT+sCWz7mLtQw==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/compiler": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.0.tgz",
-      "integrity": "sha512-oeUvaBOVpey2G1I5fWZa3JcyRuBQ3dAeRay5UtQhu1Xw2L8jd2tYkbZb1XOgP9J1/Ma4LO62pjSaOpR2EtO5ww==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.2.2.tgz",
+      "integrity": "sha512-XXQtB0/e7pR2LPrHmpEiTU72SX4xxHGy91vYWIj1JCjSn0fYF7vtHzSJPXDvkbnkNow/PXXzJJYaU1ctdMZPcA==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/compiler-cli": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.0.tgz",
-      "integrity": "sha512-f9m55YejHJNIDTwHyGwf3wn5AvZepDfdAgeJP0Re4XmO1mf/Z9Ob5mJP5Q1yLNhqk0DlURWsZ1CbJqufPXMTbQ==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.2.2.tgz",
+      "integrity": "sha512-tuOIcEEKVIht+mKrj0rtX3I8gc+ByPjzpCZhFQRggxM6xbKJIToO1zERbEGKrZ+sUJ6BB5KLvscDy+Pddy3b8w==",
       "dev": true,
       "requires": {
-        "@babel/core": "^7.17.2",
+        "@babel/core": "^7.8.6",
         "chokidar": "^3.0.0",
         "convert-source-map": "^1.5.1",
         "dependency-graph": "^0.11.0",
-        "magic-string": "^0.26.0",
+        "magic-string": "^0.25.0",
         "reflect-metadata": "^0.1.2",
         "semver": "^7.0.0",
         "sourcemap-codec": "^1.4.8",
         "tslib": "^2.3.0",
         "yargs": "^17.2.1"
-      },
-      "dependencies": {
-        "@ampproject/remapping": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
-          "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
-          "dev": true,
-          "requires": {
-            "@jridgewell/trace-mapping": "^0.3.0"
-          }
-        },
-        "@babel/core": {
-          "version": "7.17.8",
-          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz",
-          "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==",
-          "dev": true,
-          "requires": {
-            "@ampproject/remapping": "^2.1.0",
-            "@babel/code-frame": "^7.16.7",
-            "@babel/generator": "^7.17.7",
-            "@babel/helper-compilation-targets": "^7.17.7",
-            "@babel/helper-module-transforms": "^7.17.7",
-            "@babel/helpers": "^7.17.8",
-            "@babel/parser": "^7.17.8",
-            "@babel/template": "^7.16.7",
-            "@babel/traverse": "^7.17.3",
-            "@babel/types": "^7.17.0",
-            "convert-source-map": "^1.7.0",
-            "debug": "^4.1.0",
-            "gensync": "^1.0.0-beta.2",
-            "json5": "^2.1.2",
-            "semver": "^6.3.0"
-          },
-          "dependencies": {
-            "semver": {
-              "version": "6.3.0",
-              "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-              "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-              "dev": true
-            }
-          }
-        },
-        "@babel/generator": {
-          "version": "7.17.7",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz",
-          "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.17.0",
-            "jsesc": "^2.5.1",
-            "source-map": "^0.5.0"
-          }
-        },
-        "magic-string": {
-          "version": "0.26.1",
-          "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz",
-          "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==",
-          "dev": true,
-          "requires": {
-            "sourcemap-codec": "^1.4.8"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
       }
     },
     "@angular/core": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.0.tgz",
-      "integrity": "sha512-ZnuIMEK8YFBtthNqrxapYolMp6qRy4Yp/VG+M11YNiuBp/BoYYDjTaknwO8vu36Cn6372zWjcibsknkZMjdBkg==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.2.2.tgz",
+      "integrity": "sha512-zpctw0BxIVOsRFnckchK15SD1L8tzhf5GzwIDaM6+VylDQj1uYkm8mvAjJTQZyUuApomoFet2Rfj7XQPV+cNSQ==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/forms": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.0.tgz",
-      "integrity": "sha512-eBySo+B3/AV+p3SmD15Tg41N+SoxYPyqGnlCTR+jSrFis5ZZNWf0kKpIKhJhW2taRq6K+1o3KcA0W9bnphrZDQ==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.2.2.tgz",
+      "integrity": "sha512-T61W4Ay9X9qhxjc6lLqpNFeHrGKwg2mqdsZ3zIm/c7oKo37mgl9TB5kkrtnS+205r3N2hF4ICnGFZ4a/egUP/g==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/language-service": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-13.3.0.tgz",
-      "integrity": "sha512-XzfamYk39h+ASxb2ycZKfn9nITmns+jTV+DPrFAY1BoW+4x3tAoqt3/CkdJn8UaCePswKXckDQ6y9i109TfddQ==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-13.2.2.tgz",
+      "integrity": "sha512-2P5+wRsbHgpI2rVeFwnsLWxyntUiw8kG9Tqh5BkVDqtQovbYtzFiaMkf5TFz/g938JBBgeRQzvXr1kQhEidAWQ==",
       "dev": true
     },
     "@angular/platform-browser": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.0.tgz",
-      "integrity": "sha512-OgNVgRtqTPxzItZbJVe4NmSYKDLEKQYjGulStWl4ycQTsOKteF+sJi8gU5BvEU/KQNZItYnIQxMqTsFyS7xlRQ==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.2.2.tgz",
+      "integrity": "sha512-M7gWC8fFCPc/CRcHCzqe/j7WzwAUMeKt9vwlK633XnesHBoqZdYgbb3YHHc6WPVU0YI09Nb/Hm5sezEKmjUmPg==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/platform-browser-dynamic": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.0.tgz",
-      "integrity": "sha512-7/r79Yn8SDH8t0/fJ26PmScm/S1JZ9hxjC8IoROdyC5xBrSGrp946mIKE/4/813zmF8uPj2lveV9p/XiKTbxSw==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.2.2.tgz",
+      "integrity": "sha512-lj6xwat0StLp+ROFqXU62upwHQhlxaQi0djhrS+DGKUK0Xu9bkBeaSCfBFgS78jPm1SwL8Xztu9/vuDAHLRrqw==",
       "requires": {
         "tslib": "^2.3.0"
       }
     },
     "@angular/platform-server": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-13.3.0.tgz",
-      "integrity": "sha512-kfKyFi77f4MfcVfsv2O9icYz8FdqTjFdU1C8YDSC0OTgy4/QmwQ3lboZwcsvMRfF/aAb3liiFhPvNAjC2CYSEw==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-13.2.2.tgz",
+      "integrity": "sha512-v17/E9hWY5/MgUjk+E+aNUNZ/wmhHb08RyeKvvUKhx8Xb24hRiMdjA9yMkt1UsjOGJUIeZ8s5nn6xRiRc3t+9A==",
       "requires": {
         "domino": "^2.1.2",
         "tslib": "^2.3.0",
@@ -13920,9 +13572,9 @@
       }
     },
     "@angular/router": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.0.tgz",
-      "integrity": "sha512-Kz657mtycup+s9emRH66etkBobAF26h3UDXE9pnjUM6MuVTA38P31WyTWKyWJVk8Oruxm/hTHZZBfI88o9/1sA==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.2.2.tgz",
+      "integrity": "sha512-dt2b9/kGJAkmOqUmUD3aKlp4pGpdqLwB0zmhUYF3ktNEcQaPf4ZjWT/4jhy09gFL+TKOHG5OQW9GxBbhWI4bSg==",
       "requires": {
         "tslib": "^2.3.0"
       }
@@ -13943,9 +13595,9 @@
       }
     },
     "@babel/compat-data": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
-      "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
+      "version": "7.17.0",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz",
+      "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==",
       "dev": true
     },
     "@babel/core": {
@@ -14024,12 +13676,12 @@
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
-      "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz",
+      "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.17.7",
+        "@babel/compat-data": "^7.16.4",
         "@babel/helper-validator-option": "^7.16.7",
         "browserslist": "^4.17.5",
         "semver": "^6.3.0"
@@ -14044,9 +13696,9 @@
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.17.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz",
-      "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==",
+      "version": "7.17.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz",
+      "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.16.7",
@@ -14140,12 +13792,12 @@
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
-      "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz",
+      "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-module-imports": {
@@ -14158,19 +13810,19 @@
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
-      "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz",
+      "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==",
       "dev": true,
       "requires": {
         "@babel/helper-environment-visitor": "^7.16.7",
         "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-simple-access": "^7.16.7",
         "@babel/helper-split-export-declaration": "^7.16.7",
         "@babel/helper-validator-identifier": "^7.16.7",
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
-        "@babel/types": "^7.17.0"
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-optimise-call-expression": {
@@ -14213,12 +13865,12 @@
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
-      "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz",
+      "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-skip-transparent-expression-wrappers": {
@@ -14264,13 +13916,13 @@
       }
     },
     "@babel/helpers": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz",
-      "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==",
+      "version": "7.17.2",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz",
+      "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==",
       "dev": true,
       "requires": {
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
+        "@babel/traverse": "^7.17.0",
         "@babel/types": "^7.17.0"
       }
     },
@@ -14286,9 +13938,9 @@
       }
     },
     "@babel/parser": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz",
-      "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==",
+      "version": "7.17.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz",
+      "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==",
       "dev": true
     },
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
@@ -14333,12 +13985,12 @@
       }
     },
     "@babel/plugin-proposal-class-static-block": {
-      "version": "7.17.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz",
-      "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz",
+      "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.17.6",
+        "@babel/helper-create-class-features-plugin": "^7.16.7",
         "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-class-static-block": "^7.14.5"
       }
@@ -14659,9 +14311,9 @@
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz",
-      "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==",
+      "version": "7.17.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz",
+      "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.16.7"
@@ -14746,25 +14398,25 @@
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz",
-      "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz",
+      "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.17.7",
+        "@babel/helper-module-transforms": "^7.16.7",
         "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-simple-access": "^7.16.7",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz",
-      "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz",
+      "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==",
       "dev": true,
       "requires": {
         "@babel/helper-hoist-variables": "^7.16.7",
-        "@babel/helper-module-transforms": "^7.17.7",
+        "@babel/helper-module-transforms": "^7.16.7",
         "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/helper-validator-identifier": "^7.16.7",
         "babel-plugin-dynamic-import-node": "^2.3.3"
@@ -15073,9 +14725,9 @@
       },
       "dependencies": {
         "@babel/generator": {
-          "version": "7.17.7",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz",
-          "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==",
+          "version": "7.17.3",
+          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
+          "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
           "dev": true,
           "requires": {
             "@babel/types": "^7.17.0",
@@ -15101,16 +14753,10 @@
         "to-fast-properties": "^2.0.0"
       }
     },
-    "@colors/colors": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
-      "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
-      "dev": true
-    },
     "@csstools/postcss-progressive-custom-properties": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz",
-      "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.1.0.tgz",
+      "integrity": "sha512-DO76V3295AqhjJZvgeaDP5GAGAat4g6wYfF8X+1n+76MpJat8ffY5bCJ9eSUqFY71nImxXgaDTRYJcRnA9oo7g==",
       "dev": true,
       "requires": {
         "postcss-value-parser": "^4.2.0"
@@ -15123,9 +14769,9 @@
       "dev": true
     },
     "@gar/promisify": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
-      "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz",
+      "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==",
       "dev": true
     },
     "@istanbuljs/load-nyc-config": {
@@ -15153,26 +14799,10 @@
       "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
       "dev": true
     },
-    "@jridgewell/sourcemap-codec": {
-      "version": "1.4.11",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
-      "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
-      "dev": true
-    },
-    "@jridgewell/trace-mapping": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
-      "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
-      }
-    },
     "@microsoft/signalr": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-6.0.3.tgz",
-      "integrity": "sha512-wWGVC2xi8OxNjyir8iQWuyxWHy3Dkakk2Q3VreCE7pDzFAgZ4pId6abJlRPMVIQxkUvUGc8knMW5l3sv2bJ/yw==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-6.0.2.tgz",
+      "integrity": "sha512-OYSRqvOyJWMA9cRvbOIKG0f5wE9xRiayQvkDTQ8gru3WT3WevHk8KGsBUV3x2NmizTSq7gSShQr/l9GkdT/e8g==",
       "requires": {
         "abort-controller": "^3.0.0",
         "eventsource": "^1.0.7",
@@ -15182,9 +14812,9 @@
       }
     },
     "@ngtools/webpack": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.0.tgz",
-      "integrity": "sha512-QbTQWXK2WzYU+aKKVDG0ya7WYT+6rNAUXVt5ov9Nz1SGgDeozpiOx8ZqPWUvnToTY8EoodwWFGCVtkLHXUR+wA==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.3.tgz",
+      "integrity": "sha512-wooUZiV92QyoeFxkhqIwH/cfiAAAn+l8fEEuaaEIfJtpjpbShvvlboEVsqb28soeGiFJfLcmsZM3mUFgsG4QBQ==",
       "dev": true,
       "requires": {}
     },
@@ -15299,18 +14929,18 @@
       }
     },
     "@popperjs/core": {
-      "version": "2.11.4",
-      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz",
-      "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg=="
+      "version": "2.11.2",
+      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz",
+      "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA=="
     },
     "@schematics/angular": {
-      "version": "13.3.0",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.0.tgz",
-      "integrity": "sha512-WND6DXWf0ZFefqlC2hUm1FzHDonRfGpDEPWVhVulhYkB7IUUaXuCz8K41HAScyJ3bxUngs2Lx9+4omikc05fxA==",
+      "version": "13.2.3",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.2.3.tgz",
+      "integrity": "sha512-jloooGC7eco9AKxlIMMqFRptJYzZ0jNRBStWOp2dCISg6rmOKqpxbsHLtYFQIT1PnlomSxtKDAgYGQMDi9zhXw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "13.3.0",
-        "@angular-devkit/schematics": "13.3.0",
+        "@angular-devkit/core": "13.2.3",
+        "@angular-devkit/schematics": "13.2.3",
         "jsonc-parser": "3.0.0"
       }
     },
@@ -15403,9 +15033,9 @@
       }
     },
     "@types/estree": {
-      "version": "0.0.51",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
-      "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+      "version": "0.0.50",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
+      "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
       "dev": true
     },
     "@types/express": {
@@ -15456,9 +15086,9 @@
       }
     },
     "@types/json-schema": {
-      "version": "7.0.11",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
-      "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+      "version": "7.0.9",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+      "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
       "dev": true
     },
     "@types/mime": {
@@ -15538,9 +15168,9 @@
       }
     },
     "@types/ws": {
-      "version": "8.5.3",
-      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz",
-      "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==",
+      "version": "8.2.2",
+      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz",
+      "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==",
       "dev": true,
       "requires": {
         "@types/node": "*"
@@ -15741,9 +15371,17 @@
       }
     },
     "acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+      "version": "8.7.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+      "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+      "dev": true
+    },
+    "acorn-import-assertions": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+      "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
+      "dev": true,
+      "requires": {}
     },
     "adjust-sourcemap-loader": {
       "version": "4.0.0",
@@ -15784,9 +15422,9 @@
       }
     },
     "agentkeepalive": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
-      "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz",
+      "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==",
       "dev": true,
       "requires": {
         "debug": "^4.1.0",
@@ -15881,9 +15519,9 @@
       }
     },
     "apexcharts": {
-      "version": "3.34.0",
-      "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.34.0.tgz",
-      "integrity": "sha512-0HMwkTRm4lwuM4TZ+BjFynXuIRQnCG8E36k2r0JoxEfh61rY6OmRa6iFHlTQiyILpemPyTHxuPvK4wkR8RKc9A==",
+      "version": "3.33.1",
+      "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.33.1.tgz",
+      "integrity": "sha512-5aVzrgJefd8EH4w7oRmuOhA3+cxJxQg27cYg3ANVGvPCOB4AY3mVVNtFHRFaIq7bv8ws4GRaA9MWfzoWQw3MPQ==",
       "requires": {
         "svg.draggable.js": "^2.2.2",
         "svg.easing.js": "^2.0.0",
@@ -16024,14 +15662,14 @@
       "dev": true
     },
     "autoprefixer": {
-      "version": "10.4.4",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz",
-      "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==",
+      "version": "10.4.2",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
+      "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.20.2",
-        "caniuse-lite": "^1.0.30001317",
-        "fraction.js": "^4.2.0",
+        "browserslist": "^4.19.1",
+        "caniuse-lite": "^1.0.30001297",
+        "fraction.js": "^4.1.2",
         "normalize-range": "^0.1.2",
         "picocolors": "^1.0.0",
         "postcss-value-parser": "^4.2.0"
@@ -16217,20 +15855,20 @@
       }
     },
     "body-parser": {
-      "version": "1.19.2",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz",
-      "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==",
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
+      "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
       "dev": true,
       "requires": {
-        "bytes": "3.1.2",
+        "bytes": "3.1.1",
         "content-type": "~1.0.4",
         "debug": "2.6.9",
         "depd": "~1.1.2",
         "http-errors": "1.8.1",
         "iconv-lite": "0.4.24",
         "on-finished": "~2.3.0",
-        "qs": "6.9.7",
-        "raw-body": "2.4.3",
+        "qs": "6.9.6",
+        "raw-body": "2.4.2",
         "type-is": "~1.6.18"
       },
       "dependencies": {
@@ -16297,15 +15935,15 @@
       }
     },
     "browserslist": {
-      "version": "4.20.2",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
-      "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
+      "version": "4.19.1",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
+      "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "^1.0.30001317",
-        "electron-to-chromium": "^1.4.84",
+        "caniuse-lite": "^1.0.30001286",
+        "electron-to-chromium": "^1.4.17",
         "escalade": "^3.1.1",
-        "node-releases": "^2.0.2",
+        "node-releases": "^2.0.1",
         "picocolors": "^1.0.0"
       }
     },
@@ -16383,9 +16021,9 @@
       "dev": true
     },
     "bytes": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
+      "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==",
       "dev": true
     },
     "cacache": {
@@ -16437,9 +16075,9 @@
       "devOptional": true
     },
     "caniuse-lite": {
-      "version": "1.0.30001322",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz",
-      "integrity": "sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew==",
+      "version": "1.0.30001312",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz",
+      "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==",
       "dev": true
     },
     "caseless": {
@@ -16862,14 +16500,14 @@
       }
     },
     "core-js": {
-      "version": "3.21.1",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz",
-      "integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig=="
+      "version": "3.21.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz",
+      "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ=="
     },
     "core-js-compat": {
-      "version": "3.21.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz",
-      "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==",
+      "version": "3.21.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz",
+      "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==",
       "dev": true,
       "requires": {
         "browserslist": "^4.19.1",
@@ -17066,14 +16704,14 @@
       "requires": {}
     },
     "css-select": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
-      "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz",
+      "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==",
       "dev": true,
       "requires": {
         "boolbase": "^1.0.0",
-        "css-what": "^6.0.1",
-        "domhandler": "^4.3.1",
+        "css-what": "^5.1.0",
+        "domhandler": "^4.3.0",
         "domutils": "^2.8.0",
         "nth-check": "^2.0.1"
       }
@@ -17089,9 +16727,9 @@
       }
     },
     "css-what": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.0.1.tgz",
-      "integrity": "sha512-z93ZGFLNc6yaoXAmVhqoSIb+BduplteCt1fepvwhBUQK6MNE4g6fgjpuZKJKp0esUe+vXWlIkwZZjNWoOKw0ZA==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
+      "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
       "dev": true
     },
     "cssauron": {
@@ -17142,9 +16780,9 @@
       }
     },
     "date-format": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz",
-      "integrity": "sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz",
+      "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==",
       "dev": true
     },
     "debug": {
@@ -17385,9 +17023,9 @@
       "dev": true
     },
     "domhandler": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
-      "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
+      "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
       "dev": true,
       "requires": {
         "domelementtype": "^2.2.0"
@@ -17426,9 +17064,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.4.99",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.99.tgz",
-      "integrity": "sha512-YXMzbvlo6pW12KWw0bj6cIGCJi1Moy8PLCuuzgRzg6WYIcHILK3szU+HHnHFx2b373qRv+cfmHhbmRbatyAbPA==",
+      "version": "1.4.71",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz",
+      "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==",
       "dev": true
     },
     "emoji-regex": {
@@ -17470,9 +17108,9 @@
       }
     },
     "engine.io": {
-      "version": "6.1.3",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz",
-      "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz",
+      "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==",
       "dev": true,
       "requires": {
         "@types/cookie": "^0.4.1",
@@ -17483,7 +17121,7 @@
         "cookie": "~0.4.1",
         "cors": "~2.8.5",
         "debug": "~4.3.1",
-        "engine.io-parser": "~5.0.3",
+        "engine.io-parser": "~5.0.0",
         "ws": "~8.2.3"
       },
       "dependencies": {
@@ -17506,9 +17144,9 @@
       }
     },
     "enhanced-resolve": {
-      "version": "5.9.2",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz",
-      "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==",
+      "version": "5.9.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.0.tgz",
+      "integrity": "sha512-weDYmzbBygL7HzGGS26M3hGQx68vehdEg6VUmqSOaFzXExFqlnKuSvsEJCVGQHScS8CQMbrAqftT+AzzHNt/YA==",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.2.4",
@@ -17580,169 +17218,161 @@
       }
     },
     "esbuild": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz",
-      "integrity": "sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.14.tgz",
+      "integrity": "sha512-aiK4ddv+uui0k52OqSHu4xxu+SzOim7Rlz4i25pMEiC8rlnGU0HJ9r+ZMfdWL5bzifg+nhnn7x4NSWTeehYblg==",
       "dev": true,
       "optional": true,
       "requires": {
-        "esbuild-android-arm64": "0.14.22",
-        "esbuild-darwin-64": "0.14.22",
-        "esbuild-darwin-arm64": "0.14.22",
-        "esbuild-freebsd-64": "0.14.22",
-        "esbuild-freebsd-arm64": "0.14.22",
-        "esbuild-linux-32": "0.14.22",
-        "esbuild-linux-64": "0.14.22",
-        "esbuild-linux-arm": "0.14.22",
-        "esbuild-linux-arm64": "0.14.22",
-        "esbuild-linux-mips64le": "0.14.22",
-        "esbuild-linux-ppc64le": "0.14.22",
-        "esbuild-linux-riscv64": "0.14.22",
-        "esbuild-linux-s390x": "0.14.22",
-        "esbuild-netbsd-64": "0.14.22",
-        "esbuild-openbsd-64": "0.14.22",
-        "esbuild-sunos-64": "0.14.22",
-        "esbuild-windows-32": "0.14.22",
-        "esbuild-windows-64": "0.14.22",
-        "esbuild-windows-arm64": "0.14.22"
+        "esbuild-android-arm64": "0.14.14",
+        "esbuild-darwin-64": "0.14.14",
+        "esbuild-darwin-arm64": "0.14.14",
+        "esbuild-freebsd-64": "0.14.14",
+        "esbuild-freebsd-arm64": "0.14.14",
+        "esbuild-linux-32": "0.14.14",
+        "esbuild-linux-64": "0.14.14",
+        "esbuild-linux-arm": "0.14.14",
+        "esbuild-linux-arm64": "0.14.14",
+        "esbuild-linux-mips64le": "0.14.14",
+        "esbuild-linux-ppc64le": "0.14.14",
+        "esbuild-linux-s390x": "0.14.14",
+        "esbuild-netbsd-64": "0.14.14",
+        "esbuild-openbsd-64": "0.14.14",
+        "esbuild-sunos-64": "0.14.14",
+        "esbuild-windows-32": "0.14.14",
+        "esbuild-windows-64": "0.14.14",
+        "esbuild-windows-arm64": "0.14.14"
       }
     },
     "esbuild-android-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.22.tgz",
-      "integrity": "sha512-k1Uu4uC4UOFgrnTj2zuj75EswFSEBK+H6lT70/DdS4mTAOfs2ECv2I9ZYvr3w0WL0T4YItzJdK7fPNxcPw6YmQ==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.14.tgz",
+      "integrity": "sha512-be/Uw6DdpQiPfula1J4bdmA+wtZ6T3BRCZsDMFB5X+k0Gp8TIh9UvmAcqvKNnbRAafSaXG3jPCeXxDKqnc8hFQ==",
       "dev": true,
       "optional": true
     },
     "esbuild-darwin-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz",
-      "integrity": "sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.14.tgz",
+      "integrity": "sha512-BEexYmjWafcISK8cT6O98E3TfcLuZL8DKuubry6G54n2+bD4GkoRD6HYUOnCkfl2p7jodA+s4369IjSFSWjtHg==",
       "dev": true,
       "optional": true
     },
     "esbuild-darwin-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.22.tgz",
-      "integrity": "sha512-YAt9Tj3SkIUkswuzHxkaNlT9+sg0xvzDvE75LlBo4DI++ogSgSmKNR6B4eUhU5EUUepVXcXdRIdqMq9ppeRqfw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.14.tgz",
+      "integrity": "sha512-tnBKm41pDOB1GtZ8q/w26gZlLLRzVmP8fdsduYjvM+yFD7E2DLG4KbPAqFMWm4Md9B+DitBglP57FY7AznxbTg==",
       "dev": true,
       "optional": true
     },
     "esbuild-freebsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.22.tgz",
-      "integrity": "sha512-ek1HUv7fkXMy87Qm2G4IRohN+Qux4IcnrDBPZGXNN33KAL0pEJJzdTv0hB/42+DCYWylSrSKxk3KUXfqXOoH4A==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.14.tgz",
+      "integrity": "sha512-Q9Rx6sgArOHalQtNwAaIzJ6dnQ8A+I7f/RsQsdkS3JrdzmnlFo8JEVofTmwVQLoIop7OKUqIVOGP4PoQcwfVMA==",
       "dev": true,
       "optional": true
     },
     "esbuild-freebsd-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.22.tgz",
-      "integrity": "sha512-zPh9SzjRvr9FwsouNYTqgqFlsMIW07O8mNXulGeQx6O5ApgGUBZBgtzSlBQXkHi18WjrosYfsvp5nzOKiWzkjQ==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.14.tgz",
+      "integrity": "sha512-TJvq0OpLM7BkTczlyPIphcvnwrQwQDG1HqxzoYePWn26SMUAlt6wrLnEvxdbXAvNvDLVzG83kA+JimjK7aRNBA==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-32": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.22.tgz",
-      "integrity": "sha512-SnpveoE4nzjb9t2hqCIzzTWBM0RzcCINDMBB67H6OXIuDa4KqFqaIgmTchNA9pJKOVLVIKd5FYxNiJStli21qg==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.14.tgz",
+      "integrity": "sha512-h/CrK9Baimt5VRbu8gqibWV7e1P9l+mkanQgyOgv0Ng3jHT1NVFC9e6rb1zbDdaJVmuhWX5xVliUA5bDDCcJeg==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.22.tgz",
-      "integrity": "sha512-Zcl9Wg7gKhOWWNqAjygyqzB+fJa19glgl2JG7GtuxHyL1uEnWlpSMytTLMqtfbmRykIHdab797IOZeKwk5g0zg==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.14.tgz",
+      "integrity": "sha512-IC+wAiIg/egp5OhQp4W44D9PcBOH1b621iRn1OXmlLzij9a/6BGr9NMIL4CRwz4j2kp3WNZu5sT473tYdynOuQ==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-arm": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.22.tgz",
-      "integrity": "sha512-soPDdbpt/C0XvOOK45p4EFt8HbH5g+0uHs5nUKjHVExfgR7du734kEkXR/mE5zmjrlymk5AA79I0VIvj90WZ4g==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.14.tgz",
+      "integrity": "sha512-gxpOaHOPwp7zSmcKYsHrtxabScMqaTzfSQioAMUaB047YiMuDBzqVcKBG8OuESrYkGrL9DDljXr/mQNg7pbdaQ==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.22.tgz",
-      "integrity": "sha512-8q/FRBJtV5IHnQChO3LHh/Jf7KLrxJ/RCTGdBvlVZhBde+dk3/qS9fFsUy+rs3dEi49aAsyVitTwlKw1SUFm+A==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.14.tgz",
+      "integrity": "sha512-6QVul3RI4M5/VxVIRF/I5F+7BaxzR3DfNGoqEVSCZqUbgzHExPn+LXr5ly1C7af2Kw4AHpo+wDqx8A4ziP9avw==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-mips64le": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.22.tgz",
-      "integrity": "sha512-SiNDfuRXhGh1JQLLA9JPprBgPVFOsGuQ0yDfSPTNxztmVJd8W2mX++c4FfLpAwxuJe183mLuKf7qKCHQs5ZnBQ==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.14.tgz",
+      "integrity": "sha512-4Jl5/+xoINKbA4cesH3f4R+q0vltAztZ6Jm8YycS8lNhN1pgZJBDxWfI6HUMIAdkKlIpR1PIkA9aXQgZ8sxFAg==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-ppc64le": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.22.tgz",
-      "integrity": "sha512-6t/GI9I+3o1EFm2AyN9+TsjdgWCpg2nwniEhjm2qJWtJyJ5VzTXGUU3alCO3evopu8G0hN2Bu1Jhz2YmZD0kng==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-linux-riscv64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.22.tgz",
-      "integrity": "sha512-AyJHipZKe88sc+tp5layovquw5cvz45QXw5SaDgAq2M911wLHiCvDtf/07oDx8eweCyzYzG5Y39Ih568amMTCQ==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.14.tgz",
+      "integrity": "sha512-BitW37GxeebKxqYNl4SVuSdnIJAzH830Lr6Mkq3pBHXtzQay0vK+IeOR/Ele1GtNVJ+/f8wYM53tcThkv5SC5w==",
       "dev": true,
       "optional": true
     },
     "esbuild-linux-s390x": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.22.tgz",
-      "integrity": "sha512-Sz1NjZewTIXSblQDZWEFZYjOK6p8tV6hrshYdXZ0NHTjWE+lwxpOpWeElUGtEmiPcMT71FiuA9ODplqzzSxkzw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.14.tgz",
+      "integrity": "sha512-vLj6p76HOZG3wfuTr5MyO3qW5iu8YdhUNxuY+tx846rPo7GcKtYSPMusQjeVEfZlJpSYoR+yrNBBxq+qVF9zrw==",
       "dev": true,
       "optional": true
     },
     "esbuild-netbsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.22.tgz",
-      "integrity": "sha512-TBbCtx+k32xydImsHxvFgsOCuFqCTGIxhzRNbgSL1Z2CKhzxwT92kQMhxort9N/fZM2CkRCPPs5wzQSamtzEHA==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.14.tgz",
+      "integrity": "sha512-fn8looXPQhpVqUyCBWUuPjesH+yGIyfbIQrLKG05rr1Kgm3rZD/gaYrd3Wpmf5syVZx70pKZPvdHp8OTA+y7cQ==",
       "dev": true,
       "optional": true
     },
     "esbuild-openbsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.22.tgz",
-      "integrity": "sha512-vK912As725haT313ANZZZN+0EysEEQXWC/+YE4rQvOQzLuxAQc2tjbzlAFREx3C8+uMuZj/q7E5gyVB7TzpcTA==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.14.tgz",
+      "integrity": "sha512-HdAnJ399pPff3SKbd8g+P4o5znseni5u5n5rJ6Z7ouqOdgbOwHe2ofZbMow17WMdNtz1IyOZk2Wo9Ve6/lZ4Rg==",
       "dev": true,
       "optional": true
     },
     "esbuild-sunos-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.22.tgz",
-      "integrity": "sha512-/mbJdXTW7MTcsPhtfDsDyPEOju9EOABvCjeUU2OJ7fWpX/Em/H3WYDa86tzLUbcVg++BScQDzqV/7RYw5XNY0g==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.14.tgz",
+      "integrity": "sha512-bmDHa99ulsGnYlh/xjBEfxoGuC8CEG5OWvlgD+pF7bKKiVTbtxqVCvOGEZeoDXB+ja6AvHIbPxrEE32J+m5nqQ==",
       "dev": true,
       "optional": true
     },
     "esbuild-wasm": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz",
-      "integrity": "sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.14.tgz",
+      "integrity": "sha512-qTjK4MWnYtQHCMGg2qDUqeFYXfVvYq5qJkQTIsOV4VZCknoYePVaDTG9ygEB9Ct0kc0DWs7IrS6Ja+GjY62Kzw==",
       "dev": true
     },
     "esbuild-windows-32": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.22.tgz",
-      "integrity": "sha512-1vRIkuvPTjeSVK3diVrnMLSbkuE36jxA+8zGLUOrT4bb7E/JZvDRhvtbWXWaveUc/7LbhaNFhHNvfPuSw2QOQg==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.14.tgz",
+      "integrity": "sha512-6tVooQcxJCNenPp5GHZBs/RLu31q4B+BuF4MEoRxswT+Eq2JGF0ZWDRQwNKB8QVIo3t6Svc5wNGez+CwKNQjBg==",
       "dev": true,
       "optional": true
     },
     "esbuild-windows-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.22.tgz",
-      "integrity": "sha512-AxjIDcOmx17vr31C5hp20HIwz1MymtMjKqX4qL6whPj0dT9lwxPexmLj6G1CpR3vFhui6m75EnBEe4QL82SYqw==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.14.tgz",
+      "integrity": "sha512-kl3BdPXh0/RD/dad41dtzj2itMUR4C6nQbXQCyYHHo4zoUoeIXhpCrSl7BAW1nv5EFL8stT1V+TQVXGZca5A2A==",
       "dev": true,
       "optional": true
     },
     "esbuild-windows-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.22.tgz",
-      "integrity": "sha512-5wvQ+39tHmRhNpu2Fx04l7QfeK3mQ9tKzDqqGR8n/4WUxsFxnVLfDRBGirIfk4AfWlxk60kqirlODPoT5LqMUg==",
+      "version": "0.14.14",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.14.tgz",
+      "integrity": "sha512-dCm1wTOm6HIisLanmybvRKvaXZZo4yEVrHh1dY0v582GThXJOzuXGja1HIQgV09RpSHYRL3m4KoUBL00l6SWEg==",
       "dev": true,
       "optional": true
     },
@@ -17870,17 +17500,17 @@
       "optional": true
     },
     "express": {
-      "version": "4.17.3",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz",
-      "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==",
+      "version": "4.17.2",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz",
+      "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==",
       "dev": true,
       "requires": {
-        "accepts": "~1.3.8",
+        "accepts": "~1.3.7",
         "array-flatten": "1.1.1",
-        "body-parser": "1.19.2",
+        "body-parser": "1.19.1",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.4.2",
+        "cookie": "0.4.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "~1.1.2",
@@ -17895,7 +17525,7 @@
         "parseurl": "~1.3.3",
         "path-to-regexp": "0.1.7",
         "proxy-addr": "~2.0.7",
-        "qs": "6.9.7",
+        "qs": "6.9.6",
         "range-parser": "~1.2.1",
         "safe-buffer": "5.2.1",
         "send": "0.17.2",
@@ -17913,6 +17543,12 @@
           "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
           "dev": true
         },
+        "cookie": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+          "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+          "dev": true
+        },
         "debug": {
           "version": "2.6.9",
           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -18104,9 +17740,9 @@
       "dev": true
     },
     "follow-redirects": {
-      "version": "1.14.9",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
-      "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
+      "version": "1.14.8",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz",
+      "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==",
       "dev": true
     },
     "forever-agent": {
@@ -18133,9 +17769,9 @@
       "dev": true
     },
     "fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz",
+      "integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==",
       "dev": true
     },
     "fresh": {
@@ -18145,9 +17781,9 @@
       "dev": true
     },
     "fs-extra": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz",
-      "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==",
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
+      "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.2.0",
@@ -18190,19 +17826,20 @@
       "devOptional": true
     },
     "gauge": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
-      "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz",
+      "integrity": "sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw==",
       "dev": true,
       "requires": {
+        "ansi-regex": "^5.0.1",
         "aproba": "^1.0.3 || ^2.0.0",
-        "color-support": "^1.1.3",
-        "console-control-strings": "^1.1.0",
+        "color-support": "^1.1.2",
+        "console-control-strings": "^1.0.0",
         "has-unicode": "^2.0.1",
-        "signal-exit": "^3.0.7",
+        "signal-exit": "^3.0.0",
         "string-width": "^4.2.3",
         "strip-ansi": "^6.0.1",
-        "wide-align": "^1.1.5"
+        "wide-align": "^1.1.2"
       }
     },
     "gensync": {
@@ -18379,9 +18016,9 @@
       "devOptional": true
     },
     "has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+      "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
       "dev": true
     },
     "has-tostringtag": {
@@ -18464,9 +18101,9 @@
       }
     },
     "html-entities": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
-      "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==",
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
+      "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==",
       "dev": true
     },
     "html-escaper": {
@@ -18501,9 +18138,9 @@
       }
     },
     "http-parser-js": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz",
-      "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz",
+      "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==",
       "dev": true
     },
     "http-proxy": {
@@ -18529,9 +18166,9 @@
       }
     },
     "http-proxy-middleware": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz",
-      "integrity": "sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz",
+      "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==",
       "dev": true,
       "requires": {
         "@types/http-proxy": "^1.17.8",
@@ -18754,9 +18391,9 @@
           "dev": true
         },
         "rxjs": {
-          "version": "7.5.5",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-          "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+          "version": "7.5.4",
+          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz",
+          "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==",
           "dev": true,
           "requires": {
             "tslib": "^2.1.0"
@@ -18962,9 +18599,9 @@
       "devOptional": true
     },
     "isbinaryfile": {
-      "version": "4.0.10",
-      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
-      "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
+      "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==",
       "dev": true
     },
     "isexe": {
@@ -19232,9 +18869,9 @@
       }
     },
     "jasmine-core": {
-      "version": "3.99.1",
-      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz",
-      "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==",
+      "version": "3.99.0",
+      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.0.tgz",
+      "integrity": "sha512-+ZDaJlEfRopINQqgE+hvzRyDIQDeKfqqTvF8RzXsvU1yE3pBDRud2+Qfh9WvGgRpuzqxyQJVI6Amy5XQ11r/3w==",
       "dev": true
     },
     "jasmine-spec-reporter": {
@@ -19344,10 +18981,13 @@
       "optional": true
     },
     "json5": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
-      "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
-      "dev": true
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+      "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5"
+      }
     },
     "jsonc-parser": {
       "version": "3.0.0",
@@ -19427,15 +19067,15 @@
       "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
     },
     "karma": {
-      "version": "6.3.17",
-      "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.17.tgz",
-      "integrity": "sha512-2TfjHwrRExC8yHoWlPBULyaLwAFmXmxQrcuFImt/JsAsSZu1uOWTZ1ZsWjqQtWpHLiatJOHL5jFjXSJIgCd01g==",
+      "version": "6.3.16",
+      "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.16.tgz",
+      "integrity": "sha512-nEU50jLvDe5yvXqkEJRf8IuvddUkOY2x5Xc4WXHz6dxINgGDrgD2uqQWeVrJs4hbfNaotn+HQ1LZJ4yOXrL7xQ==",
       "dev": true,
       "requires": {
-        "@colors/colors": "1.5.0",
         "body-parser": "^1.19.0",
         "braces": "^3.0.2",
         "chokidar": "^3.5.1",
+        "colors": "1.4.0",
         "connect": "^3.7.0",
         "di": "^0.0.1",
         "dom-serialize": "^2.2.1",
@@ -19458,13 +19098,19 @@
         "yargs": "^16.1.1"
       },
       "dependencies": {
+        "colors": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+          "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+          "dev": true
+        },
         "mkdirp": {
-          "version": "0.5.6",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-          "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+          "version": "0.5.5",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+          "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
           "dev": true,
           "requires": {
-            "minimist": "^1.2.6"
+            "minimist": "^1.2.5"
           }
         },
         "source-map": {
@@ -19506,9 +19152,9 @@
       }
     },
     "karma-chrome-launcher": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz",
-      "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
+      "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
       "dev": true,
       "requires": {
         "which": "^1.2.1"
@@ -19630,9 +19276,9 @@
       }
     },
     "license-webpack-plugin": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz",
-      "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.1.tgz",
+      "integrity": "sha512-SQum9mg3BgnY5BK+2KYl4W7pk9b26Q8tW2lTsO6tidD0/Ds9ksdXvp3ip2s9LqDjj5gtBMyWRfOPZptWj4PfCg==",
       "dev": true,
       "requires": {
         "webpack-sources": "^3.0.0"
@@ -19748,27 +19394,16 @@
       }
     },
     "log4js": {
-      "version": "6.4.4",
-      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.4.tgz",
-      "integrity": "sha512-ncaWPsuw9Vl1CKA406hVnJLGQKy1OHx6buk8J4rE2lVW+NW5Y82G5/DIloO7NkqLOUtNPEANaWC1kZYVjXssPw==",
+      "version": "6.4.1",
+      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz",
+      "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==",
       "dev": true,
       "requires": {
-        "date-format": "^4.0.6",
-        "debug": "^4.3.4",
-        "flatted": "^3.2.5",
+        "date-format": "^4.0.3",
+        "debug": "^4.3.3",
+        "flatted": "^3.2.4",
         "rfdc": "^1.3.0",
-        "streamroller": "^3.0.6"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        }
+        "streamroller": "^3.0.2"
       }
     },
     "lru-cache": {
@@ -19876,13 +19511,13 @@
       "dev": true
     },
     "micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+      "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
       "dev": true,
       "requires": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
+        "braces": "^3.0.1",
+        "picomatch": "^2.2.3"
       }
     },
     "mime": {
@@ -19892,18 +19527,18 @@
       "dev": true
     },
     "mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "version": "1.51.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+      "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
       "devOptional": true
     },
     "mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "version": "2.1.34",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+      "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
       "devOptional": true,
       "requires": {
-        "mime-db": "1.52.0"
+        "mime-db": "1.51.0"
       }
     },
     "mimic-fn": {
@@ -19951,9 +19586,9 @@
       }
     },
     "minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "devOptional": true
     },
     "minipass": {
@@ -20068,9 +19703,9 @@
       "dev": true
     },
     "nanoid": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
-      "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.0.tgz",
+      "integrity": "sha512-JzxqqT5u/x+/KOFSd7JP15DOo9nOoHpx6DYatqIHUW2+flybkm+mdcraotSQR5WcnZr+qhGVh8Ted0KdfSMxlg==",
       "dev": true
     },
     "needle": {
@@ -20110,9 +19745,9 @@
       "dev": true
     },
     "ngx-toastr": {
-      "version": "14.2.2",
-      "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-14.2.2.tgz",
-      "integrity": "sha512-/Ajr9E0llr51Zij8WgnxQpe7a5JK+k1n07/uWJcQ112OBH0GCktHi8M8QfGvw5Ih67hG8iowrT+aHXHS49gZcQ==",
+      "version": "14.2.1",
+      "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-14.2.1.tgz",
+      "integrity": "sha512-1Kq//y8tTgglUYKHIziZwpo4R7fe4/neidcxfbAXzXtcViSjT4Z21Vgqn/inoBlwoc7E9qXQDuZoJr2lanCgGA==",
       "requires": {
         "tslib": "^2.3.0"
       }
@@ -20144,9 +19779,9 @@
       }
     },
     "node-forge": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz",
-      "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz",
+      "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==",
       "dev": true
     },
     "node-gyp": {
@@ -20285,48 +19920,12 @@
         "npm-package-arg": "^8.1.5"
       },
       "dependencies": {
-        "@npmcli/fs": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz",
-          "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==",
-          "dev": true,
-          "requires": {
-            "@gar/promisify": "^1.1.3",
-            "semver": "^7.3.5"
-          }
-        },
         "@tootallnate/once": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
           "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
           "dev": true
         },
-        "cacache": {
-          "version": "16.0.3",
-          "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.3.tgz",
-          "integrity": "sha512-eC7wYodNCVb97kuHGk5P+xZsvUJHkhSEOyNwkenqQPAsOtrTjvWOE5vSPNBpz9d8X3acIf6w2Ub5s4rvOCTs4g==",
-          "dev": true,
-          "requires": {
-            "@npmcli/fs": "^2.1.0",
-            "@npmcli/move-file": "^1.1.2",
-            "chownr": "^2.0.0",
-            "fs-minipass": "^2.1.0",
-            "glob": "^7.2.0",
-            "infer-owner": "^1.0.4",
-            "lru-cache": "^7.7.1",
-            "minipass": "^3.1.6",
-            "minipass-collect": "^1.0.2",
-            "minipass-flush": "^1.0.5",
-            "minipass-pipeline": "^1.2.4",
-            "mkdirp": "^1.0.4",
-            "p-map": "^4.0.0",
-            "promise-inflight": "^1.0.1",
-            "rimraf": "^3.0.2",
-            "ssri": "^8.0.1",
-            "tar": "^6.1.11",
-            "unique-filename": "^1.1.1"
-          }
-        },
         "http-proxy-agent": {
           "version": "5.0.0",
           "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
@@ -20339,47 +19938,33 @@
           }
         },
         "lru-cache": {
-          "version": "7.7.1",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz",
-          "integrity": "sha512-cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw==",
+          "version": "7.3.1",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.3.1.tgz",
+          "integrity": "sha512-nX1x4qUrKqwbIAhv4s9et4FIUVzNOpeY07bsjGUy8gwJrXH/wScImSQqXErmo/b2jZY2r0mohbLA9zVj7u1cNw==",
           "dev": true
         },
         "make-fetch-happen": {
-          "version": "10.1.1",
-          "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.1.tgz",
-          "integrity": "sha512-3/mCljDQNjmrP7kl0vhS5WVlV+TvSKoZaFhdiYV7MOijEnrhrjaVnqbp/EY/7S+fhUB2KpH7j8c1iRsIOs+kjw==",
+          "version": "10.0.3",
+          "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.3.tgz",
+          "integrity": "sha512-CzarPHynPpHjhF5in/YapnO44rSZeYX5VCMfdXa99+gLwpbfFLh20CWa6dP/taV9Net9PWJwXNKtp/4ZTCQnag==",
           "dev": true,
           "requires": {
-            "agentkeepalive": "^4.2.1",
-            "cacache": "^16.0.2",
+            "agentkeepalive": "^4.2.0",
+            "cacache": "^15.3.0",
             "http-cache-semantics": "^4.1.0",
             "http-proxy-agent": "^5.0.0",
             "https-proxy-agent": "^5.0.0",
             "is-lambda": "^1.0.1",
-            "lru-cache": "^7.7.1",
+            "lru-cache": "^7.3.1",
             "minipass": "^3.1.6",
             "minipass-collect": "^1.0.2",
-            "minipass-fetch": "^2.0.3",
+            "minipass-fetch": "^1.4.1",
             "minipass-flush": "^1.0.5",
             "minipass-pipeline": "^1.2.4",
             "negotiator": "^0.6.3",
             "promise-retry": "^2.0.1",
             "socks-proxy-agent": "^6.1.1",
             "ssri": "^8.0.1"
-          },
-          "dependencies": {
-            "minipass-fetch": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz",
-              "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==",
-              "dev": true,
-              "requires": {
-                "encoding": "^0.1.13",
-                "minipass": "^3.1.6",
-                "minipass-sized": "^1.0.3",
-                "minizlib": "^2.1.2"
-              }
-            }
           }
         }
       }
@@ -20472,6 +20057,11 @@
         "serialize-javascript": "^4.0.0"
       },
       "dependencies": {
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+        },
         "serialize-javascript": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
@@ -20888,12 +20478,12 @@
           }
         },
         "mkdirp": {
-          "version": "0.5.6",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-          "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+          "version": "0.5.5",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+          "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
           "dev": true,
           "requires": {
-            "minimist": "^1.2.6"
+            "minimist": "^1.2.5"
           }
         }
       }
@@ -20953,9 +20543,9 @@
       "requires": {}
     },
     "postcss-custom-properties": {
-      "version": "12.1.5",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.5.tgz",
-      "integrity": "sha512-FHbbB/hRo/7cxLGkc2NS7cDRIDN1oFqQnUKBiyh4b/gwk8DD8udvmRDpUhEK836kB8ggUCieHVOvZDnF9XhI3g==",
+      "version": "12.1.4",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.4.tgz",
+      "integrity": "sha512-i6AytuTCoDLJkWN/MtAIGriJz3j7UX6bV7Z5t+KgFz+dwZS15/mlTJY1S0kRizlk6ba0V8u8hN50Fz5Nm7tdZw==",
       "dev": true,
       "requires": {
         "postcss-value-parser": "^4.2.0"
@@ -20980,19 +20570,18 @@
       }
     },
     "postcss-double-position-gradients": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz",
-      "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==",
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.5.tgz",
+      "integrity": "sha512-XiZzvdxLOWZwtt/1GgHJYGoD9scog/DD/yI5dcvPrXNdNDEv7T53/6tL7ikl+EM3jcerII5/XIQzd1UHOdTi2w==",
       "dev": true,
       "requires": {
-        "@csstools/postcss-progressive-custom-properties": "^1.1.0",
         "postcss-value-parser": "^4.2.0"
       }
     },
     "postcss-env-function": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz",
-      "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.5.tgz",
+      "integrity": "sha512-gPUJc71ji9XKyl0WSzAalBeEA/89kU+XpffpPxSaaaZ1c48OL36r1Ep5R6+9XAPkIiDlSvVAwP4io12q/vTcvA==",
       "dev": true,
       "requires": {
         "postcss-value-parser": "^4.2.0"
@@ -21058,9 +20647,9 @@
       "requires": {}
     },
     "postcss-lab-function": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.1.2.tgz",
-      "integrity": "sha512-isudf5ldhg4fk16M8viAwAbg6Gv14lVO35N3Z/49NhbwPQ2xbiEoHgrRgpgQojosF4vF7jY653ktB6dDrUOR8Q==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.1.0.tgz",
+      "integrity": "sha512-59uHN/2wRaOd7whDyeaJ82E0kncIEeJkwcmvXFPNus8v1YMhtv2IUo9OtOAncn7sifZVMRsyoPlhxwckTjn4cQ==",
       "dev": true,
       "requires": {
         "@csstools/postcss-progressive-custom-properties": "^1.1.0",
@@ -21129,12 +20718,12 @@
       }
     },
     "postcss-nesting": {
-      "version": "10.1.3",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.3.tgz",
-      "integrity": "sha512-wUC+/YCik4wH3StsbC5fBG1s2Z3ZV74vjGqBFYtmYKlVxoio5TYGM06AiaKkQPPlkXWn72HKfS7Cw5PYxnoXSw==",
+      "version": "10.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.2.tgz",
+      "integrity": "sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ==",
       "dev": true,
       "requires": {
-        "postcss-selector-parser": "^6.0.9"
+        "postcss-selector-parser": "^6.0.8"
       }
     },
     "postcss-overflow-shorthand": {
@@ -21513,9 +21102,9 @@
       "dev": true
     },
     "qs": {
-      "version": "6.9.7",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
-      "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
+      "version": "6.9.6",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
+      "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==",
       "dev": true
     },
     "querystringify": {
@@ -21544,12 +21133,12 @@
       "dev": true
     },
     "raw-body": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz",
-      "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==",
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
+      "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
       "dev": true,
       "requires": {
-        "bytes": "3.1.2",
+        "bytes": "3.1.1",
         "http-errors": "1.8.1",
         "iconv-lite": "0.4.24",
         "unpipe": "1.0.0"
@@ -22027,12 +21616,12 @@
       }
     },
     "selfsigned": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz",
-      "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz",
+      "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==",
       "dev": true,
       "requires": {
-        "node-forge": "^1"
+        "node-forge": "^1.2.0"
       }
     },
     "semver": {
@@ -22455,25 +22044,14 @@
       "dev": true
     },
     "streamroller": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.6.tgz",
-      "integrity": "sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz",
+      "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==",
       "dev": true,
       "requires": {
-        "date-format": "^4.0.6",
-        "debug": "^4.3.4",
-        "fs-extra": "^10.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        }
+        "date-format": "^4.0.3",
+        "debug": "^4.1.1",
+        "fs-extra": "^10.0.0"
       }
     },
     "string_decoder": {
@@ -22656,23 +22234,14 @@
       }
     },
     "terser": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz",
-      "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==",
+      "version": "5.10.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
+      "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
       "dev": true,
       "requires": {
-        "acorn": "^8.5.0",
         "commander": "^2.20.0",
         "source-map": "~0.7.2",
         "source-map-support": "~0.5.20"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "8.7.0",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
-          "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
-          "dev": true
-        }
       }
     },
     "terser-webpack-plugin": {
@@ -22867,12 +22436,12 @@
       },
       "dependencies": {
         "mkdirp": {
-          "version": "0.5.6",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-          "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+          "version": "0.5.5",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+          "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
           "devOptional": true,
           "requires": {
-            "minimist": "^1.2.6"
+            "minimist": "^1.2.5"
           }
         },
         "semver": {
@@ -22938,15 +22507,15 @@
       }
     },
     "typed-assert": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
-      "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.8.tgz",
+      "integrity": "sha512-5NkbXZUlmCE73Fs7gvkp1XXJWHYetPkg60QnQ2NXQmBYNFxbBr2zA8GCtaH4K2s2WhOmSlgiSTmrjrcm5tnM5g==",
       "dev": true
     },
     "typescript": {
-      "version": "4.6.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
-      "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
+      "version": "4.5.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+      "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
       "devOptional": true
     },
     "ua-parser-js": {
@@ -23023,9 +22592,9 @@
       }
     },
     "url-parse": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "version": "1.5.6",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz",
+      "integrity": "sha512-xj3QdUJ1DttD1LeSfvJlU1eiF1RvBSBfUu8GplFGdUzSO28y5yUtEl7wb//PI4Af6qh0o/K8545vUmucRrfWsw==",
       "requires": {
         "querystringify": "^2.1.1",
         "requires-port": "^1.0.0"
@@ -23207,13 +22776,13 @@
       "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
     },
     "webpack": {
-      "version": "5.70.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz",
-      "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==",
+      "version": "5.67.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz",
+      "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==",
       "dev": true,
       "requires": {
-        "@types/eslint-scope": "^3.7.3",
-        "@types/estree": "^0.0.51",
+        "@types/eslint-scope": "^3.7.0",
+        "@types/estree": "^0.0.50",
         "@webassemblyjs/ast": "1.11.1",
         "@webassemblyjs/wasm-edit": "1.11.1",
         "@webassemblyjs/wasm-parser": "1.11.1",
@@ -23221,7 +22790,7 @@
         "acorn-import-assertions": "^1.7.6",
         "browserslist": "^4.14.5",
         "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.9.2",
+        "enhanced-resolve": "^5.8.3",
         "es-module-lexer": "^0.9.0",
         "eslint-scope": "5.1.1",
         "events": "^3.2.0",
@@ -23238,19 +22807,6 @@
         "webpack-sources": "^3.2.3"
       },
       "dependencies": {
-        "acorn": {
-          "version": "8.7.0",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
-          "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
-          "dev": true
-        },
-        "acorn-import-assertions": {
-          "version": "1.8.0",
-          "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
-          "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
-          "dev": true,
-          "requires": {}
-        },
         "ajv": {
           "version": "6.12.6",
           "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -23613,9 +23169,9 @@
       "dev": true
     },
     "yargs": {
-      "version": "17.4.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz",
-      "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==",
+      "version": "17.3.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz",
+      "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==",
       "dev": true,
       "requires": {
         "cliui": "^7.0.2",
@@ -23628,9 +23184,9 @@
       }
     },
     "yargs-parser": {
-      "version": "21.0.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
-      "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
+      "version": "21.0.0",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
+      "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==",
       "dev": true
     },
     "yn": {
@@ -23640,11 +23196,11 @@
       "optional": true
     },
     "zone.js": {
-      "version": "0.11.5",
-      "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.5.tgz",
-      "integrity": "sha512-D1/7VxEuQ7xk6z/kAROe4SUbd9CzxY4zOwVGnGHerd/SgLIVU5f4esDzQUsOCeArn933BZfWMKydH7l7dPEp0g==",
+      "version": "0.11.4",
+      "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz",
+      "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==",
       "requires": {
-        "tslib": "^2.3.0"
+        "tslib": "^2.0.0"
       }
     }
   }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/package.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/package.json
similarity index 62%
rename from src/Server/Coderr.Server.WebSite/ClientApp/package.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/package.json
index 1648fb43..9e6eaf1f 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/package.json
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/package.json
@@ -1,27 +1,27 @@
 {
-  "name": "coderr-frontend",
-  "version": "3.0.0-rc01",
+  "name": "coderrangular2",
+  "version": "0.0.0",
   "scripts": {
     "ng": "ng",
     "start": "ngserve",
     "build": "ng build",
-    "build:ssr": "ng run coderr-frontend:server:dev",
+    "build:ssr": "ng run CoderrAngular2:server:dev",
     "test": "ng test",
     "lint": "ng lint",
     "e2e": "ng e2e"
   },
   "private": true,
   "dependencies": {
-    "@angular/animations": "^13.3.0",
-    "@angular/common": "^13.3.0",
-    "@angular/core": "13.3.0",
-    "@angular/forms": "^13.3.0",
-    "@angular/platform-browser": "^13.3.0",
-    "@angular/platform-browser-dynamic": "^13.3.0",
-    "@angular/platform-server": "^13.3.0",
-    "@angular/router": "^13.3.0",
+    "@angular/animations": "^13.2.2",
+    "@angular/common": "^13.2.2",
+    "@angular/core": "13.2.2",
+    "@angular/forms": "^13.2.2",
+    "@angular/platform-browser": "^13.2.2",
+    "@angular/platform-browser-dynamic": "^13.2.2",
+    "@angular/platform-server": "^13.2.2",
+    "@angular/router": "^13.2.2",
     "@microsoft/signalr": "^6.0.2",
-    "@popperjs/core": "^2.11.4",
+    "@popperjs/core": "^2.11.2",
     "apexcharts": "^3.29.0",
     "bootstrap": "^4.6.1",
     "core-js": "^3.19.0",
@@ -36,11 +36,11 @@
     "zone.js": "~0.11.4"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "^13.3.0",
-    "@angular/cli": "^13.3.0",
-    "@angular/compiler": "^13.3.0",
-    "@angular/compiler-cli": "^13.3.0",
-    "@angular/language-service": "^13.3.0",
+    "@angular-devkit/build-angular": "^13.2.3",
+    "@angular/cli": "^13.2.3",
+    "@angular/compiler": "^13.2.2",
+    "@angular/compiler-cli": "^13.2.2",
+    "@angular/language-service": "^13.2.2",
     "@types/jasmine": "~3.4.4",
     "@types/jasminewd2": "^2.0.10",
     "@types/node": "~12.11.6",
@@ -59,4 +59,4 @@
     "ts-node": "~8.4.1",
     "tslint": "~5.20.0"
   }
-}
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/Dropdown.js b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/Dropdown.js
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/Dropdown.js
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/Dropdown.js
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/Dropdown.js.map b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/Dropdown.js.map
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/Dropdown.js.map
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/Dropdown.js.map
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/Dropdown.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/Dropdown.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/Dropdown.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/Dropdown.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/Guide.js b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/Guide.js
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/Guide.js
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/Guide.js
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/Guide.js.map b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/Guide.js.map
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/Guide.js.map
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/Guide.js.map
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/Guide.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/Guide.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/Guide.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/Guide.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/api-authorization.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.guard.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.interceptor.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.ts
similarity index 94%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.ts
index 6aa764bf..b609355a 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/api-authorization/authorize.service.ts
@@ -128,15 +128,15 @@ export class AuthorizeService {
         continue;
       }
       switch (key) {
-        case "aud":
-        case "exp":
-        case "iat":
-        case "iss":
-        case "nbf":
-        case "unique_name":
-          break;
-        default:
-          claims[key] = tokenInfo[key];
+      case "aud":
+      case "exp":
+      case "iat":
+      case "iss":
+      case "nbf":
+      case "unique_name":
+        break;
+      default:
+        claims[key] = tokenInfo[key];
       }
     }
 
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/PromiseWrapper.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/PromiseWrapper.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/PromiseWrapper.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/PromiseWrapper.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/controls.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/controls.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/controls.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/controls.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/guide/guide.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/_controls/modal/modal.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.module.ts
similarity index 90%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.module.ts
index 503176bd..f15ada93 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.module.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.module.ts
@@ -39,14 +39,8 @@ const routes: Routes = [
 
 @NgModule({
   declarations: [
-    LoginComponent,
-    LogoutComponent,
-    SettingsComponent,
-    NotificationsComponent,
-    ProfileComponent,
-    NavbarComponent,
-    RegisterComponent,
-    ActivateComponent
+    LoginComponent, LogoutComponent, SettingsComponent, NotificationsComponent, ProfileComponent, NavbarComponent,
+    RegisterComponent, ActivateComponent
   ],
   imports: [
     ControlsModule,
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.ts
similarity index 99%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.ts
index ef858fc1..d35d1063 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/account.service.ts
@@ -90,7 +90,7 @@ export class AccountService {
       throw new Error(json.errorMessage);
     }
 
-
+    
   }
 
   private async loadUsers() {
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/activate.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.html
similarity index 96%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.html
index 88df41b5..2ad6f360 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.html
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.html
@@ -1,8 +1,6 @@
 <div style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center;">
   <style>
-    .error {
-      color: red;
-    }
+    .error{ color: red;}
   </style>
   <div class="panel" style="max-width: 600px;">
     <div>
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.ts
similarity index 95%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.ts
index d033808b..70436d5e 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/login.component.ts
@@ -35,6 +35,7 @@ export class LoginComponent {
           this.router.navigate([this.returnUrl]);
         }
       }).catch(e => {
+        console.log('got error ', e, e.description)
         this.errorMessage = e.message.replace(/\n/g, "<br>\n");
       });
 
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/logout.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/register.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/navbar/navbar.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/notifications/notifications.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/profile/profile.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/accounts/settings/settings.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin-main/admin-main.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.ts
similarity index 96%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.ts
index 123a5412..00930bc8 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.component.ts
@@ -42,6 +42,7 @@ export class AdminComponent {
         this.loginForm.reset();
         this.router.navigate([this.returnUrl]);
       }).catch(e => {
+        console.log('got error ', e, e.description)
         this.errorMessage = e.message.replace(/\n/g, "<br>\n");
       });
 
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/admin.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-key.model.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/api-keys.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/create/create.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/details/details.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/edit/edit.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/apikeys/list/list.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.ts
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.ts
index 572fa4a9..b2056924 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/app-create/create.component.ts
@@ -62,6 +62,7 @@ export class CreateApplicationComponent implements OnInit, OnDestroy {
         this.router.navigate(['/']);
       }).catch(e => {
         this.closed.emit({ success: false, error: e });
+        console.log('got error ', e, e.description);
         this.errorMessage = e.message.replace(/\n/g, "<br>\n");
       });
 
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/add/add.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/application-groups.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/details/details.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/edit/edit.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.model.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/group.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.ts
similarity index 98%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.ts
index f57f34e2..4d3fe282 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/groups/list/list.component.ts
@@ -40,6 +40,7 @@ export class GroupListComponent implements OnInit, OnDestroy {
   }
 
   onGroupCreated(e: IGroupCreated) {
+    console.log(e);
     if (e.success) {
       this.groups.push(e.group);
     }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/navbar/navbar.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/add/add.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/details/details.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/edit/edit.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/list/list.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.model.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/admin/whitelist/whitelist.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/app.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/app.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/app.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/app.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/app.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/app.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/app.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/app.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/app.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/app.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/app.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/app.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/app.server.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/app.server.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/app.server.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/app.server.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/configure/configure.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/edit/edit.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.ts
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.ts
index 9217da66..2122dc4b 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/edit/edit.component.ts
@@ -46,6 +46,7 @@ export class EditComponent implements OnInit, OnDestroy {
   }
 
   async save(): Promise<void> {
+    console.log('storing ', this.environment);
     await this.service.update(this.environment);
     this.router.navigate(['/application', this.applicationId, 'admin']);
   }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.ts
similarity index 99%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.ts
index 8ebe49d3..97864d92 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environment.service.ts
@@ -49,6 +49,7 @@ export class EnvironmentService {
 
   async get(applicationId: number, id: number) {
     var envs = await this.list(applicationId);
+    console.log('found', envs);
 
     var entry = envs.find(x => x.id === id);
     if (!entry) {
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environments.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environments.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environments.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/environments.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.ts
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.ts
index 876fd270..36ec9502 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/list/list.component.ts
@@ -22,6 +22,7 @@ export class EnvironmentListComponent implements OnInit, OnDestroy {
   ngOnInit(): void {
     this.sub = this.route.params.subscribe(params => {
       this.applicationId = +params['applicationId'];
+      console.log('params', params);
       this.load();
     });
   }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/environments/new/new.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.ts
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.ts
index 78fe0e7d..094cd013 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/home/home.component.ts
@@ -34,6 +34,7 @@ export class AdminHomeComponent implements OnInit, OnDestroy {
       this.service.get(this.applicationId).then(x => {
         this.sharedSecret = x.sharedSecret;
         this.appKey = x.appKey;
+        console.log('loaded');
         this.menuService.updateNav([
           { title: x.name, route: ['application', x.id] },
           { title: "Administration", route: ['application', x.id, 'admin'] }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.html
similarity index 54%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.html
index 4dcff9e8..6576c18f 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.html
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.html
@@ -2,26 +2,26 @@
   <h2>Manage members</h2>
   <table class="table">
     <thead>
-    <tr>
-      <th>Name</th>
-      <th>Permission</th>
-      <th>&nbsp;</th>
-    </tr>
+      <tr>
+        <th>Name</th>
+        <th>Permission</th>
+        <th>&nbsp;</th>
+      </tr>
     </thead>
     <tbody>
-    <tr *ngFor="let member of members">
-      <td>
-        {{member.userName}}
-      </td>
-      <td>
-        {{member.isAdmin?'Administrator': member.isInvited ? 'Invited' : 'Member'}}
-      </td>
-      <td>
-        <button class="btn small light" *ngIf="isAdmin && member.isAdmin" (click)="demote(member)">Demote to user</button>
-        <button class="btn small light" *ngIf="isAdmin && !member.isAdmin && !member.isInvited" (click)="promote(member)">Promote to administrator</button>
-        <button class="btn small light" *ngIf="isAdmin && !member.isInvited" (click)="remove(member)">Remove user</button>
-      </td>
-    </tr>
+      <tr *ngFor="let member of members">
+        <td>
+          {{member.userName}}
+        </td>
+        <td>
+          {{member.isAdmin?'Administrator': member.isInvited ? 'Invited' : 'Member'}}
+        </td>
+        <td>
+          <button class="btn small light" *ngIf="isAdmin && member.isAdmin" (click)="demote(member)">Demote to user</button>
+          <button class="btn small light" *ngIf="isAdmin && !member.isAdmin && !member.isInvited" (click)="promote(member)">Promote to administrator</button>
+          <button class="btn small light" *ngIf="isAdmin && !member.isInvited" (click)="remove(member)">Remove user</button>
+        </td>
+      </tr>
     </tbody>
   </table>
   <div>
@@ -37,7 +37,7 @@ <h2>Add team member</h2>
       <select [(ngModel)]="selectedAccountId" name="selectedAccountId">
         <option *ngFor="let user of users" [value]="user.id">{{user.userName}}</option>
       </select>
-      <br />
+      <br/>
       <label>.. or invite someone:</label>
       <input type="email" [(ngModel)]="inviteEmail" name="inviteEmail" placeholder="Enter email address" />
       <div>
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.ts
similarity index 98%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.ts
index dc489ca6..d4d71c19 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/list/list.component.ts
@@ -26,7 +26,7 @@ export class TeamListComponent implements OnInit {
   constructor(private service: ApplicationService,
     private accountService: AccountService,
     private authService: AuthorizeService,
-    route: ActivatedRoute,
+        route: ActivatedRoute,
     private modalService: ModalService,
     private noticeService: ToastrService,
     private menuService: NavMenuService) {
@@ -62,7 +62,7 @@ export class TeamListComponent implements OnInit {
 
   async addUser(): Promise<void> {
     this.hideShowAdd();
-
+    
     if (this.inviteEmail.length > 0) {
       await this.service.inviteUser(this.applicationId, this.inviteEmail);
       this.members.push({ accountId: -1, isAdmin: false, userName: this.inviteEmail, isInvited: true });
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/members.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/members/new/new.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.ts
similarity index 95%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.ts
index 4b0687fe..3ee48fe2 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/edit/edit.component.ts
@@ -36,6 +36,7 @@ export class PartitionEditComponent implements OnInit {
   }
 
   async save(): Promise<void> {
+    console.log('backendPart', this.backendPartition);
     copy(this.partition,
       this.backendPartition,
       {
@@ -43,6 +44,7 @@ export class PartitionEditComponent implements OnInit {
         numericFields: ['weight', 'numberOfItems', 'importantThreshold', 'criticalThreshold'],
         skipExistenceCheck: true
       });
+    console.log('backendPart2', this.backendPartition);
 
     await this.partitionService.update(this.backendPartition);
 
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/list/list.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/new/new.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partition.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partitions.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partitions.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partitions.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/admin/partitions/partitions.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.model.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.ts
similarity index 98%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.ts
index 2ba014bf..f66cd171 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/application.service.ts
@@ -85,7 +85,7 @@ export class ApplicationService implements ISubscriber, OnDestroy {
         isInvited: false
       }
     ];
-
+    console.log('got event', event);
     var groups = cmd.groupId ? [cmd.groupId] : [];
     var app = new Application(event.body.applicationId, cmd.name, groups, true, members);
 
@@ -123,6 +123,7 @@ export class ApplicationService implements ISubscriber, OnDestroy {
 
     let existingApp = this.apps.find(x => x.id === applicationId);
     if (existingApp != null && existingApp.latestIncidentDate != null) {
+      console.log('returning existing', existingApp);
       return existingApp;
     }
 
@@ -143,6 +144,7 @@ export class ApplicationService implements ISubscriber, OnDestroy {
 
     loadedApp.totalIncidentCount = result.totalIncidentCount;
     loadedApp.latestIncidentDate = result.lastIncidentAtUtc;
+    console.log('loading new', loadedApp);
     loadedApp.versions = result.versions;
 
     if (existingApp == null) {
@@ -325,7 +327,7 @@ export class ApplicationService implements ISubscriber, OnDestroy {
       if (result.length > 0) {
         this.selectApplication(result[0].id);
       }
-
+      
 
       this.loadPromise.accept(null);
       this.isLoadingApps = false;
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.ts
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.ts
index ade41bfb..47088f01 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/insights/insightchart.component.ts
@@ -28,6 +28,7 @@ export class InsightChartComponent implements OnInit, OnDestroy {
   }
 
   set applicationId(applicationId: number) {
+    console.log('loading insight chart for ', applicationId);
     this._applicationId = applicationId;
     this.loadStats();
     this.resetTimer();
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.ts
similarity index 94%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.ts
index 737e7952..535cecdf 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/metric/metric.component.ts
@@ -28,6 +28,7 @@ export class MetricComponent implements OnInit, OnDestroy {
   }
 
   set applicationId(applicationId: number) {
+    console.log('loading insight chart for ', applicationId);
     this._applicationId = applicationId;
     this.loadStats();
     this.resetTimer();
@@ -44,10 +45,12 @@ export class MetricComponent implements OnInit, OnDestroy {
 
   private resetTimer() {
     clearInterval(this._timer);
+    console.log('Refeshinfg in ', this.refreshSeconds)
     this._timer = setInterval(() => this.reloadStats(), this.refreshSeconds * 1000);
   }
 
   private async reloadStats(): Promise<object> {
+    console.log('reloading chartY ', this.chartId);
 
     const query = new api.GetPartitionInsights();
     query.applicationIds = [this.applicationId];
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/charts/summary/summary.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/details.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/home/home.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/details/navbar/navbar.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/groups/selector.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/dashboard/dashboard.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/applications/insights/details/details.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/cloud/cloud.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/cloud/cloud.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/cloud/cloud.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/cloud/cloud.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/c/c.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/c/c.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/c/c.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/c/c.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/commercial.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/commercial.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/commercial.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/commercial.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/devops.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/devops.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/devops.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/devops.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.html
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.html
index ad830f04..0176ef41 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.html
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.html
@@ -73,12 +73,12 @@ <h3>Project information</h3>
                   {{ name }}
                 </option>
               </select>
-              <em class="small">Which type of work item should be created for errors?</em>
+              <em class="small">Which type of work item should be created for incidents?</em>
             </div>
             <fieldset v-bind:disabled="!isWorkItemTypeSelected">
               <div class="form-group">
                 <label>
-                  Assigned an error
+                  Assigned an incident
                 </label>
                 <select class="form-control" [(ngModel)]="assignedStateName">
                   <option *ngFor="let name of stateTypes" [value]="name">
@@ -89,14 +89,14 @@ <h3>Project information</h3>
               </div>
               <div class="form-group">
                 <label>
-                  Working with an error
+                  Solving an incident
                 </label>
                 <select class="form-control" [(ngModel)]="closedStateName">
                   <option *ngFor="let name of stateTypes" [value]="name">
                     {{ name }}
                   </option>
                 </select>
-                <em class="small">Value used when working with an error.</em>
+                <em class="small">Value used when solving a work item.</em>
               </div>
               <div class="form-group">
                 <label>
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/devops/manage/manage.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/security/security.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/security/security.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/commercial/security/security.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/commercial/security/security.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/demo-errors/demo-errors.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/home.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/home.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/home.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/home.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/home.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/latest-errors/latest-errors.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/my-errors/my-errors.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/home/tips/tips.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/IncidentConverter.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/IncidentConverter.ts
similarity index 99%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/IncidentConverter.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/IncidentConverter.ts
index 349ccd70..ad3813d1 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/IncidentConverter.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/IncidentConverter.ts
@@ -158,6 +158,7 @@ export class IncidentLoader {
     incident.suggestedSolutions = this.convertSolutions(result.suggestedSolutions);
     incident.tags = result.tags;
     incident.updatedAtUtc = result.updatedAtUtc;
+    console.log('refreshed incident.', result);
 
     var stats = new model.IncidentMonthStats();
     stats.days = [];
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/insights/insightchart.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/charts/summary/summary.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/bugreports/bugreports.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.ts
similarity index 92%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.ts
index d6110c0e..2fd1bf7e 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/close/close.component.ts
@@ -46,9 +46,11 @@ export class CloseComponent implements OnInit {
   }
 
   onSubmit(): void {
+    console.log('cloosing...');
     this.incidentService.close(this._incidentId, this.form.value.version, this.form.value.reason)
       .then(numberOfSubscribers => {
         this.numberOfUsers = numberOfSubscribers;
+        console.log('should ask feedback', numberOfSubscribers);
         if (numberOfSubscribers > 0) {
           this.modalService.open("askSubscriberModal");
         }
@@ -59,6 +61,7 @@ export class CloseComponent implements OnInit {
   }
 
   notifyUsers() {
+    console.log("Should notify users");
     this.closeNotifyDialog();
 
   }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/details.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/home/home.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/impact/impact.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.ts
similarity index 96%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.ts
index f387d0f4..6a372089 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/logs/logs.component.ts
@@ -46,6 +46,7 @@ export class LogsComponent implements OnInit, OnDestroy {
               
             }
           });
+          console.log(this.allEntries)
           this.entries = this.allEntries;
         });
     });
@@ -55,6 +56,7 @@ export class LogsComponent implements OnInit, OnDestroy {
     this.sub.unsubscribe();
   }
   filterEntries($event: KeyboardEvent) {
+    console.log($event, this.filterText)
     var re = new RegExp(this.filterText, 'i');
     this.entries = this.allEntries.filter(x => re.test(x.message) || re.test(x.exception));
   }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.ts
similarity index 93%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.ts
index e02e3234..baeb4c25 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/navbar/navbar.component.ts
@@ -67,6 +67,7 @@ export class NavbarComponent implements OnInit {
   }
 
   close() {
+    console.log('choosing close', this.modalService);
     this.modalService.open("closeIncidentModal");
 
   }
@@ -78,6 +79,9 @@ export class NavbarComponent implements OnInit {
 
   private async loadEverything() {
     this.incident = await this.incidentService.get(this.myIncidentId);
+    console.log('incidetn state ', this.incident.state);
     this.users = await this.accountService.getAll();
+    console.log('loaded users ', this.users);
+
   }
 }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.ts
similarity index 98%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.ts
index 9cf1677c..8933479b 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/origins/origins.component.ts
@@ -70,6 +70,7 @@ export class OriginsComponent implements OnInit, OnDestroy {
           //disabled in commercial
           //this.gotItems = response.Items.length > 0;
 
+          console.log('resp', response);
           if (response.items.length < 50) {
             response.items.forEach(item => {
               var point = new google.maps.LatLng(item.latitude, item.longitude);
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/details/reports/reports.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/feedback/feedback.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incident.model.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.ts
similarity index 94%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.ts
index 7de382d0..cfb6b1ef 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/incidents.service.ts
@@ -77,11 +77,19 @@ export class IncidentsService implements ISubscriber, OnDestroy {
     var incident = await this.get(incidentId);
     this.incidentLoader.refreshIncident(incident);
 
+    console.log('assigned',
+      accountId,
+      this.authService.user.accountId,
+      typeof accountId,
+      typeof this.authService.user.accountId);
     if (accountId === this.authService.user.accountId) {
+      console.log('mine!!')
       this.incidentLoader.findForUser(accountId)
         .then(x => {
+          console.log('looking for ', incidentId);
           var newIncident = x.find(y => y.id === incidentId);
           if (newIncident) {
+            console.log('Adding my incident.');
             this.myIncidentsList.push(newIncident);
           }
         });
@@ -202,12 +210,14 @@ export class IncidentsService implements ISubscriber, OnDestroy {
         const incidentAssigned = <api.IncidentAssigned>event.body;
         const incident = await this.findIncident(incidentAssigned.incidentId);
         if (incident) {
+          console.log('Got assigned incident: ', incidentAssigned);
           incident.assignedAtUtc = new Date();
           incident.assignedToId = incidentAssigned.assignedToId;
           incident.isAssigned = true;
           incident.assignedTo = "apa"; //TODO: Lookup
 
         } else if (incidentAssigned.assignedToId === this.authService.user.accountId) {
+          console.log('loading assigned incident');
           this.get(incidentAssigned.incidentId);
         }
 
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/recommend/recommend.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/report.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/home/home.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.ts
similarity index 93%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.ts
index 613959c5..e80d3878 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/navbar/navbar.component.ts
@@ -67,6 +67,7 @@ export class NavbarComponent implements OnInit {
   }
 
   close() {
+    console.log('choosing close', this.modalService);
     this.modalService.open("closeIncidentModal");
 
   }
@@ -78,6 +79,9 @@ export class NavbarComponent implements OnInit {
 
   private async loadEverything() {
     this.incident = await this.incidentService.get(this.myIncidentId);
+    console.log('incidetn state ', this.incident.state);
     this.users = await this.accountService.getAll();
+    console.log('loaded users ', this.users);
+
   }
 }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.ts
similarity index 98%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.ts
index cf18f42a..22951e23 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/search/search.component.ts
@@ -197,6 +197,7 @@ export class SearchComponent implements OnInit, OnDestroy {
       { title: 'Errors', route: ['application', app.id, 'errors'] }
     ]);
 
+    console.log('loaded envs', this.environments);
   }
 
   private async loadTags(): Promise<void> {
@@ -207,6 +208,7 @@ export class SearchComponent implements OnInit, OnDestroy {
     response.forEach(x => {
       this.tags.push({ id: 0, name: x.name, selected: false });
     });
+    console.log('loaded tags', this.tags);
   }
 
   private async loadUsers(): Promise<void> {
@@ -217,6 +219,7 @@ export class SearchComponent implements OnInit, OnDestroy {
         name: x.userName,
       }
     });
+    console.log('loaded users', this.users, users);
   }
 
   private async searchInternal(byCode?: boolean): Promise<void> {
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/incidents/stubs/stubs.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.ts
similarity index 94%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.ts
index bb671d46..e9bcb5e3 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.component.ts
@@ -72,9 +72,11 @@ export class NavMenuComponent implements OnDestroy {
 
   toggleAppMenu() {
     this.showAppMenu = !this.showAppMenu;
+    console.log('toggled to ', this.showAppMenu);
   }
 
   selectApplication(applicationId: number) {
+    console.log('toggle false' + applicationId);
     this.showAppMenu = false;
     this.appService.selectApplication(applicationId);
 
@@ -87,6 +89,7 @@ export class NavMenuComponent implements OnDestroy {
     }
 
     var app = this.allApplications.find(x => x.id === this.configureAppId);
+    console.log('incident count', app ? app.hasIncidents : 0);
     this.showConfigure = app && !app.hasIncidents;
   }
 
@@ -125,6 +128,7 @@ export class NavMenuComponent implements OnDestroy {
   }
 
   private onApplicationChanged(application: IApplication) {
+    console.log('Nav menu app application', application);
     if (application == null) {
       this.selected = this.emptyApp;
       return;
@@ -169,6 +173,7 @@ export class NavMenuComponent implements OnDestroy {
   }
 
   private toMenuItem(app: IApplication): IApplicationMenuItem {
+    console.log('converting', app.totalIncidentCount > 0, app.totalIncidentCount);
     return { id: app.id, title: app.name, groupIds: app.groupIds, hasIncidents: app.totalIncidentCount > 0 };
   }
 
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.ts
similarity index 92%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.ts
index ee15de48..492a961c 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/nav-menu/nav-menu.service.ts
@@ -14,7 +14,7 @@ export interface INavPill {
 })
 export class NavMenuService {
   selectedApplicationId: BehaviorSubject<number>;
-  showAsOnboarding: boolean = false;
+  showAsOnboarding = false;
   navItems: BehaviorSubject<INavPill[]>;
   hasIncidents = false;
 
@@ -26,7 +26,7 @@ export class NavMenuService {
     query.pageNumber = 1;
     client.query<api.FindIncidentsResult>(query)
       .then(result => {
-        this.hasIncidents = result.totalCount > 0;
+        this.hasIncidents = result?.totalCount > 0;
       });
 
   }
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.css b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.css
new file mode 100644
index 00000000..d221f414
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.css
@@ -0,0 +1,29 @@
+.members td:first-child {
+    width: 150px;
+}
+
+.new-item {
+    animation-name: blinker;
+    animation-duration: 1s;
+    animation-timing-function: linear;
+    animation-iteration-count: 1;
+}
+
+@keyframes blinker {
+    0% {
+        opacity: 1.0;
+        color: red;
+    }
+
+    50% {
+        opacity: 0.0;
+    }
+
+    75% {
+        opacity: 1.0;
+        color: black;
+    }
+    100% {
+        opacity: 0;
+    }
+}
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.html
new file mode 100644
index 00000000..ccba9e8b
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.html
@@ -0,0 +1,126 @@
+<template>
+    <div class="mt-4">
+        <div class="row">
+            <div class="col-lg-8 members">
+                <div class="card">
+                    <div class="card-header">
+                        Application security [{{applicationName}}]
+                    </div>
+                    <div class="card-body">
+                        <h3>Admins</h3>
+                        <table class="">
+                            <tr *ngFor="let admin of admins">
+                                <td>
+                                    <span class="fa fa-users text-blue" *ngIf="admin.Type == 'adgroup'"></span>
+                                    <span class="fa fa-user text-blue" *ngIf="admin.Type !== 'adgroup'"></span>
+                                    {{admin.name}}
+                                </td>
+                                <td>
+                                    <a href="#" (click)="removeAdmin(admin.id);false" *ngIf="admins.length > 1" title="Downgrade to regular member"><i class="fa fa-hand-point-down text-warning"></i></a>
+                                </td>
+                            </tr>
+                        </table>
+                        <h3>Members</h3>
+                        <table class="">
+                            <tr ngFor="let member of members">
+                                <td>
+                                    <span class="fa fa-users text-blue" *ngIf="member.Type == 'adgroup'"></span>
+                                    <span class="fa fa-user text-blue" *ngIf="member.Type !== 'adgroup'"></span>
+                                    {{member.name}}
+                                </td>
+                                <td>
+                                    <a href="#" (click)="addAdmin(member.id);false" title="Make admin"><i class="fa fa-hand-point-up text-success"></i></a>
+                                    <a href="#" (click)="removeMember(member.id);false"><i class="fa fa-trash text-danger"></i></a>
+                                </td>
+                            </tr>
+                        </table>
+                        <div *ngIf="members.length == 0">
+                            <em>No members have been added.</em>
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+            <div class="col-lg-4">
+                <div class="card">
+                    <div class="card-header">Add team members</div>
+                    <div class="card-body">
+                        <ul class="nav nav-tabs" id="myTab" role="tablist">
+                            <li class="nav-item">
+                                <a class="nav-link active" id="byad-tab" data-toggle="tab" href="#inviteByAd" role="tab" aria-controls="home" aria-selected="true">By Active Directory</a>
+                            </li>
+                            <li class="nav-item">
+                                <a class="nav-link" id="byemail-tab" data-toggle="tab" href="#inviteByEmail" role="tab" aria-controls="profile" aria-selected="false">By email</a>
+                            </li>
+                        </ul>
+                        <div class="tab-content p-2" id="myTabContent">
+                            <div class="tab-pane fade show active" id="inviteByAd" role="tabpanel" aria-labelledby="byad">
+                                <form (submit)="findAd();false">
+                                    <div class="form-group">
+                                        <label class="label">Search</label>
+                                        <input type="text" *ngModel="adSearch.text" class="form-control" placeholder="Account name (search)" /><br />
+                                        <div *ngIf="premisePlus">
+                                            <label><input type="checkbox" *ngModel="adSearch.findUsers" value="1" /> Users</label>
+                                            <label>
+                                                <input type="checkbox" *ngModel="adSearch.findGroups" value="1" /> Groups
+                                            </label>
+                                        </div>
+                                        <div>
+                                            <button class="btn btn-primary">Search</button>
+                                        </div>
+                                    </div>
+
+                                    <div class="form-group">
+                                        <div data-name="ad-result" *ngIf="adSearchResult.length > 0">
+                                            <label>Result</label>
+                                            <table class="w-100">
+                                                <tr *ngFor="let item of adSearchResult">
+                                                    <td>
+                                                        <span class="fa fa-user" *ngIf="item.Type == 'User'"></span>
+                                                        <span class="fa fa-users" *ngIf="item.Type !== 'User'"></span>
+                                                        {{item.Name}}
+                                                    </td>
+                                                    <td>{{item.FullName}}</td>
+                                                    <td>
+                                                        <a title="Add user/group to team" [href]="'#' + item.Sid" (click)="addAdItem(item);false"><i class="fa fa-plus text-success"></i></a>
+                                                    </td>
+                                                </tr>
+                                            </table>
+                                        </div>
+                                    </div>
+                                </form>
+                            </div>
+                            <div class="tab-pane fade" id="inviteByEmail" role="tabpanel" aria-labelledby="byemail">
+                                <form (submit)="inviteUser($event)">
+                                    <input type="email" class="form-control" *ngModel="inviteEmail" placeholder="Email address" style="display: inline; width: auto;" required="" />
+                                    <input type="submit" value="Invite member" class="btn btn-primary" />
+                                </form>
+
+                                <hr />
+                                <table class="table table-borderless" *ngIf="invites.length > 0">
+                                    <tr *ngFor="let member of invites">
+                                        <td>
+                                            {{member.EmailAddress}}
+                                        </td>
+                                        <td>
+                                            <a href="#" (click)="removeInvitation(member.EmailAddress);false"><i class="fa fa-trash"></i></a>
+                                        </td>
+                                    </tr>
+                                </table>
+                                <div *ngIf="invites.length == 0">
+                                    <em>(No pending invites)</em>
+                                </div>
+
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+    </div>
+</template>
+
+
+<style src="./security.css"></style>
+<script src="./security.ts"></script>
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.ts
new file mode 100644
index 00000000..bd16ed1c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/manage/security/security.component.ts
@@ -0,0 +1,236 @@
+import { Component, OnInit } from '@angular/core';
+import { EmailAddress } from "../../../../server-api/Core/Messaging";
+import {
+  GetApplicationTeamResultInvitation, UpdateRoles, RemoveTeamMember, GetApplicationTeam, GetApplicationTeamResult
+} from "../../../../server-api/Core/Applications";
+import { DeleteInvitation, InviteUser } from "../../../../server-api/Core/Invitations";
+import * as Ad from "../../../../server-api/Premise/ActiveDirectory";
+import { ApiClient } from "../../../utils/HttpClient";
+import { ToastrService } from "ngx-toastr";
+import { ApplicationService } from "../../../applications/application.service";
+
+interface IUser {
+  name: string;
+  id: string;
+  type: string; //"user", "aduser", "adgroup"
+}
+
+interface ISearchAd {
+  findGroups: boolean;
+  findUsers: boolean;
+  text: string;
+}
+
+@Component({
+  selector: 'app-add',
+  templateUrl: './add.component.html',
+  styleUrls: ['./add.component.scss']
+})
+export default class ManageHomeComponent implements OnInit {
+  applicationId: number = 0;
+  applicationName: string = "";
+
+  members: IUser[] = [];
+  admins: IUser[] = [];
+  invites: GetApplicationTeamResultInvitation[] = [];
+
+  adSearch: ISearchAd = {
+    text: "",
+    findGroups: true,
+    findUsers: true
+  };
+  adSearchResult: Ad.SearchAdResultItem[] = [];
+
+  inviteEmail = '';
+
+  constructor(private apiClient: ApiClient,
+    private toastrService: ToastrService,
+    private applicationService: ApplicationService) {
+
+  }
+
+  ngOnInit() {
+    this.members = [];
+    this.admins = [];
+    this.invites = [];
+    this.load();
+    this.load();
+  }
+
+  removeAdmin(userId: number) {
+    for (var i = 0; i < this.admins.length; i++) {
+      if (this.admins[i].id === userId.toString()) {
+        this.members.push(this.admins[i]);
+        this.admins.splice(i, 1);
+
+        var cmd = new UpdateRoles();
+        cmd.userToUpdate = userId;
+        cmd.roles = ["Member"];
+        cmd.applicationId = this.applicationId;
+        this.apiClient.command(cmd);
+      }
+    }
+  }
+
+  findAd() {
+    var q = new Ad.SearchAd();
+    if ((<any>this).premisePlus) {
+      q.FindGroups = this.adSearch.findGroups;
+      q.FindUsers = this.adSearch.findUsers;
+    } else {
+      q.FindUsers = true;
+      q.FindGroups = false;
+    }
+    q.Text = this.adSearch.text;
+    this.apiClient.query<Ad.SearchAdResult>(q)
+      .then(result => {
+        this.adSearchResult = result.Items;
+        result.Items.forEach(item => {
+
+        });
+      });
+  }
+
+  addAdItem(item: Ad.SearchAdResultItem) {
+    var cmd: any;
+    if (item.Type === "Group") {
+      cmd = new Ad.AddAdGroupToTeam();
+      cmd.ApplicationId = this.applicationId;
+      cmd.Sid = item.Sid;
+      this.toastrService.info('Group have been added to team.');
+    } else {
+      cmd = new Ad.AddAdUserToTeam();
+      cmd.ApplicationId = this.applicationId;
+      cmd.Sid = item.Sid;
+      this.toastrService.info('User have been added to team.');
+    }
+    this.apiClient.command(cmd);
+    var member: IUser = {
+      id: item.Sid,
+      name: item.Name,
+      type: "ad" + item.Type.toLocaleLowerCase()
+    };
+    this.members.push(member);
+  }
+
+
+  addAdmin(userId: string) {
+    for (var i = 0; i < this.members.length; i++) {
+      var member = this.members[i];
+      if (member.id === userId.toString()) {
+        this.admins.push(member);
+        this.members.splice(i, 1);
+
+        //AD
+        if (member.type !== "user") {
+          let cmd2 = new Ad.ChangeAdTeamRole();
+          cmd2.ApplicationId = this.applicationId;
+          cmd2.Sid = member.id;
+          cmd2.IsAdmin = true;
+          this.apiClient.command(cmd2);
+          return;
+        }
+
+        var cmd = new UpdateRoles();
+        cmd.userToUpdate = parseInt(userId, 10);
+        cmd.roles = ["Admin", "Member"];
+        cmd.applicationId = this.applicationId;
+        this.apiClient.command(cmd);
+      }
+    }
+  }
+
+  /**
+   * 
+   * @param userId User id or SID
+   */
+  removeMember(userId: string) {
+    for (var i = 0; i < this.members.length; i++) {
+      var member = this.members[i];
+      if (member.id === userId.toString()) {
+        this.members.splice(i, 1);
+
+        if (member.type === "user") {
+          const cmd = new RemoveTeamMember();
+          cmd.userToRemove = parseInt(userId, 10);
+          cmd.applicationId = this.applicationId;
+          this.apiClient.command(cmd);
+        } else {
+          const cmd = new Ad.RemoveAdTeamMember();
+          cmd.Sid = userId;
+          cmd.ApplicationId = this.applicationId;
+          this.apiClient.command(cmd);
+        }
+      }
+    }
+  }
+
+  removeInvitation(emailAddress: string) {
+    const cmd = new DeleteInvitation();
+    cmd.applicationId = this.applicationId;
+    cmd.invitedEmailAddress = emailAddress;
+    this.apiClient.command(cmd);
+
+    for (let i = 0; i < this.invites.length; i++) {
+      if (this.invites[i].emailAddress === emailAddress) {
+        this.invites.splice(i, 1);
+      }
+    }
+  }
+
+  inviteUser(evt: Event) {
+    var cmd = new InviteUser();
+    cmd.applicationId = this.applicationId;
+    cmd.emailAddress = this.inviteEmail;
+    this.apiClient.command(cmd);
+    this.toastrService.info('Invitation have been sent.');
+    var form = <HTMLFormElement>evt.target;
+    form.reset();
+  }
+
+
+  private load() {
+    var appIdStr = this.$route.params.applicationId;
+    this.applicationId = parseInt(appIdStr, 10);
+
+    this.applicationService.get(this.applicationId)
+      .then(appInfo => {
+        this.applicationName = appInfo.name;
+      });
+
+    var q = new GetApplicationTeam();
+    q.applicationId = this.applicationId;
+    this.apiClient.query<GetApplicationTeamResult>(q)
+      .then(result => {
+        for (let i = 0; i < result.invited.length; i++) {
+          this.invites.push(result.invited[i]);
+        }
+        for (let i = 0; i < result.members.length; i++) {
+          let member = result.members[i];
+          if (member.isAdmin) {
+            this.admins.push({ name: member.userName, id: member.userId.toString(), type: "user" });
+          } else {
+            this.members.push({ name: member.userName, id: member.userId.toString(), type: "user" });
+          }
+
+        }
+      });
+
+    var q2 = new Ad.GetAdTeamMembers();
+    q2.ApplicationId = this.applicationId;
+    this.apiClient.query<Ad.GetAdTeamMembersResult>(q2)
+      .then(result => {
+        for (let i = 0; i < result.Items.length; i++) {
+          let member = result.Items[i];
+          let type = member.IsGroup ? "adgroup" : "aduser";
+          if (member.IsAdmin) {
+            this.admins.push({ name: member.Name, id: member.Sid, type: type });
+          } else {
+            this.members.push({ name: member.Name, id: member.Sid, type: type });
+          }
+        }
+      });
+
+  }
+
+}
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/premise.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/premise.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/premise.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/premise.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/add/add.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/edit/edit.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/list/list.component.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/team.model.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/teams.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/teams.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/teams.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/premise/teams/teams.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/HubEntity.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/HubEntity.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/HubEntity.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/HubEntity.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/chart.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.ts
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.ts
index 4d469c73..a59fce74 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/signal-r.service.ts
@@ -70,6 +70,7 @@ export class SignalRService {
       resolve: null,
       completed: false
     };
+    console.log('got new filter', cb);
     this.waitFilters.push(cb);
 
     return new Promise((accept, reject) => {
@@ -79,6 +80,7 @@ export class SignalRService {
       };
 
       cb.resolve = evt => {
+        console.log('triggering new filter', evt);
         cb.completed = true;
         accept(evt);
       };
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/services/work-item.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/HttpClient.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/HttpClient.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/HttpClient.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/HttpClient.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/ModalDialog.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/ModalDialog.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/ModalDialog.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/ModalDialog.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/SubjectList.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/SubjectList.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/SubjectList.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/SubjectList.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/modal.dialog.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/modal.dialog.service.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/modal.dialog.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/modal.dialog.service.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.ts
similarity index 92%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.ts
index aa801050..0af507dd 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/utils/settings.service.ts
@@ -1,7 +1,6 @@
 import { Injectable } from '@angular/core';
 import { ApiClient } from "./HttpClient";
 import * as api from "../../server-api/Core/Users";
-
 @Injectable({
   providedIn: 'root'
 })
@@ -23,6 +22,7 @@ export class SettingsService {
     var cmd = new api.SaveAccountSetting();
     cmd.value = value;
     cmd.name = name;
+    console.log('Saving ' + name + " with " + value);
     await this.apiClient.command(cmd);
   }
 }
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/app/validation.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/validation.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/app/validation.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/app/validation.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/assets/.gitkeep b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/assets/.gitkeep
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/assets/.gitkeep
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/assets/.gitkeep
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/assets/Spinner-1s-200px.svg b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/assets/Spinner-1s-200px.svg
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/assets/Spinner-1s-200px.svg
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/assets/Spinner-1s-200px.svg
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/environments/environment.prod.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/environments/environment.prod.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/environments/environment.prod.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/environments/environment.prod.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/environments/environment.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/environments/environment.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/environments/environment.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/environments/environment.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/index.html b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/index.html
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/index.html
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/index.html
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/karma.conf.js b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/karma.conf.js
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/karma.conf.js
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/karma.conf.js
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/main.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/main.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/main.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/main.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/pipes/ago.pipe.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/pipes/ago.pipe.ts
similarity index 99%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/pipes/ago.pipe.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/pipes/ago.pipe.ts
index 440c33a4..647cd259 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/pipes/ago.pipe.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/pipes/ago.pipe.ts
@@ -53,6 +53,7 @@ export class AgoPipe implements PipeTransform {
       return Math.round(diffHours) + " hours ago";
     }
 
+
     const diffDays = diffSeconds / 60 / 60 / 24;
     if (diffDays < 6) {
       if (diffDays === 1) {
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/pipes/iso-date.pipe.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/pipes/iso-date.pipe.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/pipes/iso-date.pipe.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/pipes/iso-date.pipe.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/pipes/pipe.module.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/pipes/pipe.module.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/pipes/pipe.module.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/pipes/pipe.module.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/polyfills.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/polyfills.ts
similarity index 82%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/polyfills.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/polyfills.ts
index e484510f..813c8248 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/polyfills.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/polyfills.ts
@@ -18,16 +18,6 @@
  * BROWSER POLYFILLS
  */
 
-/** IE10 and IE11 requires the following for NgClass support on SVG elements */
-// import 'classlist.js';  // Run `npm install --save classlist.js`.
-
-/**
- * Web Animations `@angular/platform-browser/animations`
- * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
- * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
- */
-// import 'web-animations-js';  // Run `npm install --save web-animations-js`.
-
 /**
  * By default, zone.js will patch all possible macroTask and DomEvents
  * user can disable parts of macroTask/DomEvents patch by setting following flags
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Azure/DevOps.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Azure/DevOps.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Azure/DevOps.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Azure/DevOps.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Demo.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Demo.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Demo.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Demo.ts
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Insights.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Insights.ts
new file mode 100644
index 00000000..db1217b1
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Insights.ts
@@ -0,0 +1,45 @@
+export class GetInsights {
+    public static TYPE_NAME: string = 'GetInsights';
+    public ApplicationId: number | null;
+}
+export class GetInsightsResult {
+    public static TYPE_NAME: string = 'GetInsightsResult';
+    public ApplicationInsights: GetInsightResultApplication[];
+    public Indicators: GetInsightResultIndicator[];
+    public TrendDates: string[];
+}
+export class GetInsightResultApplication {
+    public Id: number;
+    public Name: string;
+    public NumberOfDevelopers: number;
+    public Indicators: GetInsightResultIndicator[];
+}
+export class GetInsightResultIndicator {
+    public CanBeNormalized: boolean;
+    public PeriodValueName: string;
+    public Name: string;
+    public Title: string;
+    public IsAlternative: boolean;
+    public Description: string;
+    public Comment: string;
+    public Value: any;
+    public ValueName: string;
+    public PeriodValue: any;
+    public TrendLines: TrendLine[];
+    public Toplist: ToplistItem[];
+    public HigherValueIsBetter: boolean | any;
+    public ValueUnit: null|"days"|"users"|"incidents"|"versions";
+}
+export class TrendLine {
+    public DisplayName: string;
+    public TrendValues: any[];
+}
+export class TrendValue {
+    public Value: any;
+    public Normalized: any;
+}
+export class ToplistItem {
+    public Title: string;
+    public Value: string;
+    public Comment: string;
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Logs.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Logs.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Logs.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Logs.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Mine.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Mine.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Mine.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Mine.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Partitions.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Partitions.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Partitions.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/Partitions.ts
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/WorkItems.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/WorkItems.ts
new file mode 100644
index 00000000..dcbe7cd9
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Common/WorkItems.ts
@@ -0,0 +1,28 @@
+﻿export class FindIntegration {
+    public static TYPE_NAME: string = 'FindIntegration';
+    public ApplicationId: number;
+}
+
+export class FindIntegrationResult {
+    public HaveIntegration: boolean;
+    public Name: string;
+    public Title: string;
+}
+
+export class FindWorkItem {
+    public static TYPE_NAME: string = 'FindWorkItem';
+    public IncidentId: number;
+}
+
+export class FindWorkItemResult {
+    public WorkItemId: string;
+    public Name: string;
+    public Url: string;
+    public ApplicationId: number;
+}
+
+export class CreateWorkItem {
+    public static TYPE_NAME: string = 'CreateWorkItem';
+    public IncidentId: number;
+    public ApplicationId: number;
+}
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Accounts.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Accounts.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Accounts.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Accounts.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/ApiKeys.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/ApiKeys.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/ApiKeys.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/ApiKeys.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Applications.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Applications.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Applications.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Applications.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Environments.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Environments.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Environments.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Environments.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Feedback.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Feedback.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Feedback.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Feedback.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Incidents.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Incidents.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Incidents.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Incidents.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Invitations.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Invitations.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Invitations.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Invitations.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Messaging.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Messaging.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Messaging.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Messaging.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Notifications.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Notifications.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Notifications.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Notifications.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Reports.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Reports.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Reports.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Reports.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Support.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Support.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Support.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Support.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Users.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Users.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Users.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Users.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Whitelist.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Whitelist.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Whitelist.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Core/Whitelist.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ContextData.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ContextData.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ContextData.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ContextData.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ErrorOrigins.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ErrorOrigins.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ErrorOrigins.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/ErrorOrigins.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/History.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/History.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/History.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/History.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Onboarding.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Onboarding.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Onboarding.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Onboarding.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Tagging.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Tagging.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Tagging.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Tagging.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Triggers.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Triggers.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Triggers.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Triggers.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Versions.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Versions.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Versions.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Modules/Versions.ts
diff --git a/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Premise/ActiveDirectory.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Premise/ActiveDirectory.ts
new file mode 100644
index 00000000..8fce6614
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Premise/ActiveDirectory.ts
@@ -0,0 +1,69 @@
+export class SearchAd {
+    public static TYPE_NAME: string = 'SearchAd';
+    public FindGroups: boolean;
+    public FindUsers: boolean;
+    public Text: string;
+
+    public PageNumber: number;
+    public PageSize: number;
+}
+
+export class SearchAdResult {
+    public static TYPE_NAME: string = 'SearchAdResult';
+    public Items: SearchAdResultItem[];
+    public PageNumber: number;
+    public TotalCount: number;
+}
+
+export class SearchAdResultItem {
+    public static TYPE_NAME: string = 'SearchAdResultItem';
+    public Name: string;
+    public FullName: string;
+    public Sid: string;
+    public Type: string;
+}
+
+export class AddAdGroupToTeam {
+    public static TYPE_NAME: string = 'AddAdGroupToTeam';
+    public ApplicationId: number;
+    public Sid: string;
+    public IsAdmin?: boolean;
+}
+
+export class AddAdUserToTeam {
+    public static TYPE_NAME: string = 'AddAdUserToTeam';
+    public ApplicationId: number;
+    public Sid: string;
+    public IsAdmin?: boolean;
+}
+
+export class ChangeAdTeamRole {
+    public static TYPE_NAME: string = 'ChangeAdTeamRole';
+    public ApplicationId: number;
+    public Sid: string;
+    public IsAdmin: boolean;
+}
+
+export class RemoveAdTeamMember {
+    public static TYPE_NAME: string = 'RemoveAdTeamMember';
+    public ApplicationId: number;
+    public Sid: string; 
+}
+
+export class GetAdTeamMembers {
+    public static TYPE_NAME: string = 'GetAdTeamMembers';
+    public ApplicationId: number;
+}
+
+export class GetAdTeamMembersResult {
+    public static TYPE_NAME: string = 'GetAdTeamMembersResult';
+    public Items: GetAdTeamMembersResultItem[];
+}
+
+export class GetAdTeamMembersResultItem {
+    public static TYPE_NAME: string = 'GetAdTeamMembersResultItem';
+    public Name: string;
+    public Sid: string;
+    public IsGroup: boolean;
+    public IsAdmin: boolean;
+}
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Feedback.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Feedback.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Feedback.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Feedback.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Overview.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Overview.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Overview.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/Web/Overview.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.spec.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.spec.ts
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.spec.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.spec.ts
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.ts
similarity index 91%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.ts
index f950dfa0..d840d3ff 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/server-api/server-client.service.ts
@@ -22,6 +22,7 @@ export class ServerClientService {
         "X-Cqs-Name": cmd.constructor.TYPE_NAME
       })
     };
+    console.log('sending post');
     await this.httpClient.post(`${environment.apiUrl}cqs/`, cmd, httpOptions);
   }
 
@@ -34,7 +35,9 @@ export class ServerClientService {
       })
     };
 
+    console.log('sending query ' + `${environment.apiUrl}cqs/`, httpOptions);
     var result = await this.httpClient.post<TResult>(`${environment.apiUrl}cqs/`, query, httpOptions).toPromise();
+    console.log('got result', result);
     return result;
   }
 
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/_mixins.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/_mixins.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/_mixins.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/_mixins.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/backgrounds.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/backgrounds.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/backgrounds.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/backgrounds.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/buttons.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/buttons.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/buttons.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/buttons.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/checkbox.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/checkbox.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/checkbox.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/checkbox.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/coderr-variables.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/coderr-variables.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/coderr-variables.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/coderr-variables.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/forms.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/forms.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/forms.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/forms.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/image.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/image.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/image.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/image.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/layout.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/layout.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/layout.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/layout.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/radio.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/radio.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/radio.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/radio.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/reset.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/reset.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/reset.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/reset.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/tables.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/tables.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/tables.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/tables.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/topnav.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/topnav.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/topnav.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/topnav.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/typography.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/typography.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/_partials/typography.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/_partials/typography.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/styles/site.scss b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/site.scss
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/styles/site.scss
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/styles/site.scss
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/test.ts b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/test.ts
similarity index 88%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/test.ts
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/test.ts
index a6f15af3..6b03dbe8 100644
--- a/src/Server/Coderr.Server.WebSite/ClientApp/src/test.ts
+++ b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/test.ts
@@ -12,7 +12,9 @@ declare const require: any;
 // First, initialize the Angular testing environment.
 getTestBed().initTestEnvironment(
   BrowserDynamicTestingModule,
-  platformBrowserDynamicTesting()
+  platformBrowserDynamicTesting(), {
+    teardown: { destroyAfterEach: false }
+}
 );
 // Then we find all the tests.
 const context = require.context('./', true, /\.spec\.ts$/);
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/tsconfig.app.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/tsconfig.app.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/tsconfig.app.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/tsconfig.app.json
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/tsconfig.server.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/tsconfig.server.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/tsconfig.server.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/tsconfig.server.json
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/tsconfig.spec.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/tsconfig.spec.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/tsconfig.spec.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/tsconfig.spec.json
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/src/tslint.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/src/tslint.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/src/tslint.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/src/tslint.json
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/tsconfig.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/tsconfig.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/tsconfig.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/tsconfig.json
diff --git a/src/Server/Coderr.Server.WebSite/ClientApp/tslint.json b/src/Server/App/Coderr.Server.WebSite/ClientApp/tslint.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ClientApp/tslint.json
rename to src/Server/App/Coderr.Server.WebSite/ClientApp/tslint.json
diff --git a/src/Server/Coderr.Server.WebSite/Coderr.Server.WebSite.csproj b/src/Server/App/Coderr.Server.WebSite/Coderr.Server.WebSite.csproj
similarity index 81%
rename from src/Server/Coderr.Server.WebSite/Coderr.Server.WebSite.csproj
rename to src/Server/App/Coderr.Server.WebSite/Coderr.Server.WebSite.csproj
index 41d117d6..8517fa86 100644
--- a/src/Server/Coderr.Server.WebSite/Coderr.Server.WebSite.csproj
+++ b/src/Server/App/Coderr.Server.WebSite/Coderr.Server.WebSite.csproj
@@ -6,19 +6,27 @@
     <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
     <IsPackable>false</IsPackable>
     <SpaRoot>ClientApp\</SpaRoot>
-    <Version>3.0-rc01</Version>
     <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 
     <!-- Set this to true if you enable server-side prerendering -->
     <BuildServerSideRenderer>false</BuildServerSideRenderer>
     <UserSecretsId>0b5b30d5-8b80-4926-a654-b5a56a650815</UserSecretsId>
-    <Configurations>Debug;Release</Configurations>
+    <Configurations>Debug;Release;PremiseDebug;Premise</Configurations>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
     <DefineConstants>TRACE;DEBUG</DefineConstants>
   </PropertyGroup>
 
+  <PropertyGroup Condition="'$(Configuration)' == 'PremiseDebug'">
+    <StartArguments>premise</StartArguments> 
+  </PropertyGroup>
+
+  <Target Name="DisplayMessages">
+    <Message Text="constants: $(DefineConstants)" />
+    <Message Text="cofig: $(Configuration)" />
+  </Target>
+
   <ItemGroup>
     <Content Update="log4net.config">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@@ -34,6 +42,10 @@
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.22" />
     <PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
     <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.9" />
+    <PackageReference Include="Microsoft.TypeScript.MSBuild" Version="4.5.3">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
     <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.4" />
     <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
   </ItemGroup>
@@ -47,10 +59,10 @@
 
   <ItemGroup>
     <ProjectReference Include="..\Coderr.Server.App\Coderr.Server.App.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
-    <ProjectReference Include="..\Coderr.Server.SqlServer\Coderr.Server.SqlServer.csproj" />
     <ProjectReference Include="..\Coderr.Server.WebPush\Coderr.Server.WebPush.csproj" />
+    <ProjectReference Include="..\..\Common\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
+    <ProjectReference Include="..\..\Data\Coderr.Server.SqlServer\Coderr.Server.SqlServer.csproj" />
+    <ProjectReference Include="..\..\Reporting\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
   </ItemGroup>
 
   <Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/AccountController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/AccountController.cs
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/Controllers/AccountController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/AccountController.cs
index 6e3c9cb9..22e87659 100644
--- a/src/Server/Coderr.Server.WebSite/Controllers/AccountController.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Controllers/AccountController.cs
@@ -207,7 +207,7 @@ public ActionResult Register()
 
 
         [HttpPost("api/account/register")]
-        public async Task<RegisterResult> Register([FromBody] RegisterViewModel model)
+        public async Task<RegisterResult> Register([FromBody]RegisterViewModel model)
         {
             var config = _configStore.Load<BaseConfiguration>();
             if (config.AllowRegistrations == false)
@@ -217,7 +217,7 @@ public async Task<RegisterResult> Register([FromBody] RegisterViewModel model)
 
             if (!ModelState.IsValid)
             {
-                return new RegisterResult { Success = false, ErrorMessage = ModelState.ToSummary() };
+                return new RegisterResult {Success = false, ErrorMessage = ModelState.ToSummary()};
             }
 
 
@@ -252,7 +252,7 @@ public async Task<RegisterResult> Register([FromBody] RegisterViewModel model)
             }
 
 
-            return new RegisterResult { Success = true, VerificationIsRequested = true };
+            return new RegisterResult {Success = true, VerificationIsRequested = true};
         }
 
         [HttpGet("password/request/reset")]
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/AuthenticationController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/AuthenticationController.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Controllers/AuthenticationController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/AuthenticationController.cs
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/CqsController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/CqsController.cs
similarity index 99%
rename from src/Server/Coderr.Server.WebSite/Controllers/CqsController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/CqsController.cs
index c8fa5360..c335d810 100644
--- a/src/Server/Coderr.Server.WebSite/Controllers/CqsController.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Controllers/CqsController.cs
@@ -18,12 +18,12 @@
 using Coderr.Server.WebSite.Models;
 using DotNetCqs;
 using Griffin;
-using Griffin.Data;
 using Griffin.Net.Protocols.Http;
 using log4net;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using Newtonsoft.Json;
+using EntityNotFoundException = Coderr.Server.Domain.EntityNotFoundException;
 
 namespace Coderr.Server.WebSite.Controllers
 {
@@ -79,7 +79,7 @@ public async Task<IActionResult> Authenticate()
                 {
                     Applications = result,
                     IsSysAdmin = User.IsInRole(CoderrRoles.SysAdmin),
-                    LicenseText = ""//TODO: LicenseWrapper.Instance?.LicenseInformation ?? "
+                    LicenseText = ""
                 };
 
                 _logger.Debug("Result: " + JsonConvert.SerializeObject(dto));
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/FeedbackReceiverController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/FeedbackReceiverController.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Controllers/FeedbackReceiverController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/FeedbackReceiverController.cs
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/GoController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/GoController.cs
similarity index 92%
rename from src/Server/Coderr.Server.WebSite/Controllers/GoController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/GoController.cs
index fb0c33e2..42fba0a2 100644
--- a/src/Server/Coderr.Server.WebSite/Controllers/GoController.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Controllers/GoController.cs
@@ -7,7 +7,7 @@ namespace Coderr.Server.WebSite.Controllers
 {
     public class GoController : Controller
     {
-        private readonly IIncidentRepository _incidentRepository;
+        private IIncidentRepository _incidentRepository;
 
         public GoController(IIncidentRepository incidentRepository)
         {
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/HomeController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/HomeController.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Controllers/HomeController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/HomeController.cs
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/OnboardingController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/OnboardingController.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Controllers/OnboardingController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/OnboardingController.cs
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/PushController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/PushController.cs
similarity index 99%
rename from src/Server/Coderr.Server.WebSite/Controllers/PushController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/PushController.cs
index e39d553d..8f0598a4 100644
--- a/src/Server/Coderr.Server.WebSite/Controllers/PushController.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Controllers/PushController.cs
@@ -25,7 +25,7 @@ public PushController(IConfiguration<BrowserNotificationConfig> config, Configur
             _config = config;
         }
 
-
+      
         [HttpGet]
         [Route("vapidpublickey")]
         [Authorize]
diff --git a/src/Server/Coderr.Server.WebSite/Controllers/ReportReceiverController.cs b/src/Server/App/Coderr.Server.WebSite/Controllers/ReportReceiverController.cs
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/Controllers/ReportReceiverController.cs
rename to src/Server/App/Coderr.Server.WebSite/Controllers/ReportReceiverController.cs
index d7ce65fd..00b8eb96 100644
--- a/src/Server/Coderr.Server.WebSite/Controllers/ReportReceiverController.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Controllers/ReportReceiverController.cs
@@ -4,6 +4,7 @@
 using System.Security.Authentication;
 using System.Security.Claims;
 using System.Threading.Tasks;
+using Coderr.Server.Abstractions;
 using Coderr.Server.Abstractions.Config;
 using Coderr.Server.Abstractions.Reports;
 using Coderr.Server.Abstractions.Security;
@@ -15,6 +16,7 @@
 using Griffin.Data;
 using Griffin.Net.Protocols.Http;
 using log4net;
+using Microsoft.AspNetCore.Cors;
 using Microsoft.AspNetCore.Mvc;
 
 namespace Coderr.Server.WebSite.Controllers
@@ -27,7 +29,7 @@ public class ReportReceiverController : Controller
         private readonly IMessageQueue _messageQueue;
         private readonly IAdoNetUnitOfWork _unitOfWork;
         private readonly IConfiguration<ReportConfig> _reportConfig;
-        private readonly IWhitelistService _whitelistService;
+        private IWhitelistService _whitelistService;
 
         public ReportReceiverController(IMessageQueueProvider queueProvider, IAdoNetUnitOfWork unitOfWork,
             IConfiguration<ReportConfig> reportConfig, IWhitelistService whitelistService)
diff --git a/src/Server/Coderr.Server.WebSite/Dockerfile_Linux b/src/Server/App/Coderr.Server.WebSite/Dockerfile_Linux
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Dockerfile_Linux
rename to src/Server/App/Coderr.Server.WebSite/Dockerfile_Linux
diff --git a/src/Server/Coderr.Server.WebSite/Dockerfile_Windows b/src/Server/App/Coderr.Server.WebSite/Dockerfile_Windows
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Dockerfile_Windows
rename to src/Server/App/Coderr.Server.WebSite/Dockerfile_Windows
diff --git a/src/Server/Coderr.Server.WebSite/Hubs/CoderrHub.cs b/src/Server/App/Coderr.Server.WebSite/Hubs/CoderrHub.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Hubs/CoderrHub.cs
rename to src/Server/App/Coderr.Server.WebSite/Hubs/CoderrHub.cs
diff --git a/src/Server/Coderr.Server.WebSite/Hubs/HubEntity.cs b/src/Server/App/Coderr.Server.WebSite/Hubs/HubEntity.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Hubs/HubEntity.cs
rename to src/Server/App/Coderr.Server.WebSite/Hubs/HubEntity.cs
diff --git a/src/Server/Coderr.Server.WebSite/Hubs/HubEvent.cs b/src/Server/App/Coderr.Server.WebSite/Hubs/HubEvent.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Hubs/HubEvent.cs
rename to src/Server/App/Coderr.Server.WebSite/Hubs/HubEvent.cs
diff --git a/src/Server/Coderr.Server.WebSite/Hubs/HubSession.cs b/src/Server/App/Coderr.Server.WebSite/Hubs/HubSession.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Hubs/HubSession.cs
rename to src/Server/App/Coderr.Server.WebSite/Hubs/HubSession.cs
diff --git a/src/Server/Coderr.Server.WebSite/Hubs/HubSubscribe.cs b/src/Server/App/Coderr.Server.WebSite/Hubs/HubSubscribe.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Hubs/HubSubscribe.cs
rename to src/Server/App/Coderr.Server.WebSite/Hubs/HubSubscribe.cs
diff --git a/src/Server/Coderr.Server.WebSite/Hubs/WebSocketHub.cs b/src/Server/App/Coderr.Server.WebSite/Hubs/WebSocketHub.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Hubs/WebSocketHub.cs
rename to src/Server/App/Coderr.Server.WebSite/Hubs/WebSocketHub.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/AuthenticationSchemeProvider2.cs b/src/Server/App/Coderr.Server.WebSite/Identity/AuthenticationSchemeProvider2.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/AuthenticationSchemeProvider2.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/AuthenticationSchemeProvider2.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/DbTransactionExtensions.cs b/src/Server/App/Coderr.Server.WebSite/Identity/DbTransactionExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/DbTransactionExtensions.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/DbTransactionExtensions.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/LookupNormalizer.cs b/src/Server/App/Coderr.Server.WebSite/Identity/LookupNormalizer.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/LookupNormalizer.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/LookupNormalizer.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/MyIdentityErrorDescriber.cs b/src/Server/App/Coderr.Server.WebSite/Identity/MyIdentityErrorDescriber.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/MyIdentityErrorDescriber.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/MyIdentityErrorDescriber.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/MySigninManager.cs b/src/Server/App/Coderr.Server.WebSite/Identity/MySigninManager.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/MySigninManager.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/MySigninManager.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/MyUserManager.cs b/src/Server/App/Coderr.Server.WebSite/Identity/MyUserManager.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/MyUserManager.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/MyUserManager.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/UserClaimStore.cs b/src/Server/App/Coderr.Server.WebSite/Identity/UserClaimStore.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/UserClaimStore.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/UserClaimStore.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/UserClaimsFactory.cs b/src/Server/App/Coderr.Server.WebSite/Identity/UserClaimsFactory.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/UserClaimsFactory.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/UserClaimsFactory.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/UserConfirmation.cs b/src/Server/App/Coderr.Server.WebSite/Identity/UserConfirmation.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/UserConfirmation.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/UserConfirmation.cs
diff --git a/src/Server/Coderr.Server.WebSite/Identity/UserStore.cs b/src/Server/App/Coderr.Server.WebSite/Identity/UserStore.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Identity/UserStore.cs
rename to src/Server/App/Coderr.Server.WebSite/Identity/UserStore.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationSectionWrapper.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationSectionWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationSectionWrapper.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationSectionWrapper.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationWrapper.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationWrapper.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/ConfigurationWrapper.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/CqsObjectMapperConfigurationContext.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/CqsObjectMapperConfigurationContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/CqsObjectMapperConfigurationContext.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/CqsObjectMapperConfigurationContext.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/DependencyInjectionAdapter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/DependencyInjectionAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/DependencyInjectionAdapter.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/DependencyInjectionAdapter.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/HandlerScopeWrapper.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/HandlerScopeWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/HandlerScopeWrapper.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/HandlerScopeWrapper.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/FakeLogScope.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/FakeLogScope.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/FakeLogScope.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/FakeLogScope.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogAdapter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogAdapter.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogAdapter.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogFactoryAdapter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogFactoryAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogFactoryAdapter.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/Logging/MicrosoftLogFactoryAdapter.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/ReportConfigWrapper.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/ReportConfigWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/ReportConfigWrapper.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/ReportConfigWrapper.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/ServiceScopeWrapper.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/ServiceScopeWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Adapters/ServiceScopeWrapper.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Adapters/ServiceScopeWrapper.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthOptions.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthOptions.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthOptions.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthOptions.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthenticator.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthenticator.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthenticator.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/ApiKeyAuthentication/ApiKeyAuthenticator.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/AppModuleStarter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/AppModuleStarter.cs
similarity index 88%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/AppModuleStarter.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/AppModuleStarter.cs
index 628e4584..204611c2 100644
--- a/src/Server/Coderr.Server.WebSite/Infrastructure/AppModuleStarter.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Infrastructure/AppModuleStarter.cs
@@ -67,6 +67,9 @@ public void ScanAssemblies(string assemblyDirectory)
 
         public void Configure(ConfigurationContext context)
         {
+            _logger.Debug("Base services: " +
+                          string.Join(", ", context.Services.Select(x => x.ImplementationType?.Name ?? x.ServiceType?.Name)));
+
             foreach (var module in _modules)
             {
 
@@ -74,6 +77,8 @@ public void Configure(ConfigurationContext context)
                 var moduleContext = context.Clone(childServices);
 
                 module.Configure(moduleContext);
+                _logger.Debug(module.GetType().Name + " services: " +
+                              string.Join(", ", moduleContext.Services.Select(x => x.ImplementationType?.Name ?? x.ServiceType?.Name)));
 
 
                 foreach (var service in moduleContext.Services)
@@ -81,6 +86,8 @@ public void Configure(ConfigurationContext context)
                     if (service.ImplementationType?.Name == "DeleteAbandonedSimilarities")
                         Debugger.Break();
 
+                    Debug.WriteLine(module.GetType().Name + " registers " + service.ImplementationType);
+
                     //if (context.Services.Any(x => x.ImplementationType == service.ImplementationType))
                     //{
                     //    throw new InvalidOperationException(
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Boot/PrincipalWrapper.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Boot/PrincipalWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Boot/PrincipalWrapper.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Boot/PrincipalWrapper.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/CoderrStartup.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/CoderrStartup.cs
similarity index 88%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/CoderrStartup.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/CoderrStartup.cs
index 8c3dc689..6ef2c771 100644
--- a/src/Server/Coderr.Server.WebSite/Infrastructure/CoderrStartup.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Infrastructure/CoderrStartup.cs
@@ -18,6 +18,8 @@
 using Coderr.Server.SqlServer;
 using Coderr.Server.SqlServer.Migrations;
 using Coderr.Server.SqlServer.Schema;
+using Coderr.Server.SqlServer.Schema.Common;
+using Coderr.Server.SqlServer.Schema.Oss;
 using Coderr.Server.WebSite.Controllers;
 using Coderr.Server.WebSite.Infrastructure.Adapters;
 using log4net;
@@ -44,7 +46,7 @@ public class CoderrStartup
         private IHostApplicationLifetime _applicationLifetime;
         private readonly AppModuleStarter _appModuleStarter;
         private IServiceProvider _serviceProvider;
-
+        
         public CoderrStartup(IConfiguration configuration)
         {
             _configuration = configuration;
@@ -82,23 +84,23 @@ public void Configure(IApplicationBuilder applicationBuilder, IHostApplicationLi
             applicationLifetime.ApplicationStopping.Register(OnShutdown);
         }
 
-        public void ConfigureAuthentication(IApplicationBuilder app)
+        public void ConfigureAfterAuthentication(IApplicationBuilder app)
         {
-                app.UseStatusCodePages(async x =>
-                {
-                    _logger.Error($"{x.HttpContext.Response.StatusCode}: {x.HttpContext.Request.GetDisplayUrl()}");
-                    x.HttpContext.Response.ContentType = "text/plain";
-
-                    var erroMsg = "General Failure";
-                    var exceptionHandlerPathFeature =
-                        x.HttpContext.Features.Get<IExceptionHandlerPathFeature>();
-                    if (exceptionHandlerPathFeature != null)
-                        erroMsg = exceptionHandlerPathFeature.Error.Message;
-
-                    await x.HttpContext.Response.WriteAsync(
-                        "Error " +
-                        x.HttpContext.Response.StatusCode + " " + erroMsg);
-                });
+            app.UseStatusCodePages(async x =>
+            {
+                _logger.Error($"{x.HttpContext.Response.StatusCode}: {x.HttpContext.Request.GetDisplayUrl()}");
+                x.HttpContext.Response.ContentType = "text/plain";
+
+                var erroMsg = "General Failure";
+                var exceptionHandlerPathFeature =
+                    x.HttpContext.Features.Get<IExceptionHandlerPathFeature>();
+                if (exceptionHandlerPathFeature != null)
+                    erroMsg = exceptionHandlerPathFeature.Error.Message;
+
+                await x.HttpContext.Response.WriteAsync(
+                    "Error " +
+                    x.HttpContext.Response.StatusCode + " " + erroMsg);
+            });
         }
 
         public void ConfigureEnd(IApplicationBuilder applicationBuilder)
@@ -148,7 +150,12 @@ private void ConfigureMigrations()
                 () => OpenConnection(CoderrClaims.SystemPrincipal),
                 "Coderr",
                 typeof(CoderrMigrationPointer).Namespace);
+            var commonRunner = new MigrationRunner(
+                () => OpenConnection(CoderrClaims.SystemPrincipal),
+                "Common",
+                typeof(CommonSchemaPointer).Namespace);
             SqlServerTools.AddMigrationRunner(baseRunner);
+            SqlServerTools.AddMigrationRunner(commonRunner);
         }
 
         private void LoadHostConfiguration(IConfiguration configuration)
@@ -250,9 +257,5 @@ public void Start()
                 HostConfig.Instance.TriggeredConfigured();
             }
         }
-
-        public void AddAuthentication(AuthenticationBuilder authenticationBuilder)
-        {
-        }
     }
 }
\ No newline at end of file
diff --git a/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/AzureQueueProvider.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/AzureQueueProvider.cs
new file mode 100644
index 00000000..44247a93
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/AzureQueueProvider.cs
@@ -0,0 +1,25 @@
+﻿using Coderr.Server.Infrastructure.Messaging;
+using DotNetCqs.Queues;
+using DotNetCqs.Queues.Azure.ServiceBus;
+using log4net;
+
+namespace Coderr.Server.WebSite.Infrastructure.Cqs.Adapters
+{
+    public class AzureQueueProvider : IMessageQueueProvider
+    {
+        private readonly string _connectionString;
+        private ILog _logger = LogManager.GetLogger(typeof(AzureQueueProvider));
+
+
+        public AzureQueueProvider(string connectionString)
+        {
+            _connectionString = connectionString;
+        }
+
+        public IMessageQueue Open(string queueName)
+        {
+            _logger.Info("Opening queue " + queueName);
+            return new AzureMessageQueue(_connectionString, queueName) { MessageSerializer = new MessagingSerializer() };
+        }
+    }
+}
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ExecuteDirectlyMessageBus.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ExecuteDirectlyMessageBus.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ExecuteDirectlyMessageBus.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ExecuteDirectlyMessageBus.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/IncludeNonPublicAndUseCamelCaseContractResolver.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/IncludeNonPublicAndUseCamelCaseContractResolver.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/IncludeNonPublicAndUseCamelCaseContractResolver.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/IncludeNonPublicAndUseCamelCaseContractResolver.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/RoutingMessageBus.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/RoutingMessageBus.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/RoutingMessageBus.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/RoutingMessageBus.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeCommitter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeCommitter.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeCommitter.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeCommitter.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeFactory.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeFactory.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeFactory.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/Adapters/ScopeFactory.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/CqsObjectMapper.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/CqsObjectMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/CqsObjectMapper.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/CqsObjectMapper.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/RegisterCqsServices.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/RegisterCqsServices.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Cqs/RegisterCqsServices.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Cqs/RegisterCqsServices.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Filters/PrincipalActionFilter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Filters/PrincipalActionFilter.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Filters/PrincipalActionFilter.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Filters/PrincipalActionFilter.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Filters/TransactionalAttribute.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Filters/TransactionalAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Filters/TransactionalAttribute.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Filters/TransactionalAttribute.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/JwtHelper.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/JwtHelper.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/JwtHelper.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/JwtHelper.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/JwtSettings.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/JwtSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/JwtSettings.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/JwtSettings.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/KeyValuePairConverter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/KeyValuePairConverter.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/KeyValuePairConverter.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/KeyValuePairConverter.cs
diff --git a/src/Server/App/Coderr.Server.WebSite/Infrastructure/Logging/MyLogAdapter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Logging/MyLogAdapter.cs
new file mode 100644
index 00000000..04f3b49c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Logging/MyLogAdapter.cs
@@ -0,0 +1,85 @@
+﻿using System;
+using System.Diagnostics;
+using log4net;
+using Microsoft.Extensions.Logging;
+using ILogger = Microsoft.Extensions.Logging.ILogger;
+
+namespace Coderr.Server.WebSite.Infrastructure.Logging
+{
+    public class MyLogFactoryAdapter : ILoggerFactory
+    {
+        public void Dispose()
+        {
+            throw new NotImplementedException();
+        }
+
+        public ILogger CreateLogger(string categoryName)
+        {
+            var logger = LogManager.GetLogger(typeof(MyLogAdapter));
+            return new MyLogAdapter(logger);
+        }
+
+        public void AddProvider(ILoggerProvider provider)
+        {
+            
+        }
+    }
+
+    public class MyLogAdapter : ILogger
+    {
+        private ILog _logger;
+
+        public MyLogAdapter(ILog logger)
+        {
+            _logger = logger;
+        }
+
+        public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
+        {
+            switch (logLevel)
+            {
+                case LogLevel.Trace:
+                case LogLevel.Debug:
+                    _logger.Debug(formatter(state, exception));
+                    break;
+                case LogLevel.Information:
+                    _logger.Info(formatter(state, exception));
+                    break;
+                case LogLevel.Warning:
+                    _logger.Warn(formatter(state, exception));
+                    break;
+                case LogLevel.Error:
+                case LogLevel.Critical:
+                    _logger.Error(formatter(state, exception));
+                    break;
+                default:
+                    Debugger.Break();
+                    break;
+            }
+        }
+
+        public bool IsEnabled(LogLevel logLevel)
+        {
+            return true;
+        }
+
+        public IDisposable BeginScope<TState>(TState state)
+        {
+            return new FakeLogScope(state);
+        }
+    }
+
+    public class FakeLogScope : IDisposable
+    {
+        private readonly object _state;
+
+        public FakeLogScope(object state)
+        {
+            _state = state;
+        }
+
+        public void Dispose()
+        {
+        }
+    }
+}
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServiceManagerSettingsWithDefaultOn.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServiceManagerSettingsWithDefaultOn.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServiceManagerSettingsWithDefaultOn.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServiceManagerSettingsWithDefaultOn.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServices.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServices.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServices.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/ApplicationServices.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForAnalyzer.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForAnalyzer.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForAnalyzer.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForAnalyzer.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForApp.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForApp.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForApp.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/BackgroundJobsForApp.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Modules/DbConnectionConfig.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/DbConnectionConfig.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Modules/DbConnectionConfig.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/DbConnectionConfig.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/Modules/RegisterContainerServices.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/RegisterContainerServices.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/Modules/RegisterContainerServices.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/Modules/RegisterContainerServices.cs
diff --git a/src/Server/App/Coderr.Server.WebSite/Infrastructure/MyUow.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/MyUow.cs
new file mode 100644
index 00000000..e4784ffc
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/Infrastructure/MyUow.cs
@@ -0,0 +1,148 @@
+﻿using System;
+using System.Data;
+using Griffin;
+using Griffin.Data;
+
+namespace Coderr.Server.WebSite.Infrastructure
+{
+    /// <summary>
+    ///     För att speca en CommandTimeout (så vi kan utesluta fel)
+    /// </summary>
+    public class MyUow : IAdoNetUnitOfWork
+    {
+        private readonly bool _ownsConnection;
+        private IDbConnection _connection;
+        private IDbTransaction _transaction;
+
+        /// <summary>
+        /// </summary>
+        /// <param name="connection">
+        ///     A connection may not be shared between multiple transactions, so make sure that the connection
+        ///     is unique for this uow
+        /// </param>
+        public MyUow(IDbConnection connection)
+        {
+            if (connection == null) throw new ArgumentNullException("connection");
+            if (connection.State != ConnectionState.Open)
+                throw new DataException("Connection '" + connection.ConnectionString + "' is not open.");
+
+            _connection = connection;
+            _ownsConnection = false;
+            _transaction = _connection.BeginTransaction();
+        }
+
+        /// <summary>
+        /// </summary>
+        /// <param name="connection">
+        ///     A connection may not be shared between multiple transactions, so make sure that the connection
+        ///     is unique for this uow
+        /// </param>
+        /// <param name="ownsConnection">This unit of work owns the connection and will close it when being disposed.</param>
+        public MyUow(IDbConnection connection, bool ownsConnection)
+        {
+            if (connection == null) throw new ArgumentNullException("connection");
+
+            _connection = connection;
+            _ownsConnection = ownsConnection;
+            _transaction = _connection.BeginTransaction();
+        }
+
+        /// <summary>
+        /// </summary>
+        /// <param name="connection">
+        ///     A connection may not be shared between multiple transactions, so make sure that the connection
+        ///     is unique for this uow
+        /// </param>
+        /// <param name="ownsConnection">This unit of work owns the connection and will close it when being disposed.</param>
+        /// <param name="isolationLevel">Isolation level that the transaction should use.</param>
+        public MyUow(IDbConnection connection, bool ownsConnection, IsolationLevel isolationLevel)
+        {
+            if (connection == null) throw new ArgumentNullException("connection");
+
+            _connection = connection;
+            _ownsConnection = ownsConnection;
+            _transaction = _connection.BeginTransaction(isolationLevel);
+        }
+
+        public TimeSpan DefaultCommandTimeout { get; set; } = TimeSpan.FromSeconds(30);
+
+        /// <summary>
+        ///     Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+        /// </summary>
+        public void Dispose()
+        {
+            if (_transaction != null)
+            {
+                _transaction.Rollback();
+                _transaction.Dispose();
+                _transaction = null;
+            }
+
+            if (_ownsConnection && _connection != null)
+            {
+                _connection.Dispose();
+                _connection = null;
+            }
+        }
+
+        /// <summary>
+        ///     Commit changes.
+        /// </summary>
+        /// <exception cref="TransactionAlreadyClosedException">Transaction have already been commited or disposed.</exception>
+        public void SaveChanges()
+        {
+            if (_transaction == null)
+                throw new TransactionAlreadyClosedException("Transaction have been closed");
+
+            _transaction.Commit();
+            _transaction = null;
+        }
+
+        /// <summary>
+        ///     Create a new command
+        /// </summary>
+        /// <returns>Created command (never <c>null</c>)</returns>
+        /// <remarks>
+        ///     <para>The created command have been enlisted in the local transaction which is wrapped by this Unit Of Work.</para>
+        /// </remarks>
+        /// <exception cref="DataException">Failed to create the command</exception>
+        public IDbCommand CreateCommand()
+        {
+            var cmd = _connection.CreateCommand();
+            cmd.Transaction = _transaction;
+            cmd.CommandTimeout = (int) DefaultCommandTimeout.TotalSeconds;
+            return cmd;
+        }
+
+        /// <summary>
+        ///     Execute a SQL query within the transaction
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="parameters"></param>
+        public void Execute(string sql, object parameters)
+        {
+            using (var cmd = CreateCommand())
+            {
+                cmd.CommandText = sql;
+                var dictionary = parameters.ToDictionary();
+                foreach (var kvp in dictionary) cmd.AddParameter(kvp.Key, kvp.Value);
+                cmd.CommandTimeout = (int) DefaultCommandTimeout.TotalSeconds;
+                cmd.ExecuteNonQuery();
+            }
+        }
+
+        /// <summary>
+        ///     Execute a SQL query within the transaction
+        /// </summary>
+        /// <param name="sql"></param>
+        public void Execute(string sql)
+        {
+            using (var cmd = CreateCommand())
+            {
+                cmd.CommandText = sql;
+                cmd.CommandTimeout = (int) DefaultCommandTimeout.TotalSeconds;
+                cmd.ExecuteNonQuery();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/PendingRequestTrackingMiddleware.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/PendingRequestTrackingMiddleware.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/PendingRequestTrackingMiddleware.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/PendingRequestTrackingMiddleware.cs
diff --git a/src/Server/App/Coderr.Server.WebSite/Infrastructure/Premise/PremiseStart.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Premise/PremiseStart.cs
new file mode 100644
index 00000000..a34d42f5
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/Infrastructure/Premise/PremiseStart.cs
@@ -0,0 +1,98 @@
+﻿using System;
+using System.Data;
+using System.Data.SqlClient;
+using Coderr.Server.Abstractions;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Infrastructure.Configuration.Database;
+using Coderr.Server.SqlServer;
+using Coderr.Server.SqlServer.Migrations;
+using Coderr.Server.WebSite.Infrastructure.ApiKeyAuthentication;
+using log4net;
+using Microsoft.AspNetCore.Authentication;
+using Microsoft.AspNetCore.Authentication.Cookies;
+using Microsoft.AspNetCore.Builder;
+
+namespace Coderr.Server.WebSite.Infrastructure.Premise
+{
+    public static class PremiseStart
+    {
+        private static ILog _logger = LogManager.GetLogger(typeof(PremiseStart));
+        private static IConfiguration _config;
+
+        public static void AddPremiseBeforeAuthMiddleware(this IApplicationBuilder app, IConfiguration configuration)
+        {
+            app.Use(async (context2, next) =>
+            {
+                if (context2.Request.Headers["X-Api-Key"].Count < 1)
+                {
+                    await next.Invoke();
+                    return;
+                }
+
+                var options = new ApiKeyAuthOptions
+                {
+                    OpenDb = () => OpenConnection(configuration),
+                    AuthenticationScheme = "ApiKey",
+                };
+
+                try
+                {
+                    var ticket = await ApiKeyAuthenticator.CreateTicket(context2.Request, options);
+                    if (ticket == null)
+                    {
+                        _logger.Warn("Unauthorized");
+                        await context2.ForbidAsync();
+                        return;
+                    }
+
+                    await context2.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, ticket.Principal);
+                    context2.User = ticket.Principal;
+                }
+                catch (Exception ex)
+                {
+                    _logger.Error("Failed to authenticate", ex);
+                }
+
+
+                await next.Invoke();
+            });
+
+        }
+
+        public static IDbConnection OpenConnection(IConfiguration configuration)
+        {
+            var connectionString = configuration.GetConnectionString("Db");
+            if (connectionString == null)
+                throw new InvalidOperationException("Failed to find connection string 'Db'.");
+
+            var con = new SqlConnection(connectionString);
+            con.Open();
+            return con;
+            //return con.ToCoderrConnection();
+        }
+
+        public static bool UseWindowsAuthentication
+        {
+            get
+            {
+                var settings = _config.GetSection("Premise")["WindowsAuthentication"];
+                return settings?.Equals("true", StringComparison.OrdinalIgnoreCase) == true;
+            }
+        }
+
+        public static void Init(IConfiguration config)
+        {
+            _config = config;
+            var configStore = new DatabaseStore(() => OpenConnection(config));
+            HostConfig.Instance.Configured += (sender, args) =>
+            {
+            };
+
+            //var premiseRunner = new MigrationRunner(
+            //    () => OpenConnection(config),
+            //    "Premise",
+            //    typeof(PremiseSchemaPointer).Namespace);
+            //SqlServerTools.AddMigrationRunner(premiseRunner);
+        }
+    }
+}
diff --git a/src/Server/App/Coderr.Server.WebSite/Infrastructure/PrincipalActionFilter.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/PrincipalActionFilter.cs
new file mode 100644
index 00000000..34fd3846
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/Infrastructure/PrincipalActionFilter.cs
@@ -0,0 +1,21 @@
+﻿using System.Security.Claims;
+using Coderr.Server.WebSite.Infrastructure.Boot;
+using Microsoft.AspNetCore.Mvc.Filters;
+
+namespace Coderr.Server.WebSite.Infrastructure
+{
+    public class PrincipalActionFilter : ActionFilterAttribute
+    {
+        public override void OnActionExecuting(ActionExecutingContext filterContext)
+        {
+            //DependencyResolver.Current.
+            if (filterContext.HttpContext.User is ClaimsPrincipal principal)
+            {
+                var setter = (PrincipalWrapper)filterContext.HttpContext.RequestServices.GetService(typeof(PrincipalWrapper));
+                setter.Principal = principal;
+            }
+                
+            base.OnActionExecuting(filterContext);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/WebPush/PushClient.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/WebPush/PushClient.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/WebPush/PushClient.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/WebPush/PushClient.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushAppModule.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushAppModule.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushAppModule.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushAppModule.cs
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushReportModule.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushReportModule.cs
similarity index 89%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushReportModule.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushReportModule.cs
index 70fed1e7..592e53d9 100644
--- a/src/Server/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushReportModule.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Infrastructure/WebPush/WebPushReportModule.cs
@@ -9,6 +9,7 @@ public class WebPushReportModule : IReportAnalyzerModule
         public void Configure(ConfigurationContext context)
         {
             context.Services.AddScoped(typeof(IWebPushClient), typeof(PushClient));
+            context.Services.AddSingleton(context.Configuration);
         }
 
         public void Start(StartContext context)
diff --git a/src/Server/Coderr.Server.WebSite/Infrastructure/WebSockets/IWebSocketHub.cs b/src/Server/App/Coderr.Server.WebSite/Infrastructure/WebSockets/IWebSocketHub.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Infrastructure/WebSockets/IWebSocketHub.cs
rename to src/Server/App/Coderr.Server.WebSite/Infrastructure/WebSockets/IWebSocketHub.cs
diff --git a/src/Server/Coderr.Server.WebSite/ModelStateExtensions.cs b/src/Server/App/Coderr.Server.WebSite/ModelStateExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/ModelStateExtensions.cs
rename to src/Server/App/Coderr.Server.WebSite/ModelStateExtensions.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Accounts/AcceptViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Models/Accounts/AcceptViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Accounts/AcceptViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Accounts/AcceptViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Accounts/IsTrueAttribute.cs b/src/Server/App/Coderr.Server.WebSite/Models/Accounts/IsTrueAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Accounts/IsTrueAttribute.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Accounts/IsTrueAttribute.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Accounts/LoginResult.cs b/src/Server/App/Coderr.Server.WebSite/Models/Accounts/LoginResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Accounts/LoginResult.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Accounts/LoginResult.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Accounts/LoginViewmodel.cs b/src/Server/App/Coderr.Server.WebSite/Models/Accounts/LoginViewmodel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Accounts/LoginViewmodel.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Accounts/LoginViewmodel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Accounts/RegisterResult.cs b/src/Server/App/Coderr.Server.WebSite/Models/Accounts/RegisterResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Accounts/RegisterResult.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Accounts/RegisterResult.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Accounts/RegisterViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Models/Accounts/RegisterViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Accounts/RegisterViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Accounts/RegisterViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Accounts/RequestPasswordResetViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Models/Accounts/RequestPasswordResetViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Accounts/RequestPasswordResetViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Accounts/RequestPasswordResetViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Accounts/ResetPasswordViewModel.cs b/src/Server/App/Coderr.Server.WebSite/Models/Accounts/ResetPasswordViewModel.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Accounts/ResetPasswordViewModel.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Accounts/ResetPasswordViewModel.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/ApplicationUser.cs b/src/Server/App/Coderr.Server.WebSite/Models/ApplicationUser.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/ApplicationUser.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/ApplicationUser.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/AuthenticatedUser.cs b/src/Server/App/Coderr.Server.WebSite/Models/AuthenticatedUser.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/AuthenticatedUser.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/AuthenticatedUser.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/ErrorMessage.cs b/src/Server/App/Coderr.Server.WebSite/Models/ErrorMessage.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/ErrorMessage.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/ErrorMessage.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Users/AccountViewModels.cs b/src/Server/App/Coderr.Server.WebSite/Models/Users/AccountViewModels.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Users/AccountViewModels.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Users/AccountViewModels.cs
diff --git a/src/Server/Coderr.Server.WebSite/Models/Users/AuthenticatedUser.cs b/src/Server/App/Coderr.Server.WebSite/Models/Users/AuthenticatedUser.cs
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Models/Users/AuthenticatedUser.cs
rename to src/Server/App/Coderr.Server.WebSite/Models/Users/AuthenticatedUser.cs
diff --git a/src/Server/App/Coderr.Server.WebSite/PendingRequestTrackingMiddleware.cs b/src/Server/App/Coderr.Server.WebSite/PendingRequestTrackingMiddleware.cs
new file mode 100644
index 00000000..5f0af802
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/PendingRequestTrackingMiddleware.cs
@@ -0,0 +1,32 @@
+﻿using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+
+namespace Coderr.Server.WebSite
+{
+    public class PendingRequestTrackingMiddleware
+    {
+        private readonly RequestDelegate _next;
+        private static long _numberOfRequests;
+
+        public PendingRequestTrackingMiddleware(RequestDelegate next)
+        {
+            _next = next;
+        }
+
+        public static long NumberOfRequests => _numberOfRequests;
+
+        public async Task Invoke(HttpContext httpContext)
+        {
+            Interlocked.Increment(ref _numberOfRequests);
+            try
+            {
+                await _next(httpContext);
+            }
+            finally
+            {
+                Interlocked.Decrement(ref _numberOfRequests);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.WebSite/Program.cs b/src/Server/App/Coderr.Server.WebSite/Program.cs
similarity index 93%
rename from src/Server/Coderr.Server.WebSite/Program.cs
rename to src/Server/App/Coderr.Server.WebSite/Program.cs
index f2954f5f..a97fd9ed 100644
--- a/src/Server/Coderr.Server.WebSite/Program.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Program.cs
@@ -4,6 +4,7 @@
 using System.Reflection;
 using Coderr.Client;
 using Coderr.Server.Abstractions;
+using Coderr.Server.ReportAnalyzer.Abstractions.Inbound.Models;
 using Coderr.Server.SqlServer.ReportAnalyzer;
 using Coderr.Server.WebSite.Infrastructure.Adapters.Logging;
 using Griffin.Data.Mapper;
@@ -11,6 +12,7 @@
 using log4net.Config;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.Extensions.Hosting;
+using Newtonsoft.Json;
 
 namespace Coderr.Server.WebSite
 {
@@ -18,9 +20,12 @@ public class Program
     {
         private static ILog _logger;
         private static string _environmentName;
-
+        
         public static void Main(string[] args)
         {
+            // only here in this repos.
+            ServerConfig.Instance.IsCommercial = true;
+
             AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
 
             _environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")?.ToLower() ?? "Production";
diff --git a/src/Server/Coderr.Server.WebSite/Properties/launchSettings.json b/src/Server/App/Coderr.Server.WebSite/Properties/launchSettings.json
similarity index 59%
rename from src/Server/Coderr.Server.WebSite/Properties/launchSettings.json
rename to src/Server/App/Coderr.Server.WebSite/Properties/launchSettings.json
index bdf90ca3..e32f48e5 100644
--- a/src/Server/Coderr.Server.WebSite/Properties/launchSettings.json
+++ b/src/Server/App/Coderr.Server.WebSite/Properties/launchSettings.json
@@ -3,17 +3,31 @@
     "windowsAuthentication": false,
     "anonymousAuthentication": true,
     "iisExpress": {
-      "applicationUrl": "http://localhost:54252",
+      "applicationUrl": "http://localhost:60474/",
       "sslPort": 44393
     }
   },
   "profiles": {
-    "Debug": {
+    "IIS Express": {
       "commandName": "IISExpress",
       "environmentVariables": {
         "ASPNETCORE_ENVIRONMENT": "Development"
       }
     },
+    "Live": {
+      "commandName": "IISExpress",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "Premise": {
+      "commandName": "IISExpress",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "OnPremiseDev"
+      }
+    },
+
+
     "Angular": {
       "commandName": "Project",
       "launchBrowser": true,
diff --git a/src/Server/Coderr.Server.WebSite/Properties/serviceDependencies.json b/src/Server/App/Coderr.Server.WebSite/Properties/serviceDependencies.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Properties/serviceDependencies.json
rename to src/Server/App/Coderr.Server.WebSite/Properties/serviceDependencies.json
diff --git a/src/Server/Coderr.Server.WebSite/Properties/serviceDependencies.local.json b/src/Server/App/Coderr.Server.WebSite/Properties/serviceDependencies.local.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Properties/serviceDependencies.local.json
rename to src/Server/App/Coderr.Server.WebSite/Properties/serviceDependencies.local.json
diff --git a/src/Server/App/Coderr.Server.WebSite/ScaffoldingReadMe.txt b/src/Server/App/Coderr.Server.WebSite/ScaffoldingReadMe.txt
new file mode 100644
index 00000000..6e6208dc
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/ScaffoldingReadMe.txt
@@ -0,0 +1,3 @@
+﻿Support for ASP.NET Core Identity was added to your project.
+
+For setup and configuration information, see https://go.microsoft.com/fwlink/?linkid=2116645.
diff --git a/src/Server/Coderr.Server.WebSite/Startup.cs b/src/Server/App/Coderr.Server.WebSite/Startup.cs
similarity index 97%
rename from src/Server/Coderr.Server.WebSite/Startup.cs
rename to src/Server/App/Coderr.Server.WebSite/Startup.cs
index 2c8b07f9..aaa19850 100644
--- a/src/Server/Coderr.Server.WebSite/Startup.cs
+++ b/src/Server/App/Coderr.Server.WebSite/Startup.cs
@@ -49,7 +49,7 @@ public void ConfigureServices(IServiceCollection services)
                     x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                 })
                 .AddJwtBearer(JwtHelper.Configure);
-            _coderrStartup.AddAuthentication(authBuilder);
+            //_coderrStartup.AddAuthentication(authBuilder);
 
             services.AddControllersWithViews(options =>
             {
@@ -144,9 +144,10 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApp
             }
 
             app.UseRouting();
+            //_coderrStartup.ConfigureBeforeAuthentication(app);
             app.UseAuthentication();
+            _coderrStartup.ConfigureAfterAuthentication(app);
             app.UseAuthorization();
-            _coderrStartup.ConfigureAuthentication(app);
 
 
             //app.Use(async (context, next) =>
diff --git a/src/Server/App/Coderr.Server.WebSite/TracingQueueProvider.cs b/src/Server/App/Coderr.Server.WebSite/TracingQueueProvider.cs
new file mode 100644
index 00000000..af9e2994
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/TracingQueueProvider.cs
@@ -0,0 +1,637 @@
+﻿//using System;
+//using System.Collections.Generic;
+//using System.Data;
+//using System.Diagnostics;
+//using System.Linq;
+//using System.Security.Claims;
+//using System.Threading;
+//using System.Threading.Tasks;
+//using System.Web;
+//using DotNetCqs;
+//using DotNetCqs.DependencyInjection;
+//using DotNetCqs.MessageProcessor;
+//using DotNetCqs.Queues;
+//using DotNetCqs.Queues.AdoNet;
+//using log4net;
+//using Newtonsoft.Json;
+
+//namespace Coderr.Server.Web
+//{
+//    public class TracingQueueProvider : IMessageQueueProvider
+//    {
+//        private readonly IMessageQueueProvider _inner;
+
+//        public TracingQueueProvider(IMessageQueueProvider inner)
+//        {
+//            _inner = inner;
+//        }
+
+//        public IMessageQueue Open(string queueName)
+//        {
+//            var q = _inner.Open(queueName);
+//            return new TracingQueue(q);
+//        }
+//    }
+
+//    public class TracingQueue : IMessageQueue
+//    {
+//        private readonly IMessageQueue _inner;
+
+//        public TracingQueue(IMessageQueue inner)
+//        {
+//            _inner = inner;
+
+//        }
+
+//        public IMessageQueueSession BeginSession()
+//        {
+//            var s = _inner.BeginSession();
+
+//            return new TracingSession(_inner.Name, s);
+//        }
+
+//        public string Name { get { return _inner.Name; } }
+//    }
+
+//    public class TracingSession : IMessageQueueSession
+//    {
+//        private readonly string _queueName;
+//        private readonly IMessageQueueSession _inner;
+//        private ILog _logger = LogManager.GetLogger(typeof(TracingSession));
+//        private bool _gotData = false;
+//        private bool _saved;
+//        private bool _dequeue;
+//        private bool _enqueue;
+//        public TracingSession(string queueName, IMessageQueueSession inner)
+//        {
+//            _queueName = queueName;
+//            _inner = inner;
+//        }
+
+//        public void Dispose()
+//        {
+//            if (!_saved)
+//                Debugger.Break();
+//            _inner.Dispose();
+//        }
+
+//        public async Task<Message> Dequeue(TimeSpan suggestedWaitPeriod)
+//        {
+//            if (_enqueue)
+//                Debugger.Break();
+//            _dequeue = true;
+//            var t = await _inner.Dequeue(suggestedWaitPeriod);
+//            if (t != null)
+//            {
+//                _logger.Debug($"{_queueName}{GetHashCode()} DEQUEUE " + JsonConvert.SerializeObject(t.Body));
+//                _gotData = true;
+//            }
+
+//            return t;
+//        }
+
+//        public async Task<DequeuedMessage> DequeueWithCredentials(TimeSpan suggestedWaitPeriod)
+//        {
+//            if (_enqueue)
+//                Debugger.Break();
+//            _dequeue = true;
+
+//            var t = await _inner.DequeueWithCredentials(suggestedWaitPeriod);
+//            if (t != null)
+//            {
+//                _logger.Debug($"{_queueName}{GetHashCode()} DEQUEUE " + JsonConvert.SerializeObject(t.Message.Body));
+//                _gotData = true;
+
+//            }
+//            return t;
+//        }
+
+//        public async Task EnqueueAsync(ClaimsPrincipal principal, IReadOnlyCollection<Message> messages)
+//        {
+//            if (_dequeue)
+//                Debugger.Break();
+//            _enqueue = true;
+//            foreach (var message in messages)
+//            {
+//                _logger.Debug($"{_queueName}{GetHashCode()} ENQUEUE " + JsonConvert.SerializeObject(message.Body));
+//            }
+//            _gotData = true;
+//            await _inner.EnqueueAsync(principal, messages);
+//        }
+
+//        public async Task EnqueueAsync(IReadOnlyCollection<Message> messages)
+//        {
+//            if (!messages.Any())
+//                Debugger.Break();
+//            foreach (var message in messages)
+//            {
+//                _logger.Debug($"{_queueName}{GetHashCode()} ENQUEUE " + JsonConvert.SerializeObject(message.Body));
+//            }
+//            _gotData = true;
+//            await _inner.EnqueueAsync(messages);
+//        }
+
+//        public async Task EnqueueAsync(ClaimsPrincipal principal, Message message)
+//        {
+//            _logger.Debug($"{_queueName}{GetHashCode()} ENQUEUE " + JsonConvert.SerializeObject(message.Body));
+//            _gotData = true;
+//            await _inner.EnqueueAsync(principal, message);
+//        }
+
+//        public async Task EnqueueAsync(Message message)
+//        {
+//            _logger.Debug($"{_queueName}{GetHashCode()} ENQUEUE " + JsonConvert.SerializeObject(message.Body));
+//            _gotData = true;
+//            await _inner.EnqueueAsync(message);
+//        }
+
+//        public Task SaveChanges()
+//        {
+//            if (_gotData)
+//                _logger.Debug($"{_queueName}{GetHashCode()} SaveChanges ");
+//            if (_saved)
+//                Debugger.Break();
+//            _saved = true;
+//            return _inner.SaveChanges();
+//        }
+//    }
+
+//    public class AdoNetMessageQueueProvider2 : IMessageQueueProvider
+//    {
+//        private readonly Func<IDbConnection> _connection;
+//        private readonly IMessageSerializer<string> _serializer;
+
+//        public AdoNetMessageQueueProvider2(Func<IDbConnection> connection, IMessageSerializer<string> serializer)
+//        {
+//            _connection = connection;
+//            _serializer = serializer;
+//            TableName = "MessageQueue";
+//        }
+
+//        /// <summary>
+//        /// </summary>
+//        public string TableName { get; set; }
+
+//        public IMessageQueue Open(string queueName)
+//        {
+//            return new AdoNetMessageQueue2(queueName, _connection, _serializer)
+//            {
+//                TableName = "MessageQueue"
+//            };
+//        }
+//    }
+//    public class AdoNetMessageQueue2 : IMessageQueue
+//    {
+//        private readonly Func<IDbConnection> _connectionFactory;
+//        private readonly IMessageSerializer<string> _messageSerializer;
+//        private ILog _logger = LogManager.GetLogger(typeof(AdoNetMessageQueue2));
+
+//        public AdoNetMessageQueue2(string queueName, Func<IDbConnection> connectionFactory,
+//            IMessageSerializer<string> messageSerializer)
+//        {
+//            Name = queueName;
+//            _connectionFactory = connectionFactory;
+//            _messageSerializer = messageSerializer;
+//            TableName = "MessageQueue";
+//            IsolationLevel = IsolationLevel.ReadCommitted;
+//        }
+
+//        public IsolationLevel IsolationLevel { get; set; }
+
+//        public string TableName { get; set; }
+
+//        public string Name { get; }
+
+//        public IMessageQueueSession BeginSession()
+//        {
+//            _logger.Debug("New session");
+//            var connection = _connectionFactory();
+//            if (IsolationLevel == IsolationLevel.Unspecified)
+//                return new AdoNetMessageQueueSession2(TableName, Name, connection, _messageSerializer);
+
+//            var transaction = connection.BeginTransaction(IsolationLevel);
+//            return new AdoNetMessageQueueSession2(TableName, Name, transaction, _messageSerializer);
+//        }
+//    }
+
+//    public class AdoNetMessageQueueSession2 : IMessageQueueSession
+//    {
+//        private ILog _log = LogManager.GetLogger(typeof(AdoNetMessageQueueSession2));
+//        private readonly IMessageSerializer<string> _messageSerializer;
+//        private readonly string _queueName;
+//        private readonly string _tableName;
+//        private IDbConnection _connection;
+//        private bool _dequeued;
+//        private IDbTransaction _transaction;
+
+//        public AdoNetMessageQueueSession2(string tableName, string queueName, IDbConnection connection,
+//            IMessageSerializer<string> messageSerializer)
+//        {
+//            _messageSerializer = messageSerializer;
+//            _tableName = tableName ?? throw new ArgumentNullException(nameof(tableName));
+//            _queueName = queueName ?? throw new ArgumentNullException(nameof(queueName));
+//            _connection = connection ?? throw new ArgumentNullException(nameof(connection));
+//            _transaction = connection.BeginTransaction();
+//            _log.Debug($"{_queueName} Open1 " + _connection.GetHashCode());
+//        }
+
+
+//        public AdoNetMessageQueueSession2(string tableName, string queueName, IDbTransaction transaction,
+//            IMessageSerializer<string> messageSerializer)
+//        {
+//            _messageSerializer = messageSerializer;
+//            _tableName = tableName ?? throw new ArgumentNullException(nameof(tableName));
+//            _queueName = queueName ?? throw new ArgumentNullException(nameof(queueName));
+//            _transaction = transaction ?? throw new ArgumentNullException(nameof(transaction));
+//            _connection = transaction.Connection;
+//            _log.Debug($"{_queueName} Open2 " + _connection.GetHashCode());
+//        }
+
+//        public LoggerHandler Logger;
+
+//        public Task<Message> Dequeue(TimeSpan suggestedWaitTime)
+//        {
+//            EnsureNotDequeued();
+
+//            var id = 0;
+//            AdoNetMessageDto msg;
+//            using (var cmd = _connection.CreateCommand())
+//            {
+//                cmd.Transaction = _transaction;
+//                cmd.CommandText = $"SELECT TOP(1) Id, Body FROM {_tableName} WITH (ROWLOCK) WHERE QueueName = @name";
+//                cmd.AddParameter("name", _queueName);
+//                using (var reader = cmd.ExecuteReader())
+//                {
+//                    if (!reader.Read())
+//                        return Task.FromResult<Message>(null);
+
+//                    id = reader.GetInt32(0);
+//                    var data = reader.GetString(1);
+//                    _log.Debug($"{_queueName}{GetHashCode()}  Read MSGID " + id);
+//                    msg = (AdoNetMessageDto)_messageSerializer.Deserialize("Message", data);
+//                }
+//            }
+//            using (var cmd = _connection.CreateCommand())
+//            {
+//                cmd.Transaction = _transaction;
+//                cmd.CommandText = $"DELETE FROM {_tableName} WHERE Id = @id";
+//                cmd.AddParameter("id", id);
+//                _log.Debug($"{_queueName}{GetHashCode()}  DELETE MSGID " + id);
+//                cmd.ExecuteNonQuery();
+//            }
+
+//            msg.ToMessage(_messageSerializer, out var message, out var user);
+//            msg.Properties["X-AdoNet-Id"] = id.ToString();
+//            return Task.FromResult(message);
+//        }
+
+//        public async Task<DequeuedMessage> DequeueWithCredentials(TimeSpan suggestedWaitTime)
+//        {
+//            EnsureNotDequeued();
+
+//            int id;
+//            AdoNetMessageDto msg;
+//            using (var cmd = _connection.CreateCommand())
+//            {
+//                cmd.Transaction = _transaction;
+//                cmd.CommandText = $"SELECT TOP(1) Id, Body FROM {_tableName} WITH (updlock, readpast) WHERE QueueName = @name";
+//                cmd.AddParameter("name", _queueName);
+//                using (var reader = cmd.ExecuteReader())
+//                {
+//                    if (!reader.Read())
+//                    {
+//                        await Task.Delay(500);
+//                        return null;
+//                    }
+
+
+//                    id = reader.GetInt32(0);
+//                    var data = reader.GetString(1);
+
+//                    _log.Debug($"{_queueName}{GetHashCode()}  Read MSGID " + id);
+//                    msg = (AdoNetMessageDto)_messageSerializer.Deserialize("Message", data);
+//                }
+//            }
+//            using (var cmd = _connection.CreateCommand())
+//            {
+//                _log.Debug($"{_queueName}{GetHashCode()}  DELETE MSGID " + id);
+//                cmd.Transaction = _transaction;
+//                cmd.CommandText = $"DELETE FROM {_tableName} WHERE Id = @id";
+//                cmd.AddParameter("id", id);
+//                cmd.ExecuteNonQuery();
+//            }
+
+//            msg.ToMessage(_messageSerializer, out var message, out var principal);
+//            msg.Properties["X-AdoNet-Id"] = id.ToString();
+//            return new DequeuedMessage(principal, message);
+//        }
+
+//        public Task EnqueueAsync(ClaimsPrincipal user, IReadOnlyCollection<Message> messages)
+//        {
+//            foreach (var msg in messages)
+//            {
+//                var dto = new AdoNetMessageDto(user, msg, _messageSerializer);
+//                _messageSerializer.Serialize(dto, out var json, out var contentType);
+//                InsertMessage(json, contentType);
+//            }
+//            return Task.FromResult<object>(null);
+//        }
+
+//        public Task EnqueueAsync(IReadOnlyCollection<Message> messages)
+//        {
+//            foreach (var msg in messages)
+//            {
+//                var dto = new AdoNetMessageDto(null, msg, _messageSerializer);
+//                _messageSerializer.Serialize(dto, out var json, out var contentType);
+
+//                InsertMessage(json, contentType);
+//            }
+//            return Task.FromResult<object>(null);
+//        }
+
+//        public Task EnqueueAsync(ClaimsPrincipal user, Message msg)
+//        {
+//            var dto = new AdoNetMessageDto(user, msg, _messageSerializer);
+//            _messageSerializer.Serialize(dto, out var json, out var contentType);
+
+//            InsertMessage(json, contentType);
+
+//            return Task.FromResult<object>(null);
+//        }
+
+//        public Task EnqueueAsync(Message msg)
+//        {
+//            var dto = new AdoNetMessageDto(null, msg, _messageSerializer);
+//            _messageSerializer.Serialize(dto, out var json, out var contentType);
+
+//            InsertMessage(json, contentType);
+
+//            return Task.FromResult<object>(null);
+//        }
+
+//        public Task SaveChanges()
+//        {
+//            _transaction.Commit();
+//            return Task.FromResult<object>(null);
+//        }
+
+//        public void Dispose()
+//        {
+//            if (_connection != null)
+//                _log.Debug($"{_queueName} Close " + _connection.GetHashCode());
+
+//            _transaction?.Dispose();
+//            _transaction = null;
+//            _connection?.Dispose();
+//            _connection = null;
+//        }
+
+//        private void EnsureNotDequeued()
+//        {
+//            if (_dequeued)
+//                throw new NotSupportedException(
+//                    "The ADO.NET queue do not support multiple dequeues in the same message scope. It's because we use 'SELECT TOP(1)' internally which means that the same message is returned every time until the internal transaction is comitted.");
+//            _dequeued = true;
+//        }
+
+//        private void InsertMessage(string json, string typeName)
+//        {
+//            using (var cmd = _connection.CreateCommand())
+//            {
+//                cmd.Transaction = _transaction;
+//                cmd.CommandText =
+//                    $"INSERT INTO {_tableName} (CreatedAtUtc, QueueName, MessageType, Body) VALUES(GetUtcDate(),  @name, @MessageType, @Body);SELECT SCOPE_IDENTITY()";
+//                cmd.AddParameter("name", _queueName);
+//                cmd.AddParameter("Body", json);
+//                cmd.AddParameter("MessageType", typeName);
+//                var id = cmd.ExecuteScalar();
+//                _log.Debug($"{_queueName}{GetHashCode()}  INSERT MSGID " + id);
+//            }
+//        }
+//    }
+
+//    /// <summary>
+//    ///     Listens on inbound inboundQueue to be able to process messages.
+//    /// </summary>
+//    public class QueueListener2
+//    {
+//        private readonly IMessageRouter _outboundRouter;
+//        private readonly IMessageQueue _queue;
+//        private readonly IHandlerScopeFactory _scopeFactory;
+//        private TimeSpan[] _retryAttempts;
+//        static List<string> _items = new List<string>();
+
+//        public LoggerHandler Logger;
+
+//        /// <summary>
+//        ///     Creates a new instance of <see cref="QueueListener" />.
+//        /// </summary>
+//        /// <param name="inboundQueue">Used to receive messages</param>
+//        /// <param name="scopeFactory"></param>
+//        public QueueListener2(IMessageQueue inboundQueue, IMessageQueue outboundQueue, IHandlerScopeFactory scopeFactory)
+//        {
+//            _outboundRouter = new SingleQueueRouter(outboundQueue);
+//            _scopeFactory = scopeFactory ?? throw new ArgumentNullException(nameof(scopeFactory));
+//            _queue = inboundQueue ?? throw new ArgumentNullException(nameof(inboundQueue));
+//        }
+
+//        /// <summary>
+//        ///     Creates a new instance of <see cref="QueueListener" />.
+//        /// </summary>
+//        /// <param name="inboundQueue">Used to receive messages</param>
+//        /// <param name="outboundRouter">Routes messages through different queues</param>
+//        /// <param name="scopeFactory"></param>
+//        public QueueListener2(IMessageQueue inboundQueue, IMessageRouter outboundRouter,
+//            IHandlerScopeFactory scopeFactory)
+//        {
+//            _outboundRouter = outboundRouter;
+
+//            _scopeFactory = scopeFactory ?? throw new ArgumentNullException(nameof(scopeFactory));
+//            _queue = inboundQueue ?? throw new ArgumentNullException(nameof(inboundQueue));
+//        }
+
+//        /// <summary>
+//        ///     Intervals at which retries should be made for messages that can not be handled.
+//        /// </summary>
+//        public TimeSpan[] RetryAttempts
+//        {
+//            get => _retryAttempts;
+//            set => _retryAttempts = value ?? throw new ArgumentNullException(nameof(value));
+//        }
+
+//        /// <summary>
+//        ///     Have attempted several times (<see cref="RetryAttempts" />) to handle a message and failed.
+//        /// </summary>
+//        public event EventHandler<PoisonMessageEventArgs> PoisonMessageDetected;
+
+//        public Task ProcessMessageAsync(ClaimsPrincipal principal, Message message)
+//        {
+//            return ProcessMessageAsync(new DequeuedMessage(principal, message));
+//        }
+
+//        /// <summary>
+//        /// </summary>
+//        /// <returns></returns>
+//        public async Task ReceiveSingleMessageAsync()
+//        {
+//            var wrapper = new MsgWrapper();
+//            using (var session = _queue.BeginSession())
+//            {
+//                await ReceiveSingleMessageAsync(wrapper, session);
+//                await session.SaveChanges();
+//            }
+//        }
+
+//        public async Task RunAsync(CancellationToken token)
+//        {
+//            lock (_queue)
+//            {
+//                if (_items.Contains(_queue.Name))
+//                    Debugger.Break();
+//                _items.Add(_queue.Name);
+//            }
+
+            
+//            var wrapper = new MsgWrapper();
+//            while (!token.IsCancellationRequested)
+//            {
+//                using (var session = _queue.BeginSession())
+//                {
+//                    try
+//                    {
+//                        await ReceiveSingleMessageAsync(wrapper, session);
+//                        await session.SaveChanges();
+//                        if (wrapper.Message == null)
+//                        {
+//                            session.Dispose();
+//                            await Task.Delay(100);
+//                        }
+
+//                    }
+//                    catch (Exception ex)
+//                    {
+//                        Logger?.Invoke(LogLevel.Warning, _queue.Name,
+//                            "Message handling failed, attempt: " + wrapper.AttemptCount + ", " + ex);
+
+//                        // do not retry at all, consume invalid messages
+//                        if (RetryAttempts.Length == 0)
+//                        {
+//                            PoisonMessageDetected?.Invoke(this,
+//                                new PoisonMessageEventArgs(wrapper.Message.Principal, wrapper.Message.Message, ex));
+//                            await session.SaveChanges();
+//                            await Task.Delay(100, token);
+//                        }
+//                        else if (wrapper.AttemptCount < RetryAttempts.Length)
+//                        {
+//                            session.Dispose();
+//                            await Task.Delay(RetryAttempts[wrapper.AttemptCount], token);
+//                        }
+//                        else
+//                        {
+//                            Logger?.Invoke(LogLevel.Error, _queue.Name, "Removing poison message.");
+
+//                            PoisonMessageDetected?.Invoke(this,
+//                                new PoisonMessageEventArgs(wrapper.Message.Principal, wrapper.Message.Message, ex));
+//                            await session.SaveChanges();
+//                        }
+//                    }
+//                }
+//            }
+//        }
+
+//        /// <summary>
+//        ///     Closing container scope.
+//        /// </summary>
+//        public event EventHandler<ScopeClosingEventArgs> ScopeClosing;
+
+//        /// <summary>
+//        ///     A new scope have been created for a message
+//        /// </summary>
+//        public event EventHandler<ScopeCreatedEventArgs> ScopeCreated;
+
+//        private async Task ProcessMessageAsync(DequeuedMessage msg)
+//        {
+//            var outboundMessages = new List<Message>();
+//            using (var scope = _scopeFactory.CreateScope())
+//            {
+//                Logger?.Invoke(LogLevel.Debug, _queue.Name, $"Created scope: {scope.GetHashCode()}");
+//                var e = new ScopeCreatedEventArgs(scope, msg.Principal, msg.Message);
+//                ScopeCreated?.Invoke(this, e);
+
+//                var invoker = scope.ResolveDependency<IMessageInvoker>().First();
+//                var context = new InvocationContext(_queue.Name, msg.Principal, invoker, outboundMessages);
+
+//                Logger?.Invoke(LogLevel.Debug, _queue.Name, "Invoking message handler(s).");
+//                await invoker.ProcessAsync(context, msg.Message);
+
+//                ScopeClosing?.Invoke(this, new ScopeClosingEventArgs(scope, msg.Message, e.ApplicationState));
+//                Logger?.Invoke(LogLevel.Debug, _queue.Name, $"Closing scope: {scope.GetHashCode()}");
+//            }
+
+//            if (msg.Principal == null)
+//                await _outboundRouter.SendAsync(outboundMessages);
+//            else
+//                await _outboundRouter.SendAsync(msg.Principal, outboundMessages);
+//        }
+
+//        private async Task ReceiveSingleMessageAsync(MsgWrapper wrapper, IMessageQueueSession session)
+//        {
+//            var msg = await session.DequeueWithCredentials(TimeSpan.FromSeconds(1));
+//            if (msg == null)
+//            {
+//                wrapper.Clear();
+//                return;
+//            }
+
+//            if (msg.Principal != null)
+//                Logger?.Invoke(LogLevel.Info, _queue.Name,
+//                    $"Received[{msg.Principal.Identity.Name}]: {msg.Message.Body}");
+//            else
+//                Logger?.Invoke(LogLevel.Info, _queue.Name, $"Received[Anonymous]: {msg.Message.Body}");
+
+//            wrapper.Assign(msg, _retryAttempts.Length);
+//            await ProcessMessageAsync(msg);
+//        }
+
+//        private class MsgWrapper
+//        {
+//            private int _maxAttempts;
+//            private DequeuedMessage _message;
+
+//            /// <summary>
+//            ///     0 when first attempt is made.
+//            /// </summary>
+//            public int AttemptCount { get; private set; }
+
+//            public Guid Id => Message?.Message.MessageId ?? Guid.Empty;
+
+//            public bool IsLastAttempt => AttemptCount >= _maxAttempts;
+
+//            public DequeuedMessage Message
+//            {
+//                get { return _message; }
+//            }
+
+//            public void Assign(DequeuedMessage message, int maxAttempts)
+//            {
+//                if (Id == message.Message.MessageId)
+//                {
+//                    AttemptCount++;
+//                }
+//                else
+//                {
+//                    _maxAttempts = maxAttempts;
+//                    _message = message;
+//                    AttemptCount = 0;
+//                }
+//            }
+
+//            public void Clear()
+//            {
+//                AttemptCount = 0;
+//                _message = null;
+//            }
+//        }
+//    }
+//}
+
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/Accept.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/Accept.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Account/Accept.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/Accept.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/Activate.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/Activate.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Account/Activate.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/Activate.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/ActivationRequested.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/ActivationRequested.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Account/ActivationRequested.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/ActivationRequested.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/ChangePassword.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/ChangePassword.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Account/ChangePassword.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/ChangePassword.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/InvitationNotFound.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/InvitationNotFound.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Account/InvitationNotFound.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/InvitationNotFound.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/PasswordRequestReceived.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/PasswordRequestReceived.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Account/PasswordRequestReceived.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/PasswordRequestReceived.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/Register.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/Register.cshtml
similarity index 52%
rename from src/Server/Coderr.Server.WebSite/Views/Account/Register.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/Register.cshtml
index 6075a6a7..939876cf 100644
--- a/src/Server/Coderr.Server.WebSite/Views/Account/Register.cshtml
+++ b/src/Server/App/Coderr.Server.WebSite/Views/Account/Register.cshtml
@@ -26,29 +26,29 @@
         </script>
         <div class="row">
             <div class="col-lg-12">
-                <form method="POST" action="@Url.Action("Register", "Account")" name="register-form">
+                <form method="POST" action="@Url.Action("Register", "Account")"  name="register-form">
                     @Html.HiddenFor(x => x.ReturnUrl)
                     @Html.ValidationSummary(true)
                     @Html.AntiForgeryToken()
                     <div class="form-group">
                         <label for="UserName">Username</label>
-                        @Html.TextBoxFor(model => model.UserName, new {placeholder = "User name", @class = "form-control"})
+                        @Html.TextBoxFor(model => model.UserName, new { placeholder = "User name", @class = "form-control" })
                         @Html.ValidationMessageFor(model => model.UserName)
                     </div>
                     <div class="form-group">
                         <label for="Password">Password</label>
-                        @Html.PasswordFor(model => model.Password, new {placeholder = "Password", @class = "form-control"})
+                        @Html.PasswordFor(model => model.Password, new { placeholder = "Password", @class = "form-control" })
                         @Html.ValidationMessageFor(model => model.Password)
                         <span id="password-awesomeness"></span>
                     </div>
                     <div class="form-group">
                         <label for="Password2">Retype password</label>
-                        @Html.PasswordFor(model => model.Password2, new {placeholder = "Password verification", @class = "form-control"})
+                        @Html.PasswordFor(model => model.Password2, new { placeholder = "Password verification", @class = "form-control" })
                         @Html.ValidationMessageFor(model => model.Password2)
                     </div>
                     <div class="form-group">
                         <label for="Email">Email address</label>
-                        @Html.TextBoxFor(model => model.Email, new {placeholder = "Email", @class = "form-control"})
+                        @Html.TextBoxFor(model => model.Email, new { placeholder = "Email", @class = "form-control" })
                         @Html.ValidationMessageFor(model => model.Email)
                     </div>
                     <div class="form-group">
@@ -61,66 +61,66 @@
     </div>
 </div>
 @section scripts {
-<script type="text/javascript">
-    function scorePassword(pass) {
-        var score = 0;
-        if (!pass)
-            return score;
+    <script type="text/javascript">
+        function scorePassword(pass) {
+            var score = 0;
+            if (!pass)
+                return score;
 
-        // award every unique letter until 5 repetitions
-        var letters = new Object();
-        for (var i = 0; i < pass.length; i++) {
-            letters[pass[i]] = (letters[pass[i]] || 0) + 1;
-            score += 5.0 / letters[pass[i]];
-        }
+            // award every unique letter until 5 repetitions
+            var letters = new Object();
+            for (var i = 0; i < pass.length; i++) {
+                letters[pass[i]] = (letters[pass[i]] || 0) + 1;
+                score += 5.0 / letters[pass[i]];
+            }
 
-        // bonus points for mixing it up
-        var variations = {
-            digits: /\d/.test(pass),
-            lower: /[a-z]/.test(pass),
-            upper: /[A-Z]/.test(pass),
-            nonWords: /\W/.test(pass),
-        };
+            // bonus points for mixing it up
+            var variations = {
+                digits: /\d/.test(pass),
+                lower: /[a-z]/.test(pass),
+                upper: /[A-Z]/.test(pass),
+                nonWords: /\W/.test(pass),
+            };
 
-        var variationCount = 0;
-        for (var check in variations) {
-            variationCount += (variations[check] == true) ? 1 : 0;
-        }
-        score += (variationCount - 1) * 10;
+            var variationCount = 0;
+            for (var check in variations) {
+                variationCount += (variations[check] == true) ? 1 : 0;
+            }
+            score += (variationCount - 1) * 10;
 
-        return parseInt(score);
-    }
+            return parseInt(score);
+        }
 
-    function checkPassStrength(pass) {
-        var score = scorePassword(pass);
-        if (score > 80)
-            return "You got a new highscore!";
-        if (score > 50)
-            return "Good enough, but you can do better..";
-        if (score >= 20)
-            return "Weak password";
-        if (score < 20)
-            return "'1234' is not a real password...";
-        return "";
-    }
+        function checkPassStrength(pass) {
+            var score = scorePassword(pass);
+            if (score > 80)
+                return "You got a new highscore!";
+            if (score > 50)
+                return "Good enough, but you can do better..";
+            if (score >= 20)
+                return "Weak password";
+            if (score < 20)
+                return "'1234' is not a real password...";
+            return "";
+        }
 
-    $(function () {
-        $('#Password')
-            .keypress(function () {
-                $('#password-awesomeness').html(checkPassStrength(this.value));
-            });
-        $('#Password')
-            .keyup(function () {
-                $('#password-awesomeness').html(checkPassStrength(this.value));
-            });
-        $('#Passssword2')
-            .focusout(function () {
-                if ($('#Password2').val() != $('#Password').val()) {
-                    $('#Password2').next().html('Passwords should match.');
-                } else {
-                    $('#Password2').next().html('');
-                }
-            });
-    });
-</script>
+        $(function () {
+            $('#Password')
+                .keypress(function () {
+                    $('#password-awesomeness').html(checkPassStrength(this.value));
+                });
+            $('#Password')
+                .keyup(function () {
+                    $('#password-awesomeness').html(checkPassStrength(this.value));
+                });
+            $('#Passssword2')
+                .focusout(function () {
+                    if ($('#Password2').val() != $('#Password').val()) {
+                        $('#Password2').next().html('Passwords should match.');
+                    } else {
+                        $('#Password2').next().html('');
+                    }
+                });
+        });
+    </script>
 }
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/RequestPasswordReset.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/RequestPasswordReset.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Account/RequestPasswordReset.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/RequestPasswordReset.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/Account/ResetPassword.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Account/ResetPassword.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Account/ResetPassword.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Account/ResetPassword.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/Authentication/Login.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Authentication/Login.cshtml
similarity index 89%
rename from src/Server/Coderr.Server.WebSite/Views/Authentication/Login.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Authentication/Login.cshtml
index 5deb8393..9e3e7234 100644
--- a/src/Server/Coderr.Server.WebSite/Views/Authentication/Login.cshtml
+++ b/src/Server/App/Coderr.Server.WebSite/Views/Authentication/Login.cshtml
@@ -22,6 +22,10 @@
 <body>
     @RenderBody()
 
+    @if (ServerConfig.Instance.IsLive)
+    {
+        <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/7740744.js"></script>
+    }
     <link rel="stylesheet"
           href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.0/styles/railscasts.min.css">
     <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.0/highlight.min.js"></script>
diff --git a/src/Server/Coderr.Server.WebSite/Views/Home/Index.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Home/Index.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/Home/Index.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Home/Index.cshtml
diff --git a/src/Server/App/Coderr.Server.WebSite/Views/Home/Mine.html b/src/Server/App/Coderr.Server.WebSite/Views/Home/Mine.html
new file mode 100644
index 00000000..ae7b5be6
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/Views/Home/Mine.html
@@ -0,0 +1,64 @@
+﻿<div class="row">
+    <div class="col-lg-12">
+        <div class="card-box">
+            <h2>My errors</h2>
+            <table class="table table-striped">
+                <thead>
+                    <tr>
+                        <th>Name</th>
+                        <th>Application</th>
+                        <th>Assigned</th>
+                        <th>Last report</th>
+                        <th>Report count</th>
+                        <th>&nbsp;</th>
+                    </tr>
+                </thead>
+                <tbody id="incidentTable">
+                    <tr data-collection="Items">
+                        <td>
+                            <a href="" data-name="Name"></a>
+                        </td>
+                        <td>
+                            <a data-name="ApplicationName"></a>
+                        </td>
+                        <td data-name="AssignedAtUtc"></td>
+                        <td data-name="LastUpdateAtUtc"></td>
+                        <td data-name="ReportCount"></td>
+                        <td>
+                            <a href="#/application/:applicationId/incident/:incidentId/close"><i class="fa fa-info"></i></a>
+                            <a href="#/application/:applicationId/incident/:incidentId/close"><i class="fa fa-close"></i></a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+            <div data-name="suggestion"></div>
+            <p data-if="vm.isEmpty" class="lead">Looks like your list is empty, awesome job! <i class="fa fa-2x fa-birthday-cake text-warning"></i></p>
+        </div>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col">
+        <h2>Suggested incidents</h2>
+        <p>Here is a few suggestions for new incidents that you can take care of.</p>
+    </div>
+</div>
+<div class="row">
+    <div class="col" data-collection="Suggestions">
+        <div class="card-box">
+            <h3 data-name="Name"></h3>
+            <div class="lead text-primary">
+                <em><span data-name="Motivation"></span></em>
+                <hr />
+            </div>
+            <p>
+                Type: <span data-name="ExceptionTypeName"></span><br />
+                Application: <span data-name="ApplicationName"></span><br />
+            </p>
+            <pre data-name="StackTrace"></pre>
+            <a href="" data-name="Id" class="btn btn-outline-primary">View</a>
+        </div>
+    </div>
+
+</div>
+
diff --git a/src/Server/Coderr.Server.WebSite/Views/Shared/_Layout.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/Shared/_Layout.cshtml
similarity index 92%
rename from src/Server/Coderr.Server.WebSite/Views/Shared/_Layout.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/Shared/_Layout.cshtml
index 3b08937e..a5de20d4 100644
--- a/src/Server/Coderr.Server.WebSite/Views/Shared/_Layout.cshtml
+++ b/src/Server/App/Coderr.Server.WebSite/Views/Shared/_Layout.cshtml
@@ -43,6 +43,10 @@
         @RenderBody()
     </div>
 
+    @if (ServerConfig.Instance.IsLive)
+    {
+        <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/7740744.js"></script>
+    }
     <link rel="stylesheet"
           href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.0/styles/railscasts.min.css">
     <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.0/highlight.min.js"></script>
diff --git a/src/Server/Coderr.Server.WebSite/Views/_ViewImports.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/_ViewImports.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/_ViewImports.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/_ViewImports.cshtml
diff --git a/src/Server/Coderr.Server.WebSite/Views/_ViewStart.cshtml b/src/Server/App/Coderr.Server.WebSite/Views/_ViewStart.cshtml
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/Views/_ViewStart.cshtml
rename to src/Server/App/Coderr.Server.WebSite/Views/_ViewStart.cshtml
diff --git a/src/Server/App/Coderr.Server.WebSite/appsettings.Development.json b/src/Server/App/Coderr.Server.WebSite/appsettings.Development.json
new file mode 100644
index 00000000..c2517ebe
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/appsettings.Development.json
@@ -0,0 +1,40 @@
+﻿{
+  "LoginUrl": "http://localhost:61400/",
+  "MessageQueue": {
+    "ConnectionString": "Endpoint=sb://coderrlive.servicebus.windows.net/;SharedAccessKeyName=App;SharedAccessKey=zV623X84oZuyWEgn/PR21a72/snkxZA/r7PIMJYWEbY=",
+    "ReportQueue": "reports-dev",
+    "ReportEventQueue": "report-events-dev",
+    "AppQueue": "events-dev",
+    "InboundPartitions": "inboundpartitions-dev"
+  },
+  "ConnectionStrings": {
+    "Db": "Data Source=.;Initial Catalog=live-dev-global;Integrated Security=True;Connect Timeout=15;MultipleActiveResultSets=true;",
+    "Tenant": "Data Source=.;Initial Catalog={databaseName};Integrated Security=True;MultipleActiveResultSets=true;Connection Timeout=30;"
+  },
+  "AppSettings": {
+    "IsLive": true
+  },
+  "DbSettings": {
+    "TenantDbNameTemplate": "live-dev-tenant{0}"
+  },
+  "Live": {
+    "Lobby": "http://localhost:44343/"
+  },
+  "DisabledModules": {
+    "App": [
+      "BackgroundJobsForApp",
+      "DbConnectionConfig"
+    ],
+    "Reportanalyzer": [
+      "BackgroundJobsForAnalyzer"
+    ]
+  },
+  "Logging": {
+    "IncludeScopes": false,
+    "LogLevel": {
+      "Default": "Debug",
+      "System": "Debug",
+      "Microsoft": "Debug"
+    }
+  }
+}
diff --git a/src/Server/App/Coderr.Server.WebSite/appsettings.OnPremiseDev.json b/src/Server/App/Coderr.Server.WebSite/appsettings.OnPremiseDev.json
new file mode 100644
index 00000000..c4c62636
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/appsettings.OnPremiseDev.json
@@ -0,0 +1,25 @@
+﻿{
+  "ConnectionStrings": {
+    "Db": "Data Source=.;Initial Catalog=CoderrPremise;Integrated Security=True;Connect Timeout=15;"
+  },
+  "Queues": {
+    "Type": "Disk",
+    "Folder": "C:\\Temp\\CoderrQueues"
+  },
+  "DisabledModules": {
+    "App": [
+      "LiveModule",
+      "TenantBackgroundJobs",
+      "LiveDbConnectionConfig"
+    ],
+    "Reportanalyzer": []
+  },
+  "Logging": {
+    "IncludeScopes": false,
+    "LogLevel": {
+      "Default": "Debug",
+      "System": "Debug",
+      "Microsoft": "Debug"
+    }
+  }
+}
diff --git a/src/Server/Coderr.Server.WebSite/appsettings.Publish.json b/src/Server/App/Coderr.Server.WebSite/appsettings.Publish.json
similarity index 81%
rename from src/Server/Coderr.Server.WebSite/appsettings.Publish.json
rename to src/Server/App/Coderr.Server.WebSite/appsettings.Publish.json
index a1fe5cce..54b8a094 100644
--- a/src/Server/Coderr.Server.WebSite/appsettings.Publish.json
+++ b/src/Server/App/Coderr.Server.WebSite/appsettings.Publish.json
@@ -1,8 +1,13 @@
 ﻿{
+  "Installation": {
+    "IsConfigured": false,
+    "Password": "changeThis"
+  },
   "EnableCors": true,
   "ConnectionStrings": {
     "Db": "Data Source=.;Initial Catalog=Coderr;Integrated Security=True;Connect Timeout=15;"
   },
+ 
   "Logging": {
     "IncludeScopes": false,
     "Debug": {
diff --git a/src/Server/Coderr.Server.WebSite/appsettings.Test.json b/src/Server/App/Coderr.Server.WebSite/appsettings.Test.json
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/appsettings.Test.json
rename to src/Server/App/Coderr.Server.WebSite/appsettings.Test.json
diff --git a/src/Server/Coderr.Server.WebSite/appsettings.json b/src/Server/App/Coderr.Server.WebSite/appsettings.json
similarity index 72%
rename from src/Server/Coderr.Server.WebSite/appsettings.json
rename to src/Server/App/Coderr.Server.WebSite/appsettings.json
index e55578c9..043766b0 100644
--- a/src/Server/Coderr.Server.WebSite/appsettings.json
+++ b/src/Server/App/Coderr.Server.WebSite/appsettings.json
@@ -2,11 +2,11 @@
   "General": {
     "IsDemo": true,
     "UsePostmark": true,
-    "InstallationPassword":  "GoForIt" 
+    "InstallationPassword": "GoForIt"
   },
   "EnableCors": true,
   "ConnectionStrings": {
-    "Db": "Data Source=.;Initial Catalog=CoderrPremise;Integrated Security=True;Connect Timeout=15;"
+    "Db": "Data Source=.;Initial Catalog=Coderr;Integrated Security=True;Connect Timeout=15;"
   },
   //"Queues": {
   //  "Type": "Disk",
diff --git a/src/Server/Coderr.Server.WebSite/compilenpm.cmd b/src/Server/App/Coderr.Server.WebSite/compilenpm.cmd
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/compilenpm.cmd
rename to src/Server/App/Coderr.Server.WebSite/compilenpm.cmd
diff --git a/src/Server/Coderr.Server.WebSite/log4net.config b/src/Server/App/Coderr.Server.WebSite/log4net.config
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/log4net.config
rename to src/Server/App/Coderr.Server.WebSite/log4net.config
diff --git a/src/Server/Coderr.Server.WebSite/log4net.prod.config b/src/Server/App/Coderr.Server.WebSite/log4net.prod.config
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/log4net.prod.config
rename to src/Server/App/Coderr.Server.WebSite/log4net.prod.config
diff --git a/src/Server/Coderr.Server.WebSite/log4net.production.config b/src/Server/App/Coderr.Server.WebSite/log4net.production.config
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/log4net.production.config
rename to src/Server/App/Coderr.Server.WebSite/log4net.production.config
diff --git a/src/Server/Coderr.Server.WebSite/log4net.test.config b/src/Server/App/Coderr.Server.WebSite/log4net.test.config
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/log4net.test.config
rename to src/Server/App/Coderr.Server.WebSite/log4net.test.config
diff --git a/src/Server/Coderr.Server.WebSite/publish_clean.cmd b/src/Server/App/Coderr.Server.WebSite/publish_clean.cmd
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/publish_clean.cmd
rename to src/Server/App/Coderr.Server.WebSite/publish_clean.cmd
diff --git a/src/Server/App/Coderr.Server.WebSite/publish_upgrade.cmd b/src/Server/App/Coderr.Server.WebSite/publish_upgrade.cmd
new file mode 100644
index 00000000..7648bc79
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/publish_upgrade.cmd
@@ -0,0 +1,5 @@
+@echo off
+call publish_clean.cmd
+del /q bin\Release\netcoreapp3.1\publish\log4net*.config
+del /q bin\Release\netcoreapp3.1\publish\appsettings*.json
+del /q bin\Release\netcoreapp3.1\publish\web.config
diff --git a/src/Server/App/Coderr.Server.WebSite/tempkey.rsa b/src/Server/App/Coderr.Server.WebSite/tempkey.rsa
new file mode 100644
index 00000000..1f1c0b8c
--- /dev/null
+++ b/src/Server/App/Coderr.Server.WebSite/tempkey.rsa
@@ -0,0 +1 @@
+{"KeyId":"CmJuyj9FJYraQaqfEhoiwA","Parameters":{"D":"JYEVOqlYeTL/+/B3dCg9WMTGv8s/lWgKBIMW69J0o85fOhv6TlBZGOz/r+CFrxKuDTL4+I0iQzPCpqk+z0y+7k/ky9bYlWkB8hytMRavPSjgDpvclh/CcAC68uOtLPLPMqFrg3sI6uN/1NdU+c+k4TbJmTzf3JJoi2hJU5eywuErp9UM7zJHmtFT4iC6/VWu4dAuFX8DnHFN4NTgX6YHt3oneDVGX5GIDmsS8kdNncjqXjTpdW+gJS/hM9ATts52hfMwZZ6xRt9Ar+tvRWVDLxE7jskKzdOymIw7eZ6VixnluUG+dogXxdEyzCmiwQfDXFaTw8p1JFTjTqCytkbpPQ==","DP":"OR+IzyN0SzPU5HaTj632BY5UrCwISxXp/O9YtS/x/xlXjwktYf9ZTA/TmSVsluHLi2r/DZdQmODmIxapHgTDL0qSW2Xd3Ns4+5ftebKPRP6uhXnKH9hNnGA3Ph+S291DxVKZShm7cz9bXIvJyOhXgB7Vz+42KNv+DW+SJfs2hlU=","DQ":"lIvhdRV0YvqpbXGGw45oT6ykUyDgPKiGLrk8NyDPb4wippFqXSI7FTPKTIpth1tn45ujFf8/SFkwOAOiSkA+xj3nKXgO8/lVOy0N1DlP/c8iHTzHva1V+T1p0MZNBKOFTVgx5wKmFQyDBE8btZBzrIFUFsNaxNABSrGHmCO5mQE=","Exponent":"AQAB","InverseQ":"VA3vKdzFeRqmMOOZmJ0cZVQVwt/fIBXyCrfqr40xC6lC1Nly/R3zo6jgK7gz8rqIBLRYMnR+Q4DQfReUIc+9hIEdV9TNtnTCcR8MlokZVQc6umJ3tuFc3D3zip56e2THBgAESMPXReE6KWbdB6lTYpT705Ug9JoXWOcw7PHhbxs=","Modulus":"3xocqxUx8tXyFGmS8N2fCHAVTFU32nDHMuQgOjeL9h/nqLQ8ARWG33KMas0f2SgQK4Xq77ajFXK3fNlYShGSiF9vpY3S+RbTqrw/nfARMQ452QG5XBh1Sz6lNHXEBF5Afg0EFl3W6mBPYockHQOSP8zxwaS0cbotEzx0vSvnDp8mZsu7rf22TWWDedL2XLXX/8yTYMxtiJ2nRUhnLw0iVkMhMyvpMVnJh72YvJzvbNRyROvcv0WUtdXOjd2S4NwTkvwJgmUfRHsDZ/TNu5TAXPWk6V0Vhaf0Q8RGkabxOHU59Eccp8ZQjEZHAXC05OhX7+QGC7Pe6rvewcSgu+2DnQ==","P":"/pF+ZI1pXSJdYYJ0dooKBL23AAwN6TMGEp1lSckvk5KEGPDcyXTdNXYxhl8lkk1nHEefx5HzZmtI8E/e79fpydt44TElnRKWu0E6e9/8grtwfgnPonUlOtXmseNCYkCKwDlaJmtmD9rujj4DNxSnH55XOgnI58VZ9DDfwLqNK3s=","Q":"4FtQztxf3GhJHBmbHxYolCKqqlHcTdVZn7agAIx/uAtvTtgTiADl5XfhClElG5265ZcSaq4wwLXzQ4PuVeonToRr18hzbAl+bABuQt+93vTcZD3DjefzY8u5GTRILrqVbs4npC4kYzmIyJo982w7QyUBpwd3XSMmq7i+vEp89cc="}}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/favicon-16x16.png b/src/Server/App/Coderr.Server.WebSite/wwwroot/favicon-16x16.png
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/favicon-16x16.png
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/favicon-16x16.png
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/favicon-32x32.png b/src/Server/App/Coderr.Server.WebSite/wwwroot/favicon-32x32.png
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/favicon-32x32.png
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/favicon-32x32.png
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/favicon-96x96.png b/src/Server/App/Coderr.Server.WebSite/wwwroot/favicon-96x96.png
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/favicon-96x96.png
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/favicon-96x96.png
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/favicon.ico b/src/Server/App/Coderr.Server.WebSite/wwwroot/favicon.ico
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/favicon.ico
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/favicon.ico
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/images/Spinner-1s-200px.svg b/src/Server/App/Coderr.Server.WebSite/wwwroot/images/Spinner-1s-200px.svg
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/images/Spinner-1s-200px.svg
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/images/Spinner-1s-200px.svg
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/images/navico.png b/src/Server/App/Coderr.Server.WebSite/wwwroot/images/navico.png
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/images/navico.png
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/images/navico.png
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/service-worker.js b/src/Server/App/Coderr.Server.WebSite/wwwroot/service-worker.js
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/service-worker.js
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/service-worker.js
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/styles.0833d9396d7aae04dcd9.css b/src/Server/App/Coderr.Server.WebSite/wwwroot/styles.0833d9396d7aae04dcd9.css
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/styles.0833d9396d7aae04dcd9.css
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/styles.0833d9396d7aae04dcd9.css
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/styles.css b/src/Server/App/Coderr.Server.WebSite/wwwroot/styles.css
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/styles.css
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/styles.css
diff --git a/src/Server/Coderr.Server.WebSite/wwwroot/styles.css.map b/src/Server/App/Coderr.Server.WebSite/wwwroot/styles.css.map
similarity index 100%
rename from src/Server/Coderr.Server.WebSite/wwwroot/styles.css.map
rename to src/Server/App/Coderr.Server.WebSite/wwwroot/styles.css.map
diff --git a/src/Server/Coderr.Server.PluginApi/Incidents/QuickFactContext.cs b/src/Server/Coderr.Server.PluginApi/Incidents/QuickFactContext.cs
deleted file mode 100644
index 93790786..00000000
--- a/src/Server/Coderr.Server.PluginApi/Incidents/QuickFactContext.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using codeRR.Server.Api.Core.Incidents.Queries;
-
-namespace Coderr.Server.PluginApi.Incidents
-{
-    public class QuickFactContext
-    {
-        public QuickFactContext(int applicationId, int incidentId, ICollection<QuickFact> facts)
-        {
-            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
-            if (incidentId <= 0) throw new ArgumentOutOfRangeException(nameof(incidentId));
-            ApplicationId = applicationId;
-            IncidentId = incidentId;
-            CollectedFacts = facts;
-        }
-        public int IncidentId { get; private set; }
-        public int ApplicationId { get; private set; }
-        public ICollection<QuickFact> CollectedFacts { get; private set; }
-    }
-}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.SqlServer/Coderr - Backup.Server.SqlServer.csproj b/src/Server/Coderr.Server.SqlServer/Coderr - Backup.Server.SqlServer.csproj
deleted file mode 100644
index cb229780..00000000
--- a/src/Server/Coderr.Server.SqlServer/Coderr - Backup.Server.SqlServer.csproj	
+++ /dev/null
@@ -1,43 +0,0 @@
-﻿<Project Sdk="Microsoft.NET.Sdk">
-  <PropertyGroup>
-    <TargetFramework>netstandard2.0</TargetFramework>
-    <RootNamespace>Coderr.Server.SqlServer</RootNamespace>
-    <AssemblyName>Coderr.Server.SqlServer</AssemblyName>
-    <Configurations>Debug;Release;Premise</Configurations>
-  </PropertyGroup>
-  <ItemGroup>
-    <PackageReference Include="DnsClient" Version="1.6.0" />
-    <PackageReference Include="DotNetCqs" Version="2.1.1" />
-    <PackageReference Include="Griffin.Framework" Version="2.1.1" />
-    <PackageReference Include="log4net" Version="2.0.14" />
-    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
-    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Api\Coderr.Server.Api.csproj" />
-    <ProjectReference Include="..\Coderr.Server.App\Coderr.Server.App.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <EmbeddedResource Include="Schema\*.sql" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <None Remove="Schema\Coderr.v31.sql" />
-    <None Remove="Schema\Coderr.v32.sql" />
-    <None Remove="Schema\Coderr.v33.sql" />
-    <None Remove="Schema\Coderr.v34.sql" />
-    <None Remove="Schema\Coderr.v35.sql" />
-    <None Remove="Schema\Coderr.v36.sql" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Folder Include="Modules\Mine\Incidents\" />
-  </ItemGroup>
-</Project>
diff --git a/src/Server/Coderr.Server.SqlServer/Coderr.Server.SqlServer.csproj b/src/Server/Coderr.Server.SqlServer/Coderr.Server.SqlServer.csproj
deleted file mode 100644
index b0823a49..00000000
--- a/src/Server/Coderr.Server.SqlServer/Coderr.Server.SqlServer.csproj
+++ /dev/null
@@ -1,39 +0,0 @@
-﻿<Project Sdk="Microsoft.NET.Sdk">
-  <PropertyGroup>
-    <TargetFramework>netstandard2.0</TargetFramework>
-    <RootNamespace>Coderr.Server.SqlServer</RootNamespace>
-    <AssemblyName>Coderr.Server.SqlServer</AssemblyName>
-    <Configurations>Debug;Release;Premise</Configurations>
-  </PropertyGroup>
-  <ItemGroup>
-    <PackageReference Include="DnsClient" Version="1.6.0" />
-    <PackageReference Include="DotNetCqs" Version="2.1.1" />
-    <PackageReference Include="Griffin.Framework" Version="2.1.1" />
-    <PackageReference Include="log4net" Version="2.0.14" />
-    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
-    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Api\Coderr.Server.Api.csproj" />
-    <ProjectReference Include="..\Coderr.Server.App\Coderr.Server.App.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <EmbeddedResource Include="Schema\*.sql" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <None Remove="Schema\Coderr.v31.sql" />
-    <None Remove="Schema\Coderr.v32.sql" />
-    <None Remove="Schema\Coderr.v33.sql" />
-    <None Remove="Schema\Coderr.v34.sql" />
-    <None Remove="Schema\Coderr.v35.sql" />
-    <None Remove="Schema\Coderr.v36.sql" />
-  </ItemGroup>
-</Project>
diff --git a/src/Server/Coderr.Server.Web.Tests/App.config b/src/Server/Coderr.Server.Web.Tests/App.config
deleted file mode 100644
index 4022e283..00000000
--- a/src/Server/Coderr.Server.Web.Tests/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿<?xml version="1.0" encoding="utf-8" ?>
-<configuration>
-  <connectionStrings>
-    <add name="Db" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog={databaseName};Integrated Security=True" providerName="System.Data.SqlClient" />
-  </connectionStrings>
-</configuration>
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Web.Tests/Coderr.Server.Web.Tests.csproj b/src/Server/Coderr.Server.Web.Tests/Coderr.Server.Web.Tests.csproj
deleted file mode 100644
index 295f5ce8..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Coderr.Server.Web.Tests.csproj
+++ /dev/null
@@ -1,55 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net452</TargetFramework>
-    <AssemblyName>codeRR.Server.Web.Tests</AssemblyName>
-    <RootNamespace>codeRR.Server.Web.Tests</RootNamespace>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Coderr.Client" Version="1.0.18" />
-    <PackageReference Include="Selenium.Support" Version="3.10.0" />
-    <PackageReference Include="Selenium.WebDriver" Version="3.10.0" />
-    <PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="2.36.0" />
-    <PackageReference Include="xunit" Version="2.3.1" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.App\codeRR.Server.App.csproj" />
-    <ProjectReference Include="..\Coderr.Server.SqlServer.Tests\codeRR.Server.SqlServer.Tests.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Reference Include="System.Web" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <None Update="applicationhost.config">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>applicationhost.tt</DependentUpon>
-      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
-    </None>
-    <None Update="applicationhost.tt">
-      <Generator>TextTemplatingFileGenerator</Generator>
-      <LastGenOutput>applicationhost.config</LastGenOutput>
-    </None>
-  </ItemGroup>
-
-  <ItemGroup>
-    <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
-  </ItemGroup>
-
-  <PropertyGroup>
-    <TransformOnBuild>True</TransformOnBuild>
-    <TransformOutOfDateOnly>True</TransformOutOfDateOnly>
-  </PropertyGroup>
-  <!-- Since the default targets file (Sdk.targets in the .NET Core SDK) is now imported implicitly at the very end of the project, 
-       so you can't import the text templating targets after the default targets. This causes the BuildDependsOn variable, which is modified by the T4 targets, 
-       to be overwritten, so the TransformAll target doesn’t run before the Build target. 
-       Note that it will cause a MSBuild warning in the build output (MSB4011) because Sdk.targets is imported twice; you can safely ignore this warning. -->
-  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
-  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TextTemplating\Microsoft.TextTemplating.targets" />
-
-</Project>
diff --git a/src/Server/Coderr.Server.Web.Tests/Helpers/Extensions/WebDriverExtensions.cs b/src/Server/Coderr.Server.Web.Tests/Helpers/Extensions/WebDriverExtensions.cs
deleted file mode 100644
index 8bc6221a..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Helpers/Extensions/WebDriverExtensions.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-﻿using System;
-using OpenQA.Selenium;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Helpers.Extensions
-{
-    public static class WebDriverExtensions
-    {
-        public static bool WaitUntilElementIsPresent(this IWebDriver driver, By by, int timeout = 5)
-        {
-            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
-            return wait.Until(d => d.ElementIsPresent(by));
-        }
-
-        public static bool WaitUntilElementIsPresent(this IWebDriver driver, IWebElement element, int timeout = 5)
-        {
-            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
-            return wait.Until(d => d.ElementIsPresent(element));
-        }
-
-        public static string WaitUntilTitleEquals(this IWebDriver driver, string title, int timeout = 5)
-        {
-            try
-            {
-                var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
-                wait.Until(ExpectedConditions.TitleIs(title));
-            }
-            catch
-            {
-                // ignored
-            }
-
-            return driver.Title;
-        }
-
-        private static bool ElementIsPresent(this IWebDriver driver, By by)
-        {
-            var present = false;
-            try
-            {
-                present = driver.FindElement(by).Displayed;
-            }
-            catch (NoSuchElementException)
-            {
-            }
-            return present;
-        }
-
-        private static bool ElementIsPresent(this IWebDriver driver, IWebElement element)
-        {
-            var present = false;
-            try
-            {
-                present = element.Displayed;
-            }
-            catch (NoSuchElementException)
-            {
-            }
-            return present;
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Helpers/IisExpressHelper.cs b/src/Server/Coderr.Server.Web.Tests/Helpers/IisExpressHelper.cs
deleted file mode 100644
index 1638e1f1..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Helpers/IisExpressHelper.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Threading;
-
-namespace codeRR.Server.Web.Tests.Helpers
-{
-    public class IisExpressHelper
-    {
-        private Process _process;
-
-        /// <summary>
-        ///     The application pool that IIS Express should use. Defaults to <c>"Clr4IntegratedAppPool"</c>.
-        /// </summary>
-        public string AppPool { get; set; }
-
-        public string BaseUrl => "http://localhost:50473/coderr/";
-
-        /// <summary>
-        ///     Path to the IIS Express configuration file. Defaults to
-        ///     <c>USER\DOCUMENTS\IISExpress\config\applicationhost.config</c>.
-        /// </summary>
-        public string ConfigPath { get; set; }
-
-        public Dictionary<string, string> EnvironmentVariables { get; set; }
-
-        /// <summary>
-        ///     The path to the <c>iisexpress.exe</c> executable. Defaults to the default installation path
-        ///     (e.g. <c>C:\Program Files (x86)\IIS Express\iisexpress.exe</c>), if not explicitly set.
-        /// </summary>
-        public string ExePath { get; set; }
-
-        /// <summary>
-        ///     Gets a value indicating whether the associated IIS Express instance is currently running.
-        /// </summary>
-        public bool IsRunning => _process != null;
-
-        /// <summary>
-        ///     Starts IIS Express with the specified website.
-        /// </summary>
-        /// <param name="site">The website that IIS Express should host.</param>
-        /// <exception cref="ArgumentNullException">
-        ///     Argument <paramref name="site" /> is null.
-        /// </exception>
-        /// <exception cref="InvalidOperationException">
-        ///     There already is an associated IIS Express instance running (i.e. <see cref="IsRunning" /> is true).
-        /// </exception>
-        /// <exception cref="FileNotFoundException">
-        ///     Either <see cref="ExePath" /> or <see cref="ConfigPath" /> could not be found.
-        /// </exception>
-        public void Start(string site)
-        {
-            if (site == null)
-                throw new ArgumentNullException("site");
-
-            if (_process != null)
-                throw new InvalidOperationException("IIS Express is already running.");
-
-            SetDefaultsWhereNecessary();
-
-            if (!File.Exists(ExePath))
-                throw new FileNotFoundException($"Path to IIS Express executable is invalid: '{ExePath}'.");
-
-            if (string.IsNullOrEmpty(ConfigPath) || !File.Exists(ConfigPath))
-                throw new FileNotFoundException($"Path to IIS Express configuration file is invalid: '{ConfigPath}'.");
-
-            var iisExpressThread = new Thread(() => StartIisExpress(p => _process = p, site)) {IsBackground = true};
-            iisExpressThread.Start();
-            //StartIisExpress(p => _process = p, site);
-
-            var attemptsLeft = 50;
-            while (attemptsLeft > 0 && _process == null)
-            {
-                Thread.Sleep(200);
-                attemptsLeft--;
-            }
-
-            if (_process == null)
-                throw new InvalidOperationException("Failed to start IIS express");
-        }
-
-        /// <summary>
-        ///     Stops the IIS Express instance that was formerly started via the <see cref="Start" /> method.
-        /// </summary>
-        public void Stop()
-        {
-            if (_process != null)
-            {
-                _process.Kill();
-                _process.WaitForExit();
-                _process.Dispose();
-                _process = null;
-            }
-        }
-
-        private void SetDefaultsWhereNecessary()
-        {
-            if (string.IsNullOrEmpty(ExePath))
-                ExePath = Path.Combine(
-                    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),
-                    @"IIS Express\iisexpress.exe");
-
-            if (string.IsNullOrEmpty(ConfigPath))
-                ConfigPath = Path.Combine(
-                    Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
-                    @"IISExpress\config\applicationhost.config");
-
-            if (string.IsNullOrEmpty(AppPool))
-                AppPool = "Clr4IntegratedAppPool";
-        }
-
-        private void StartIisExpress(Action<Process> action, string site)
-        {
-            var isRunning = false;
-
-            var process = new Process
-            {
-                StartInfo = new ProcessStartInfo
-                {
-                    FileName = ExePath,
-                    Arguments = $"/config:\"{Path.GetFullPath(ConfigPath)}\" /site:\"{site}\" /apppool:\"{AppPool}\"",
-                    RedirectStandardOutput = true,
-                    RedirectStandardInput = true,
-                    UseShellExecute = false,
-                    CreateNoWindow = true
-                }
-            };
-
-            if (EnvironmentVariables != null)
-            {
-                foreach (var environmentVariable in EnvironmentVariables)
-                {
-                    Console.WriteLine($"Setting environment variable '{environmentVariable.Key}' to '{environmentVariable.Value}'");
-
-                    process.StartInfo.EnvironmentVariables[environmentVariable.Key] = environmentVariable.Value;
-                }
-            }
-
-            process.OutputDataReceived += (sender, args) =>
-            {
-                Console.WriteLine(args.Data);
-
-                if (string.IsNullOrEmpty(args.Data))
-                    return;
-
-                if (args.Data.Contains("IIS Express is running"))
-                    isRunning = true;
-            };
-
-            process.Start();
-            process.BeginOutputReadLine();
-            
-            var attemptsLeft = 50;
-            while (attemptsLeft > 0 && !isRunning)
-            {
-                Thread.Sleep(200);
-                attemptsLeft--;
-            }
-            if (!isRunning)
-                throw new InvalidOperationException("Failed to receive data from IIS ex");
-           
-            action(process);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/BrowserAttribute.cs b/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/BrowserAttribute.cs
deleted file mode 100644
index a74fa8e9..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/BrowserAttribute.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-﻿using System.Collections.Generic;
-using System.Reflection;
-using OpenQA.Selenium;
-using Xunit.Sdk;
-
-namespace codeRR.Server.Web.Tests.Helpers.Selenium
-{
-    public class BrowserAttribute : DataAttribute
-    {
-        private readonly IWebDriver _driver;
-
-        public BrowserAttribute(BrowserType browserType)
-        {
-            _driver = DriverFactory.Create(browserType);
-        }
-
-        public override IEnumerable<object[]> GetData(MethodInfo testMethod)
-        {
-            return new[] {new[] {_driver}};
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/BrowserType.cs b/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/BrowserType.cs
deleted file mode 100644
index db85d513..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/BrowserType.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿namespace codeRR.Server.Web.Tests.Helpers.Selenium
-{
-    public enum BrowserType
-    {
-        InternetExplorer,
-        Chrome,
-        Firefox
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/DriverFactory.cs b/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/DriverFactory.cs
deleted file mode 100644
index 569f5bc9..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Helpers/Selenium/DriverFactory.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-﻿using System;
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-using OpenQA.Selenium.IE;
-
-namespace codeRR.Server.Web.Tests.Helpers.Selenium
-{
-    public static class DriverFactory
-    {
-        public static IWebDriver Create(BrowserType browserType)
-        {
-            IWebDriver driver;
-
-            switch (browserType)
-            {
-                case BrowserType.Chrome:
-                    driver = new ChromeDriver();
-                    break;
-
-                case BrowserType.InternetExplorer:
-                    driver = new InternetExplorerDriver();
-                    break;
-
-                default:
-                    throw new ArgumentOutOfRangeException();
-            }
-
-            driver.Manage().Window.Maximize();
-
-            return driver;
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Helpers/xUnit/TestCaseOrderer.cs b/src/Server/Coderr.Server.Web.Tests/Helpers/xUnit/TestCaseOrderer.cs
deleted file mode 100644
index 6bbfa363..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Helpers/xUnit/TestCaseOrderer.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using Xunit.Abstractions;
-using Xunit.Sdk;
-
-namespace codeRR.Server.Web.Tests.Helpers.xUnit
-{
-    public class TestCaseOrderer : ITestCaseOrderer
-    {
-        public IEnumerable<TTestCase> OrderTestCases<TTestCase>(IEnumerable<TTestCase> testCases)
-            where TTestCase : ITestCase
-        {
-            var sortedMethods = new SortedDictionary<int, List<TTestCase>>();
-
-            foreach (var testCase in testCases)
-            {
-                var priority = 1;
-
-                foreach (var attr in testCase.TestMethod.Method.GetCustomAttributes(typeof(TestPriorityAttribute)
-                    .AssemblyQualifiedName))
-                    priority = attr.GetNamedArgument<int>("Priority");
-
-                GetOrCreate(sortedMethods, priority).Add(testCase);
-            }
-
-            foreach (var list in sortedMethods.Keys.Select(priority => sortedMethods[priority]))
-            {
-                list.Sort((x, y) => StringComparer.OrdinalIgnoreCase.Compare(x.TestMethod.Method.Name,
-                    y.TestMethod.Method.Name));
-
-                foreach (var testCase in list)
-                    yield return testCase;
-            }
-        }
-
-        private static TValue GetOrCreate<TKey, TValue>(IDictionary<TKey, TValue> dictionary, TKey key)
-            where TValue : new()
-        {
-            if (dictionary.TryGetValue(key, out var result))
-                return result;
-
-            result = new TValue();
-            dictionary[key] = result;
-
-            return result;
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Helpers/xUnit/TestPriorityAttribute.cs b/src/Server/Coderr.Server.Web.Tests/Helpers/xUnit/TestPriorityAttribute.cs
deleted file mode 100644
index 2cbc87f6..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Helpers/xUnit/TestPriorityAttribute.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-﻿using System;
-
-namespace codeRR.Server.Web.Tests.Helpers.xUnit
-{
-    public class TestPriorityAttribute : Attribute
-    {
-        public int Priority { get; set; }
-
-        public TestPriorityAttribute(int priority)
-        {
-            Priority = priority;
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/Account/ActivationRequestedPage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/Account/ActivationRequestedPage.cs
deleted file mode 100644
index b3405055..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/Account/ActivationRequestedPage.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-﻿using OpenQA.Selenium;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Pages.Account
-{
-    public class ActivationRequestedPage : BasePage
-    {
-        public ActivationRequestedPage(IWebDriver webDriver) : base(webDriver, "Account/ActivationRequested", "Account registered - codeRR")
-        {
-        }
-
-        public void VerifyIsCurrentPage()
-        {
-            Wait.Until(ExpectedConditions.TitleIs(Title));
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/Account/LoginPage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/Account/LoginPage.cs
deleted file mode 100644
index b7ce807b..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/Account/LoginPage.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-﻿using OpenQA.Selenium;
-using OpenQA.Selenium.Support.PageObjects;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Pages.Account
-{
-    public class LoginPage : BasePage
-    {
-        public LoginPage(IWebDriver webDriver) : base(webDriver, "Account/Login", "Login - codeRR")
-        {
-        }
-
-        [FindsBy(How = How.Id, Using = "login-button")]
-        public IWebElement SignInButton { get; set; }
-
-        [FindsBy(How = How.Id, Using = "Username")]
-        public IWebElement UserNameField { get; set; }
-
-        [FindsBy(How = How.Id, Using = "Password")]
-        public IWebElement PasswordField { get; set; }
-
-        public IPage LoginWithValidCredentials(string userName, string password)
-        {
-            NavigateToPage();
-
-            UserNameField.Clear();
-            UserNameField.SendKeys(userName);
-
-            PasswordField.Clear();
-            PasswordField.SendKeys(password);
-
-            SignInButton.Click();
-
-            return PageHelper.ResolvePage(WebDriver);
-        }
-
-        public LoginPage LoginWithNonExistingUserWithoutPasswordSpecified()
-        {
-            NavigateToPage();
-
-            UserNameField.Clear();
-            UserNameField.SendKeys("NonExistingUsername");
-
-            PasswordField.Clear();
-
-            SignInButton.Click();
-
-            return this;
-        }
-
-        public LoginPage LoginWithNonExistingUserWithPasswordSpecified()
-        {
-            NavigateToPage();
-
-            UserNameField.Clear();
-            UserNameField.SendKeys("NonExistingUsername");
-
-            PasswordField.Clear();
-            PasswordField.SendKeys(TestUser.Password);
-
-            SignInButton.Click();
-
-            return this;
-        }
-
-        public LoginPage LoginWithNoUserNameSpecified()
-        {
-            NavigateToPage();
-
-            UserNameField.Clear();
-
-            PasswordField.Clear();
-            PasswordField.SendKeys(TestUser.Password);
-
-            SignInButton.Click();
-
-            return this;
-        }
-
-        public LoginPage LoginWithNoUserNameAndNoPasswordSpecified()
-        {
-            NavigateToPage();
-
-            UserNameField.Clear();
-
-            PasswordField.Clear();
-
-            SignInButton.Click();
-
-            return this;
-        }
-
-        public LoginPage LoginWithNoPasswordSpecified()
-        {
-            NavigateToPage();
-
-            UserNameField.Clear();
-            UserNameField.SendKeys(TestUser.Username);
-
-            PasswordField.Clear();
-
-            SignInButton.Click();
-
-            return this;
-        }
-
-        public LoginPage LoginWithWrongPasswordSpecified()
-        {
-            NavigateToPage();
-
-            UserNameField.Clear();
-            UserNameField.SendKeys(TestUser.Username);
-
-            PasswordField.Clear();
-            PasswordField.SendKeys(TestUser.Password.Substring(1));
-
-            SignInButton.Click();
-
-            return this;
-        }
-
-        public void VerifyIsCurrentPage()
-        {
-            Wait.Until(ExpectedConditions.TitleIs(Title));
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/Account/LogoutPage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/Account/LogoutPage.cs
deleted file mode 100644
index 732e0066..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/Account/LogoutPage.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-﻿using OpenQA.Selenium;
-
-namespace codeRR.Server.Web.Tests.Pages.Account
-{
-    public class LogoutPage : BasePage
-    {
-        public LogoutPage(IWebDriver webDriver) : base(webDriver, "Account/Logout", "")
-        {
-        }
-
-        public LoginPage Logout()
-        {
-            NavigateToPage(false);
-
-            return new LoginPage(WebDriver);
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/Account/RegisterPage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/Account/RegisterPage.cs
deleted file mode 100644
index a1ba49ad..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/Account/RegisterPage.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-﻿using codeRR.Server.Web.Tests.Helpers.Extensions;
-using OpenQA.Selenium;
-using OpenQA.Selenium.Support.PageObjects;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Pages.Account
-{
-    public class RegisterPage : BasePage
-    {
-        public RegisterPage(IWebDriver webDriver) : base(webDriver, "Account/Register", "Register account - codeRR")
-        {
-        }
-
-        [FindsBy(How = How.Id, Using = "UserName")]
-        public IWebElement UserNameField { get; set; }
-
-        [FindsBy(How = How.Id, Using = "Password")]
-        public IWebElement PasswordField { get; set; }
-
-        [FindsBy(How = How.Id, Using = "Password2")]
-        public IWebElement RetypePasswordField { get; set; }
-
-        [FindsBy(How = How.Id, Using = "Email")]
-        public IWebElement EmailField { get; set; }
-
-        [FindsBy(How = How.ClassName, Using = "btn-primary")]
-        public IWebElement SignUpButton { get; set; }
-
-        [FindsBy(How = How.ClassName, Using = "field-validation-error")]
-        public IWebElement ValidationErrorField { get; set; }
-
-        public void VerifyIsCurrentPage()
-        {
-            Wait.Until(ExpectedConditions.TitleIs(Title));
-        }
-
-        public RegisterPage RegisterUsingAlreadyTakenUsername()
-        {
-            NavigateToPage();
-
-            ClearForm();
-
-            UserNameField.SendKeys(TestUser.Username);
-            PasswordField.SendKeys(TestUser.Password);
-            RetypePasswordField.SendKeys(TestUser.Password);
-            EmailField.SendKeys(TestUser.Email);
-
-            SignUpButton.Click();
-
-            return this;
-        }
-
-        public RegisterPage RegisterUsingAlreadyTakenEmail()
-        {
-            NavigateToPage();
-
-            ClearForm();
-
-            UserNameField.SendKeys(TestUser.Username + "2");
-            PasswordField.SendKeys(TestUser.Password);
-            RetypePasswordField.SendKeys(TestUser.Password);
-            EmailField.SendKeys(TestUser.Email);
-
-            SignUpButton.Click();
-
-            return this;
-        }
-
-        public ActivationRequestedPage RegisterNewUser()
-        {
-            NavigateToPage();
-
-            ClearForm();
-
-            UserNameField.SendKeys(TestUser.Username + "2");
-            PasswordField.SendKeys(TestUser.Password);
-            RetypePasswordField.SendKeys(TestUser.Password);
-            EmailField.SendKeys("TestUser2@coderrapp.com");
-
-            SignUpButton.Click();
-
-            return new ActivationRequestedPage(WebDriver);
-        }
-
-        public RegisterPage VerifyUsernameIsAlreadyTaken()
-        {
-            WebDriver.WaitUntilElementIsPresent(ValidationErrorField);
-            return this;
-        }
-
-        public RegisterPage VerifyEmailIsAlreadyTaken()
-        {
-            WebDriver.WaitUntilElementIsPresent(ValidationErrorField);
-            return this;
-        }
-
-        private void ClearForm()
-        {
-            UserNameField.Clear();
-            PasswordField.Clear();
-            RetypePasswordField.Clear();
-            EmailField.Clear();
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/ApplicationPage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/ApplicationPage.cs
deleted file mode 100644
index ca6ea3e5..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/ApplicationPage.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-﻿using OpenQA.Selenium;
-using OpenQA.Selenium.Support.PageObjects;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Pages
-{
-    public class ApplicationPage : BasePage
-    {
-        public ApplicationPage(IWebDriver webDriver, int id) : base(webDriver, "#/application/{id}", "")
-        {
-            Url = Url.Replace("{id}", id.ToString());
-        }
-
-        [FindsBy(How = How.Id, Using = "pageTitle")]
-        public IWebElement PageTitle { get; set; }
-
-        public void VerifyIsCurrentPage()
-        {
-            Wait.Until(ExpectedConditions.TitleIs(Title));
-        }
-
-        public void VerifyIncidentReported()
-        {
-            var by = By.PartialLinkText("Value cannot be null");
-            //var element = WebDriver.FindElement(by);
-            Wait.Until(ExpectedConditions.ElementExists(by));
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/BasePage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/BasePage.cs
deleted file mode 100644
index 27d7f3be..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/BasePage.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-﻿using System;
-using codeRR.Server.SqlServer.Tests.Models;
-using OpenQA.Selenium;
-using OpenQA.Selenium.Support.PageObjects;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Pages
-{
-    public class BasePage : IPage
-    {
-        protected IWebDriver WebDriver;
-        protected WebDriverWait Wait;
-        protected string BaseUrl { get; }
-        public string Url { get; set; }
-        public string Title { get; }
-
-        protected readonly TestUser TestUser = WebTest.TestUser;
-
-        public BasePage(IWebDriver webDriver, string url, string title)
-        {
-            WebDriver = webDriver;
-            Title = title;
-
-            Wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(5));
-
-            BaseUrl = "http://localhost:50473/coderr/";
-
-            Url = new Uri(new Uri(BaseUrl), url).ToString();
-
-            PageFactory.InitElements(WebDriver, this);
-        }
-
-        public void NavigateToPage(bool wait = true)
-        {
-            WebDriver.Navigate().GoToUrl(Url);
-
-            if(wait)
-                Wait.Until(ExpectedConditions.UrlContains(Url));
-        }
-
-        public void WaitForTitle(string title)
-        {
-            Wait.Until(ExpectedConditions.TitleIs(title));
-        }
-
-        public void DeleteCookies()
-        {
-            WebDriver.Manage().Cookies.DeleteAllCookies();
-        }
-
-        public void Close()
-        {
-            WebDriver.Close();
-            WebDriver.Dispose();
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/ConfigureApplicationPage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/ConfigureApplicationPage.cs
deleted file mode 100644
index bf777de9..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/ConfigureApplicationPage.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-﻿using OpenQA.Selenium;
-using OpenQA.Selenium.Support.PageObjects;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Pages
-{
-    public class ConfigureApplicationPage : BasePage
-    {
-        public ConfigureApplicationPage(IWebDriver webDriver) : base(webDriver, "configure/application", "Create a new application - codeRR")
-        {
-        }
-
-        [FindsBy(How = How.ClassName, Using = "btn-primary")]
-        public IWebElement CreateButton { get; set; }
-
-        [FindsBy(How = How.Name, Using = "Name")]
-        public IWebElement ApplicationNameField { get; set; }
-
-        public ConfigureApplicationPage CreateApplication(string name)
-        {
-            NavigateToPage();
-
-            ApplicationNameField.Clear();
-            ApplicationNameField.SendKeys(name);
-
-            CreateButton.Click();
-
-            return this;
-        }
-
-        public void VerifyIsCurrentPage()
-        {
-            Wait.Until(ExpectedConditions.TitleIs(Title));
-        }
-
-        public void VerifySuccessfullyCreatedApplication(string name)
-        {
-            Wait.Until(ExpectedConditions.TitleIs(name));
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/HomePage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/HomePage.cs
deleted file mode 100644
index 0c8f3fa2..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/HomePage.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-﻿using OpenQA.Selenium;
-using OpenQA.Selenium.Support.PageObjects;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Pages
-{
-    public class HomePage : BasePage
-    {
-        public HomePage(IWebDriver webDriver) : base(webDriver, "", "Overview")
-        {
-        }
-
-        [FindsBy(How = How.XPath, Using = "//a/span[.=' MyTestApp ']")]
-        public IWebElement NavigationMyTestApp { get; set; }
-
-        [FindsBy(How = How.Id, Using = "pageTitle")]
-        public IWebElement PageTitle { get; set; }
-
-        [FindsBy(How = How.XPath, Using = "//a/span[.=' Dashboard ']")]
-        public IWebElement NavigationDashboard { get; set; }
-
-        [FindsBy(How = How.XPath, Using = "//a[.='Overview']")]
-        public IWebElement NavigationDashboardOverview { get; set; }
-
-        [FindsBy(How = How.XPath, Using = "//a[.='Incidents']")]
-        public IWebElement NavigationDashboardIncidents { get; set; }
-
-        [FindsBy(How = How.XPath, Using = "//a[.='Feedback']")]
-        public IWebElement NavigationDashboardFeedback { get; set; }
-
-        public bool HasApplicationInNavigation(string applicationName)
-        {
-            var by = By.XPath($"//a/span[.=' {applicationName} ']");
-            var element = WebDriver.FindElement(by);
-
-            return true;
-        }
-
-        public void VerifyIsCurrentPage()
-        {
-            Wait.Until(ExpectedConditions.TitleIs("Overview"));
-        }
-
-        public void VerifyNavigatedToMyTestApp()
-        {
-            Wait.Until(ExpectedConditions.TextToBePresentInElement(PageTitle, "MyTestApp"));
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/IPage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/IPage.cs
deleted file mode 100644
index e7e7ba73..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/IPage.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-﻿namespace codeRR.Server.Web.Tests.Pages
-{
-    public interface IPage
-    {
-        string Url { get; set; }
-        string Title { get; }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/IncidentsPage.cs b/src/Server/Coderr.Server.Web.Tests/Pages/IncidentsPage.cs
deleted file mode 100644
index 22a503c5..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/IncidentsPage.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-﻿using OpenQA.Selenium;
-using OpenQA.Selenium.Support.PageObjects;
-using OpenQA.Selenium.Support.UI;
-
-namespace codeRR.Server.Web.Tests.Pages
-{
-    public class IncidentsPage : BasePage
-    {
-        public IncidentsPage(IWebDriver webDriver, int id) : base(webDriver, "#/application/{id}/incidents/", "Incidents")
-        {
-            Url = Url.Replace("{id}", id.ToString());
-        }
-
-        [FindsBy(How = How.Id, Using = "pageTitle")]
-        public IWebElement PageTitle { get; set; }
-
-        public void VerifyIsCurrentPage()
-        {
-            Wait.Until(ExpectedConditions.TitleIs(Title));
-        }
-
-        public void VerifyIncidentReported()
-        {
-            var by = By.PartialLinkText("Value cannot be null");
-            //var element = WebDriver.FindElement(by);
-            Wait.Until(ExpectedConditions.ElementExists(by));
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Pages/PageHelper.cs b/src/Server/Coderr.Server.Web.Tests/Pages/PageHelper.cs
deleted file mode 100644
index 05b8b79a..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Pages/PageHelper.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-﻿using System;
-using System.Text.RegularExpressions;
-using codeRR.Server.Web.Tests.Pages.Account;
-using OpenQA.Selenium;
-
-namespace codeRR.Server.Web.Tests.Pages
-{
-    public class PageHelper
-    {
-        public static IPage ResolvePage(IWebDriver webDriver)
-        {
-            var match = Regex.Match(webDriver.Url, @"/#/$", RegexOptions.IgnoreCase);
-            if (match.Success)
-                return new HomePage(webDriver);
-            match = Regex.Match(webDriver.Url, @"/Account/Login", RegexOptions.IgnoreCase);
-            if (match.Success)
-                return new LoginPage(webDriver);
-            match = Regex.Match(webDriver.Url, @"/#/application/(\d+)", RegexOptions.IgnoreCase);
-            if(match.Success)
-                return new ApplicationPage(webDriver, Convert.ToInt16(match.Groups[1].Value));
-
-            throw new ArgumentOutOfRangeException($"Url: {webDriver.Url}, Title: {webDriver.Title}");
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/AdminUserTests.cs b/src/Server/Coderr.Server.Web.Tests/Tests/AdminUserTests.cs
deleted file mode 100644
index 972dffa9..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/AdminUserTests.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-﻿using System;
-using codeRR.Server.Web.Tests.Helpers.Extensions;
-using codeRR.Server.Web.Tests.Pages;
-using OpenQA.Selenium;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    [Trait("Category", "Integration")]
-    public class AdminUserTests : LoggedInTest, IDisposable
-    {
-        private readonly IPage _homePage;
-
-        public AdminUserTests()
-        {
-            _homePage = Login();
-        }
-
-        [Fact]
-        public void Admin_Should_have_create_new_application_menu_item()
-        {
-            UITest(() =>
-            {
-                Assert.IsType<HomePage>(_homePage);
-                Assert.Equal("Overview", WebDriver.WaitUntilTitleEquals(_homePage.Title));
-                Assert.NotNull(WebDriver.FindElement(By.XPath("//a/span[.='Create new application']")));
-            });
-        }
-        
-        public void Dispose()
-        {
-            Logout();
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/ConfigureApplicationPageTests.cs b/src/Server/Coderr.Server.Web.Tests/Tests/ConfigureApplicationPageTests.cs
deleted file mode 100644
index e9481110..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/ConfigureApplicationPageTests.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-﻿using System;
-using codeRR.Server.Web.Tests.Pages;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    [Trait("Category", "Integration")]
-    public class ConfigureApplicationPageTests : LoggedInTest, IDisposable
-    {
-        public ConfigureApplicationPageTests()
-        {
-            Login();
-        }
-
-        [Fact]
-        public void Should_not_be_able_to_create_application_without_name_specified()
-        {
-            UITest(() =>
-            {
-                var sut = new ConfigureApplicationPage(WebDriver)
-                    .CreateApplication(string.Empty);
-
-                //TODO: Verify error message
-                sut.VerifyIsCurrentPage();
-            });
-        }
-
-        [Fact]
-        public void Should_be_able_to_create_application()
-        {
-            UITest(() =>
-            {
-                var applicationName = "TestApplication";
-
-                var sut = new ConfigureApplicationPage(WebDriver)
-                    .CreateApplication(applicationName);
-
-                sut.VerifySuccessfullyCreatedApplication(applicationName);
-
-                var homePage = new HomePage(WebDriver);
-                homePage.NavigateToPage();
-                homePage.VerifyIsCurrentPage();
-
-                homePage.HasApplicationInNavigation(applicationName);
-            });
-        }
-
-        public void Dispose()
-        {
-            Logout();
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/HomePageTests.cs b/src/Server/Coderr.Server.Web.Tests/Tests/HomePageTests.cs
deleted file mode 100644
index 0a3de5f5..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/HomePageTests.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-﻿using System;
-using codeRR.Server.Web.Tests.Pages;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    [Trait("Category", "Integration")]
-    public class HomePageTests : LoggedInTest, IDisposable
-    {
-        public HomePageTests()
-        {
-            Login();
-        }
-
-        [Fact]
-        public void Should_be_able_to_navigate_to_myfirstapp_application()
-        {
-            UITest(() =>
-            {
-                var sut = new HomePage(WebDriver);
-                sut.NavigateToPage();
-
-                sut.NavigationMyTestApp.Click();
-
-                sut.VerifyNavigatedToMyTestApp();
-            });
-        }
-
-        public void Dispose()
-        {
-            Logout();
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/IncidentsPageTests.cs b/src/Server/Coderr.Server.Web.Tests/Tests/IncidentsPageTests.cs
deleted file mode 100644
index 972ffc9c..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/IncidentsPageTests.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-﻿using System;
-using System.Threading;
-using codeRR.Client;
-using codeRR.Server.Web.Tests.Pages;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    [Trait("Category", "Integration")]
-    public class IncidentsPageTests : LoggedInTest, IDisposable
-    {
-        public IncidentsPageTests()
-        {
-            Login();
-        }
-
-        [Fact]
-        public void Should_be_able_to_report_error_with_client_lib_and_error_shows_up_in_incidents()
-        {
-            UITest(() =>
-            {
-                var url = new Uri(ServerUrl);
-                Err.Configuration.Credentials(url, TestData.Application.AppKey, TestData.Application.SharedSecret);
-                Err.Report(new ArgumentNullException("id"), new { SampleData = "Context example" });
-
-                // Give the server some time to process the incident
-                Thread.Sleep(3000);
-
-                var sut = new IncidentsPage(WebDriver, 1);
-                sut.NavigateToPage();
-
-                sut.VerifyIncidentReported();
-            });
-        }
-
-        public void Dispose()
-        {
-            Logout();
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/LoggedInTest.cs b/src/Server/Coderr.Server.Web.Tests/Tests/LoggedInTest.cs
deleted file mode 100644
index 45e3b540..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/LoggedInTest.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-﻿using codeRR.Server.Web.Tests.Pages;
-using codeRR.Server.Web.Tests.Pages.Account;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    public class LoggedInTest : WebTest
-    {
-        public IPage Login()
-        {
-            return Login(TestData.TestUser.Username, TestData.TestUser.Password);
-        }
-
-        public IPage Login(string userName, string password)
-        {
-            var page = new LoginPage(WebDriver)
-                .LoginWithValidCredentials(userName, password);
-
-            return page;
-        }
-
-        public LoginPage Logout()
-        {
-            var page = new LogoutPage(WebDriver)
-                .Logout();
-
-            page.VerifyIsCurrentPage();
-
-            return page;
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/LoginPageTests.cs b/src/Server/Coderr.Server.Web.Tests/Tests/LoginPageTests.cs
deleted file mode 100644
index ba0b1bfa..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/LoginPageTests.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-﻿using codeRR.Server.Web.Tests.Pages;
-using codeRR.Server.Web.Tests.Pages.Account;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    [Trait("Category", "Integration")]
-    public class LoginPageTests : LoggedInTest
-    {
-        [Fact]
-        public void Should_not_be_able_to_login_with_empty_username()
-        {
-            UITest(() =>
-            {
-                var sut = new LoginPage(WebDriver)
-                    .LoginWithNoUserNameSpecified();
-
-                Assert.IsType<LoginPage>(sut);
-                sut.VerifyIsCurrentPage();
-            });
-        }
-
-        [Fact]
-        public void Should_not_be_able_to_login_with_empty_password()
-        {
-            UITest(() =>
-            {
-                var sut = new LoginPage(WebDriver)
-                    .LoginWithNoPasswordSpecified();
-
-                Assert.IsType<LoginPage>(sut);
-                sut.VerifyIsCurrentPage();
-            });
-        }
-
-        [Fact]
-        public void Should_not_be_able_to_login_with_empty_username_and_empty_password()
-        {
-            UITest(() =>
-            {
-                var sut = new LoginPage(WebDriver)
-                    .LoginWithNoUserNameAndNoPasswordSpecified();
-
-                Assert.IsType<LoginPage>(sut);
-                sut.VerifyIsCurrentPage();
-            });
-        }
-
-        [Fact]
-        public void Should_not_be_able_to_login_with_non_existing_user()
-        {
-            UITest(() =>
-            {
-                var sut = new LoginPage(WebDriver)
-                    .LoginWithNonExistingUserWithPasswordSpecified();
-
-                Assert.IsType<LoginPage>(sut);
-                sut.VerifyIsCurrentPage();
-            });
-        }
-
-        [Fact]
-        public void Should_not_be_able_to_login_with_non_existing_user_with_empty_password()
-        {
-            UITest(() =>
-            {
-                var sut = new LoginPage(WebDriver)
-                    .LoginWithNonExistingUserWithoutPasswordSpecified();
-
-                Assert.IsType<LoginPage>(sut);
-                sut.VerifyIsCurrentPage();
-            });
-        }
-
-        [Fact]
-        public void Should_not_be_able_to_login_with_wrong_password()
-        {
-            UITest(() =>
-            {
-                var sut = new LoginPage(WebDriver)
-                    .LoginWithWrongPasswordSpecified();
-
-                Assert.IsType<LoginPage>(sut);
-                sut.VerifyIsCurrentPage();
-            });
-        }
-
-        [Fact]
-        public void Should_be_able_to_login_with_valid_credentials()
-        {
-            UITest(() =>
-            {
-                var sut = new LoginPage(WebDriver)
-                    .LoginWithValidCredentials(TestData.TestUser.Username, TestData.TestUser.Password);
-
-                Assert.IsType<HomePage>(sut);
-                ((HomePage)sut).VerifyIsCurrentPage();
-
-                Logout();
-            });
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/NavigationTests.cs b/src/Server/Coderr.Server.Web.Tests/Tests/NavigationTests.cs
deleted file mode 100644
index f5ac112d..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/NavigationTests.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-﻿using System;
-using codeRR.Server.Web.Tests.Helpers.Extensions;
-using codeRR.Server.Web.Tests.Pages;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    [Trait("Category", "Integration")]
-    public class NavigationTests : LoggedInTest, IDisposable
-    {
-        public NavigationTests()
-        {
-            Login();
-        }
-
-        [Fact]
-        public void Should_be_able_to_navigate_to_dashboard()
-        {
-            UITest(() =>
-            {
-                var sut = new HomePage(WebDriver);
-                sut.NavigateToPage();
-                sut.NavigationDashboard.Click();
-
-                Assert.Equal("Overview", WebDriver.WaitUntilTitleEquals("Overview"));
-            });
-        }
-
-        [Fact]
-        public void Should_be_able_to_navigate_to_dashboard_overview()
-        {
-            UITest(() =>
-            {
-                var sut = new HomePage(WebDriver);
-                sut.NavigateToPage();
-                sut.NavigationDashboardOverview.Click();
-
-                Assert.Equal("Overview", WebDriver.WaitUntilTitleEquals("Overview"));
-            });
-        }
-
-        [Fact]
-        public void Should_be_able_to_navigate_to_dashboard_incidents()
-        {
-            UITest(() =>
-            {
-                var sut = new HomePage(WebDriver);
-                sut.NavigateToPage();
-                sut.NavigationDashboardIncidents.Click();
-
-                Assert.Equal("Incidents", WebDriver.WaitUntilTitleEquals("Incidents"));
-            });
-        }
-
-        [Fact]
-        public void Should_be_able_to_navigate_to_dashboard_feedback()
-        {
-            UITest(() =>
-            {
-                var sut = new HomePage(WebDriver);
-                sut.NavigateToPage();
-                sut.NavigationDashboardFeedback.Click();
-
-                Assert.Equal("All feedback", WebDriver.WaitUntilTitleEquals("All feedback"));
-            });
-        }
-
-        public void Dispose()
-        {
-            Logout();
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/RegisterPageTests.cs b/src/Server/Coderr.Server.Web.Tests/Tests/RegisterPageTests.cs
deleted file mode 100644
index db142f1e..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/RegisterPageTests.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-﻿using codeRR.Server.Web.Tests.Helpers.Extensions;
-using codeRR.Server.Web.Tests.Pages.Account;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    [Trait("Category", "Integration")]
-    public class RegisterPageTests : LoggedInTest
-    {
-        [Fact]
-        public void Should_not_be_able_to_register_using_already_taken_username()
-        {
-            UITest(() =>
-            {
-                var sut = new RegisterPage(WebDriver)
-                    .RegisterUsingAlreadyTakenUsername();
-
-                Assert.IsType<RegisterPage>(sut);
-                sut.VerifyIsCurrentPage();
-
-                sut.VerifyUsernameIsAlreadyTaken();
-            });
-        }
-
-        [Fact]
-        public void Should_not_be_able_to_register_using_already_taken_email()
-        {
-            UITest(() =>
-            {
-                var sut = new RegisterPage(WebDriver)
-                    .RegisterUsingAlreadyTakenEmail();
-
-                Assert.IsType<RegisterPage>(sut);
-                sut.VerifyIsCurrentPage();
-
-                sut.VerifyEmailIsAlreadyTaken();
-            });
-        }
-
-        [Fact]
-        public void Should_be_able_to_register_user()
-        {
-            UITest(() =>
-            {
-                var sut = new RegisterPage(WebDriver)
-                    .RegisterNewUser();
-
-                Assert.Equal("Account registered - codeRR", WebDriver.WaitUntilTitleEquals(sut.Title));
-            });
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/Tests/UserTests.cs b/src/Server/Coderr.Server.Web.Tests/Tests/UserTests.cs
deleted file mode 100644
index a06fe7a6..00000000
--- a/src/Server/Coderr.Server.Web.Tests/Tests/UserTests.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-﻿using System;
-using codeRR.Server.SqlServer.Tests.Models;
-using codeRR.Server.Web.Tests.Helpers.Extensions;
-using codeRR.Server.Web.Tests.Pages;
-using OpenQA.Selenium;
-using Xunit;
-
-namespace codeRR.Server.Web.Tests.Tests
-{
-    [Trait("Category", "Integration")]
-    public class UserTests : LoggedInTest, IDisposable
-    {
-        private readonly IPage _homePage;
-        private readonly TestUser _testUser;
-
-        public UserTests()
-        {
-            _testUser = new TestUser { Username = "TestNormalUser", Password = "123456", Email = "TestNormalUser@coderrapp.com" };
-            TestData.CreateUser(_testUser, TestData.ApplicationId);
-
-            _homePage = Login(_testUser.Username, _testUser.Password);
-        }
-
-        [Fact]
-        public void NormalUser_Should_not_have_create_new_application_menu_item()
-        {
-            UITest(() =>
-            {
-                Assert.IsType<ApplicationPage>(_homePage);
-                Assert.Equal("MyTestApp", WebDriver.WaitUntilTitleEquals("MyTestApp"));
-                Assert.Throws<NoSuchElementException>(() => WebDriver.FindElement(By.XPath("//a/span[.='Create new application']")));
-            });
-        }
-
-        [Fact]
-        public void NormalUser_Should_see_homepage_after_login()
-        {
-            UITest(() =>
-            {
-                Assert.IsType<ApplicationPage>(_homePage);
-                Assert.Equal("MyTestApp", WebDriver.WaitUntilTitleEquals("MyTestApp"));
-            });
-        }
-
-        public void Dispose()
-        {
-            Logout();
-        }
-    }
-}
diff --git a/src/Server/Coderr.Server.Web.Tests/WebTest.cs b/src/Server/Coderr.Server.Web.Tests/WebTest.cs
deleted file mode 100644
index bca6fe48..00000000
--- a/src/Server/Coderr.Server.Web.Tests/WebTest.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Net;
-using System.Web.Configuration;
-using codeRR.Server.SqlServer.Core.Accounts;
-using codeRR.Server.SqlServer.Tests.Helpers;
-using codeRR.Server.SqlServer.Tests.Models;
-using codeRR.Server.Web.Tests.Helpers;
-using codeRR.Server.Web.Tests.Helpers.Selenium;
-using Griffin.Data.Mapper;
-using OpenQA.Selenium;
-using OpenQA.Selenium.Support.Extensions;
-using Xunit;
-
-[assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)]
-
-namespace codeRR.Server.Web.Tests
-{
-    [TestCaseOrderer("codeRR.Server.Web.Tests.Helpers.xUnit.TestCaseOrderer", "codeRR.Server.Web.Tests")]
-    public abstract class WebTest
-    {
-        private static readonly IisExpressHelper _iisExpress;
-        private static readonly DatabaseManager _databaseManager = new DatabaseManager();
-
-        static WebTest()
-        {
-            var mapper = new AssemblyScanningMappingProvider();
-            mapper.Scan(typeof(AccountRepository).Assembly);
-            EntityMappingProvider.Provider = mapper;
-
-            _databaseManager.CreateEmptyDatabase();
-            _databaseManager.InitSchema();
-
-            AppDomain.CurrentDomain.DomainUnload += (o, e) =>
-            {
-                _iisExpress?.Stop();
-                _databaseManager.Dispose();
-            };
-
-            // Disables database migration in codeRR.Server.Web project, should be up-to-date already
-            // SchemaUpdateModule does not handle coderr_ConnectionString environment variable
-            // This should only be run on build server due to changes in web.config
-            if (Environment.GetEnvironmentVariable("TF_BUILD") != null)
-            {
-                DisableDatabaseMigrations();
-            }
-
-            var configPath =
-                Path.Combine(Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\")),
-                    "applicationhost.config");
-
-            Console.WriteLine($"Path to IIS Express configuration file '{configPath}'");
-
-            _iisExpress = new IisExpressHelper
-            {
-                ConfigPath = configPath,
-
-                // Pass on connectionstring to codeRR.Server.Web during testing, overriding connectionstring in web.config
-                EnvironmentVariables = new Dictionary<string, string> { { "coderr_ConnectionString", _databaseManager.ConnectionString } }
-            };
-            _iisExpress.Start("codeRR.Server.Web");
-
-            // Warmup request only on build server
-            if (Environment.GetEnvironmentVariable("TF_BUILD") != null)
-            {
-                var webClient = new WebClient();
-                webClient.DownloadString(_iisExpress.BaseUrl);
-            }
-
-            TestUser = new TestUser {Username = "TestUser", Password = "123456", Email = "TestUser@coderrapp.com"};
-
-            TestData = new TestDataManager(_databaseManager.OpenConnection) { TestUser = TestUser };
-
-            WebDriver = DriverFactory.Create(BrowserType.Chrome);
-            AppDomain.CurrentDomain.DomainUnload += (o, e) => { DisposeWebDriver(); };
-        }
-
-        /// <summary>
-        /// Disables database migration in codeRR.Server.Web project
-        /// </summary>
-        private static void DisableDatabaseMigrations()
-        {
-            var webConfigFilename =
-                Path.Combine(
-                    Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\..\codeRR.Server.Web\")),
-                    "web.config");
-
-            Console.WriteLine($"Setting DisableMigrations=true in '{webConfigFilename}'");
-
-            // Prevent SchemaUpdateModule from running
-            var configFile = new FileInfo(webConfigFilename);
-            var vdm = new VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name);
-            var wcfm = new WebConfigurationFileMap();
-            wcfm.VirtualDirectories.Add("/", vdm);
-            var configuration = WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
-            var appSettings = configuration.AppSettings.Settings;
-            if (appSettings["DisableMigrations"] == null)
-                appSettings.Add("DisableMigrations", "true");
-            else
-                appSettings["DisableMigrations"].Value = "true";
-            configuration.Save();
-        }
-
-        protected WebTest()
-        {
-            TestData.ResetDatabase(_iisExpress.BaseUrl);
-        }
-
-        public string ServerUrl => _iisExpress.BaseUrl;
-
-        public static TestDataManager TestData { get; }
-
-        public static IWebDriver WebDriver { get; private set; }
-
-        public static TestUser TestUser { get; set; }
-
-        private static void DisposeWebDriver()
-        {
-            try
-            {
-                WebDriver.Quit();
-            }
-            // ReSharper disable once EmptyGeneralCatchClause
-            catch
-            {
-            }
-
-            WebDriver.Dispose();
-        }
-
-        // ReSharper disable once InconsistentNaming
-        public void UITest(Action action)
-        {
-            try
-            {
-                action();
-            }
-            catch
-            {
-                var screenshot = WebDriver.TakeScreenshot();
-
-                var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
-                    $"{GetType().Name}.{DateTime.Now:yyyMMdd.HHmmss}.png");
-
-                screenshot.SaveAsFile(fileName, ScreenshotImageFormat.Png);
-
-                throw;
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Web.Tests/applicationhost.config b/src/Server/Coderr.Server.Web.Tests/applicationhost.config
deleted file mode 100644
index 161775d3..00000000
--- a/src/Server/Coderr.Server.Web.Tests/applicationhost.config
+++ /dev/null
@@ -1,1048 +0,0 @@
-﻿
-
-
-
-
-
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    IIS configuration sections.
-
-    For schema documentation, see
-    %IIS_BIN%\config\schema\IIS_schema.xml.
-    
-    Please make a backup of this file before making any changes to it.
-
-    NOTE: The following environment variables are available to be used
-          within this file and are understood by the IIS Express.
-
-          %IIS_USER_HOME% - The IIS Express home directory for the user
-          %IIS_SITES_HOME% - The default home directory for sites
-          %IIS_BIN% - The location of the IIS Express binaries
-          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%
-
--->
-<configuration>
-
-    <!--
-
-        The <configSections> section controls the registration of sections.
-        Section is the basic unit of deployment, locking, searching and
-        containment for configuration settings.
-        
-        Every section belongs to one section group.
-        A section group is a container of logically-related sections.
-        
-        Sections cannot be nested.
-        Section groups may be nested.
-        
-        <section
-            name=""  [Required, Collection Key] [XML name of the section]
-            allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
-            overrideModeDefault="Allow"  [Allow|Deny] [Default delegation mode]
-            allowLocation="true"  [true|false] [Allowed in location tags]
-        />
-        
-        The recommended way to unlock sections is by using a location tag:
-        <location path="Default Web Site" overrideMode="Allow">
-            <system.webServer>
-                <asp />
-            </system.webServer>
-        </location>
-
-    -->
-    <configSections>
-        <sectionGroup name="system.applicationHost">
-            <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-        </sectionGroup>
-
-        <sectionGroup name="system.webServer">
-            <section name="asp" overrideModeDefault="Deny" />
-            <section name="caching" overrideModeDefault="Allow" />
-            <section name="cgi" overrideModeDefault="Deny" />
-            <section name="defaultDocument" overrideModeDefault="Allow" />
-            <section name="directoryBrowse" overrideModeDefault="Allow" />
-            <section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="handlers" overrideModeDefault="Deny" />
-            <section name="httpCompression" overrideModeDefault="Allow" />
-            <section name="httpErrors" overrideModeDefault="Allow" />
-            <section name="httpLogging" overrideModeDefault="Deny" />
-            <section name="httpProtocol" overrideModeDefault="Allow" />
-            <section name="httpRedirect" overrideModeDefault="Allow" />
-            <section name="httpTracing" overrideModeDefault="Deny" />
-            <section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
-            <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
-            <section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
-            <section name="odbcLogging" overrideModeDefault="Deny" />
-            <sectionGroup name="security">
-                <section name="access" overrideModeDefault="Deny" />
-                <section name="applicationDependencies" overrideModeDefault="Deny" />
-                <sectionGroup name="authentication">
-                    <section name="anonymousAuthentication" overrideModeDefault="Deny" />
-                    <section name="basicAuthentication" overrideModeDefault="Deny" />
-                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
-                    <section name="digestAuthentication" overrideModeDefault="Deny" />
-                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
-                    <section name="windowsAuthentication" overrideModeDefault="Deny" />
-                </sectionGroup>
-                <section name="authorization" overrideModeDefault="Allow" />
-                <section name="ipSecurity" overrideModeDefault="Deny" />
-                <section name="dynamicIpSecurity" overrideModeDefault="Deny" />
-                <section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-                <section name="requestFiltering" overrideModeDefault="Allow" />
-            </sectionGroup>
-            <section name="serverRuntime" overrideModeDefault="Deny" />
-            <section name="serverSideInclude" overrideModeDefault="Deny" />
-            <section name="staticContent" overrideModeDefault="Allow" />
-            <sectionGroup name="tracing">
-                <section name="traceFailedRequests" overrideModeDefault="Allow" />
-                <section name="traceProviderDefinitions" overrideModeDefault="Deny" />
-            </sectionGroup>
-            <section name="urlCompression" overrideModeDefault="Allow" />
-            <section name="validation" overrideModeDefault="Allow" />
-            <sectionGroup name="webdav">
-                <section name="globalSettings" overrideModeDefault="Deny" />
-                <section name="authoring" overrideModeDefault="Deny" />
-                <section name="authoringRules" overrideModeDefault="Deny" />
-            </sectionGroup>
-            <sectionGroup name="rewrite">
-                <section name="allowedServerVariables" overrideModeDefault="Deny" />
-                <section name="rules" overrideModeDefault="Allow" />
-                <section name="outboundRules" overrideModeDefault="Allow" />
-                <section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
-                <section name="providers" overrideModeDefault="Allow" />
-                <section name="rewriteMaps" overrideModeDefault="Allow" />
-            </sectionGroup>
-            <section name="webSocket" overrideModeDefault="Deny" />
-        <section name="aspNetCore" overrideModeDefault="Allow" /></sectionGroup>
-    </configSections>
-
-    <configProtectedData>
-        <providers>
-            <add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
-            <add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=" />
-            <add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=" />
-        </providers>
-    </configProtectedData>
-
-    <system.applicationHost>
-
-        <applicationPools>
-            <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
-            <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
-            <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
-            <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
-            <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
-            <applicationPoolDefaults managedRuntimeLoader="v4.0">
-                <processModel />
-            </applicationPoolDefaults>
-        </applicationPools>
-
-        <!--
-
-          The <listenerAdapters> section defines the protocols with which the
-          Windows Process Activation Service (WAS) binds.
-
-        -->
-        <listenerAdapters>
-            <add name="http" />
-        </listenerAdapters>
-
-        <sites>
-            <site name="WebSite1" id="1" serverAutoStart="true">
-                <application path="/">
-                    <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
-                </application>
-                <bindings>
-                    <binding protocol="http" bindingInformation=":8080:localhost" />
-                </bindings>
-            </site>
-            <site name="codeRR.Server.Web" id="2">
-                <application path="/" applicationPool="Clr4IntegratedAppPool">
-                    <virtualDirectory path="/" physicalPath="D:\src\1TCompany\codeRR\OSS\codeRR.Server\src\Server\Coderr.Server.Web" />
-                </application>
-                <application path="/coderr" applicationPool="Clr4IntegratedAppPool">
-                    <virtualDirectory path="/" physicalPath="D:\src\1TCompany\codeRR\OSS\codeRR.Server\src\Server\Coderr.Server.Web" />
-                </application>
-                <bindings>
-                    <binding protocol="http" bindingInformation="*:50473:localhost" />
-                </bindings>
-            </site>
-            <siteDefaults>
-                <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
-                <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
-            </siteDefaults>
-            <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
-            <virtualDirectoryDefaults allowSubDirConfig="true" />
-        </sites>
-
-        <webLimits />
-
-    </system.applicationHost>
-
-    <system.webServer>
-
-        <serverRuntime />
-
-        <asp scriptErrorSentToBrowser="true">
-            <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
-            <limits />
-        </asp>
-
-        <caching enabled="true" enableKernelCache="true">
-        </caching>
-
-        <cgi />
-
-        <defaultDocument enabled="true">
-            <files>
-                <add value="Default.htm" />
-                <add value="Default.asp" />
-                <add value="index.htm" />
-                <add value="index.html" />
-                <add value="iisstart.htm" />
-                <add value="default.aspx" />
-            </files>
-        </defaultDocument>
-
-        <directoryBrowse enabled="false" />
-
-        <fastCgi />
-
-        <!--
-
-          The <globalModules> section defines all native-code modules.
-          To enable a module, specify it in the <modules> section.
-
-        -->
-        <globalModules>
-            <add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
-            <add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
-<!--            <add name="FileCacheModule" image="%IIS_BIN%\cachfile.dll" />  -->
-            <add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
-<!--            <add name="HttpCacheModule" image="%IIS_BIN%\cachhttp.dll" /> -->
-            <add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
-            <add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
-            <add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
-            <add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
-            <add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
-            <add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
-            <add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
-            <add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
-            <add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
-            <add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
-            <add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
-            <add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
-            <add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
-<!--            <add name="DigestAuthenticationModule" image="%IIS_BIN%\authmd5.dll" /> -->
-            <add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
-            <add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
-            <add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
-            <add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
-            <add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
-            <add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
-<!--            <add name="TracingModule" image="%IIS_BIN%\iisetw.dll" /> -->
-            <add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
-            <add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
-            <add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
-            <add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
-            <add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
-            <add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
-<!--            <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
-            <add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
-            <add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
-            <add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
-            <add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
-            <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
-            <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
-            <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
-            <add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
-            <add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
-            <add name="AspNetCoreModule" image="%IIS_BIN%\aspnetcore.dll" />
-        </globalModules>
-
-        <httpCompression directory="%TEMP%\iisexpress\IIS Temporary Compressed Files">
-            <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
-            <dynamicTypes>
-                <add mimeType="text/*" enabled="true" />
-                <add mimeType="message/*" enabled="true" />
-                <add mimeType="application/javascript" enabled="true" />
-                <add mimeType="application/atom+xml" enabled="true" />
-                <add mimeType="application/xaml+xml" enabled="true" />
-                <add mimeType="*/*" enabled="false" />
-            </dynamicTypes>
-            <staticTypes>
-                <add mimeType="text/*" enabled="true" />
-                <add mimeType="message/*" enabled="true" />
-                <add mimeType="image/svg+xml" enabled="true" />
-                <add mimeType="application/javascript" enabled="true" />
-                <add mimeType="application/atom+xml" enabled="true" />
-                <add mimeType="application/xaml+xml" enabled="true" />
-                <add mimeType="*/*" enabled="false" />
-            </staticTypes>
-        </httpCompression>
-
-        <httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
-            <error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
-            <error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
-            <error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
-            <error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
-            <error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
-            <error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
-            <error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
-            <error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
-            <error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
-        </httpErrors>
-
-        <httpLogging dontLog="false" />
-
-        <httpProtocol>
-            <customHeaders>
-                <clear />
-                <add name="X-Powered-By" value="ASP.NET" />
-            </customHeaders>
-            <redirectHeaders>
-                <clear />
-            </redirectHeaders>
-        </httpProtocol>
-
-        <httpRedirect enabled="false" />
-
-        <httpTracing>
-        </httpTracing>
-
-        <isapiFilters>
-            <filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
-            <filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
-            <filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
-            <filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
-            <filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
-        </isapiFilters>
-
-        <odbcLogging />
-
-        <security>
-
-            <access sslFlags="None" />
-
-            <applicationDependencies>
-                <application name="Active Server Pages" groupId="ASP" />
-            </applicationDependencies>
-
-            <authentication>
-
-                <anonymousAuthentication enabled="true" userName="" />
-
-                <basicAuthentication enabled="false" />
-
-                <clientCertificateMappingAuthentication enabled="false" />
-
-                <digestAuthentication enabled="false" />
-
-                <iisClientCertificateMappingAuthentication enabled="false">
-                </iisClientCertificateMappingAuthentication>
-
-                <windowsAuthentication enabled="false">
-                    <providers>
-                        <add value="Negotiate" />
-                        <add value="NTLM" />
-                    </providers>
-                </windowsAuthentication>
-
-            </authentication>
-
-            <authorization>
-                <add accessType="Allow" users="*" />
-            </authorization>
-
-            <ipSecurity allowUnlisted="true" />
-
-            <isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
-                <add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
-                <add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
-                <add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
-                <add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
-            </isapiCgiRestriction>
-
-            <requestFiltering>
-                <fileExtensions allowUnlisted="true" applyToWebDAV="true">
-                    <add fileExtension=".asa" allowed="false" />
-                    <add fileExtension=".asax" allowed="false" />
-                    <add fileExtension=".ascx" allowed="false" />
-                    <add fileExtension=".master" allowed="false" />
-                    <add fileExtension=".skin" allowed="false" />
-                    <add fileExtension=".browser" allowed="false" />
-                    <add fileExtension=".sitemap" allowed="false" />
-                    <add fileExtension=".config" allowed="false" />
-                    <add fileExtension=".cs" allowed="false" />
-                    <add fileExtension=".csproj" allowed="false" />
-                    <add fileExtension=".vb" allowed="false" />
-                    <add fileExtension=".vbproj" allowed="false" />
-                    <add fileExtension=".webinfo" allowed="false" />
-                    <add fileExtension=".licx" allowed="false" />
-                    <add fileExtension=".resx" allowed="false" />
-                    <add fileExtension=".resources" allowed="false" />
-                    <add fileExtension=".mdb" allowed="false" />
-                    <add fileExtension=".vjsproj" allowed="false" />
-                    <add fileExtension=".java" allowed="false" />
-                    <add fileExtension=".jsl" allowed="false" />
-                    <add fileExtension=".ldb" allowed="false" />
-                    <add fileExtension=".dsdgm" allowed="false" />
-                    <add fileExtension=".ssdgm" allowed="false" />
-                    <add fileExtension=".lsad" allowed="false" />
-                    <add fileExtension=".ssmap" allowed="false" />
-                    <add fileExtension=".cd" allowed="false" />
-                    <add fileExtension=".dsprototype" allowed="false" />
-                    <add fileExtension=".lsaprototype" allowed="false" />
-                    <add fileExtension=".sdm" allowed="false" />
-                    <add fileExtension=".sdmDocument" allowed="false" />
-                    <add fileExtension=".mdf" allowed="false" />
-                    <add fileExtension=".ldf" allowed="false" />
-                    <add fileExtension=".ad" allowed="false" />
-                    <add fileExtension=".dd" allowed="false" />
-                    <add fileExtension=".ldd" allowed="false" />
-                    <add fileExtension=".sd" allowed="false" />
-                    <add fileExtension=".adprototype" allowed="false" />
-                    <add fileExtension=".lddprototype" allowed="false" />
-                    <add fileExtension=".exclude" allowed="false" />
-                    <add fileExtension=".refresh" allowed="false" />
-                    <add fileExtension=".compiled" allowed="false" />
-                    <add fileExtension=".msgx" allowed="false" />
-                    <add fileExtension=".vsdisco" allowed="false" />
-                    <add fileExtension=".rules" allowed="false" />
-                </fileExtensions>
-                <verbs allowUnlisted="true" applyToWebDAV="true" />
-                <hiddenSegments applyToWebDAV="true">
-                    <add segment="web.config" />
-                    <add segment="bin" />
-                    <add segment="App_code" />
-                    <add segment="App_GlobalResources" />
-                    <add segment="App_LocalResources" />
-                    <add segment="App_WebReferences" />
-                    <add segment="App_Data" />
-                    <add segment="App_Browsers" />
-                </hiddenSegments>
-            </requestFiltering>
-
-        </security>
-
-        <serverSideInclude ssiExecDisable="false" />
-
-        <staticContent lockAttributes="isDocFooterFileName">
-            <mimeMap fileExtension=".323" mimeType="text/h323" />
-            <mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
-            <mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
-            <mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
-            <mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
-            <mimeMap fileExtension=".aac" mimeType="audio/aac" />
-            <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
-            <mimeMap fileExtension=".accde" mimeType="application/msaccess" />
-            <mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
-            <mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
-            <mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
-            <mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
-            <mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ai" mimeType="application/postscript" />
-            <mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
-            <mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
-            <mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
-            <mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
-            <mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
-            <mimeMap fileExtension=".art" mimeType="image/x-jg" />
-            <mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
-            <mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".asm" mimeType="text/plain" />
-            <mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
-            <mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
-            <mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
-            <mimeMap fileExtension=".au" mimeType="audio/basic" />
-            <mimeMap fileExtension=".avi" mimeType="video/msvideo" />
-            <mimeMap fileExtension=".axs" mimeType="application/olescript" />
-            <mimeMap fileExtension=".bas" mimeType="text/plain" />
-            <mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
-            <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".bmp" mimeType="image/bmp" />
-            <mimeMap fileExtension=".c" mimeType="text/plain" />
-            <mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
-            <mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
-            <mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
-            <mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
-            <mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
-            <mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
-            <mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
-            <mimeMap fileExtension=".cnf" mimeType="text/plain" />
-            <mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
-            <mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
-            <mimeMap fileExtension=".cpp" mimeType="text/plain" />
-            <mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
-            <mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
-            <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
-            <mimeMap fileExtension=".csh" mimeType="application/x-csh" />
-            <mimeMap fileExtension=".css" mimeType="text/css" />
-            <mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".dcr" mimeType="application/x-director" />
-            <mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
-            <mimeMap fileExtension=".dib" mimeType="image/bmp" />
-            <mimeMap fileExtension=".dir" mimeType="application/x-director" />
-            <mimeMap fileExtension=".disco" mimeType="text/xml" />
-            <mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
-            <mimeMap fileExtension=".dll.config" mimeType="text/xml" />
-            <mimeMap fileExtension=".dlm" mimeType="text/dlm" />
-            <mimeMap fileExtension=".doc" mimeType="application/msword" />
-            <mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
-            <mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
-            <mimeMap fileExtension=".dot" mimeType="application/msword" />
-            <mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
-            <mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
-            <mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".dtd" mimeType="text/xml" />
-            <mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
-            <mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
-            <mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
-            <mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".dxr" mimeType="application/x-director" />
-            <mimeMap fileExtension=".eml" mimeType="message/rfc822" />
-            <mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
-            <mimeMap fileExtension=".eps" mimeType="application/postscript" />
-            <mimeMap fileExtension=".etx" mimeType="text/x-setext" />
-            <mimeMap fileExtension=".evy" mimeType="application/envoy" />
-            <mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".exe.config" mimeType="text/xml" />
-            <mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
-            <mimeMap fileExtension=".fif" mimeType="application/fractals" />
-            <mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".flv" mimeType="video/x-flv" />
-            <mimeMap fileExtension=".gif" mimeType="image/gif" />
-            <mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
-            <mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
-            <mimeMap fileExtension=".h" mimeType="text/plain" />
-            <mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
-            <mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
-            <mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
-            <mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
-            <mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
-            <mimeMap fileExtension=".hta" mimeType="application/hta" />
-            <mimeMap fileExtension=".htc" mimeType="text/x-component" />
-            <mimeMap fileExtension=".htm" mimeType="text/html" />
-            <mimeMap fileExtension=".html" mimeType="text/html" />
-            <mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
-            <mimeMap fileExtension=".hxt" mimeType="text/html" />
-            <mimeMap fileExtension=".ico" mimeType="image/x-icon" />
-            <mimeMap fileExtension=".ics" mimeType="text/calendar" />
-            <mimeMap fileExtension=".ief" mimeType="image/ief" />
-            <mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
-            <mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
-            <mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
-            <mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
-            <mimeMap fileExtension=".jar" mimeType="application/java-archive" />
-            <mimeMap fileExtension=".java" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
-            <mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
-            <mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
-            <mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
-            <mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
-            <mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
-            <mimeMap fileExtension=".js" mimeType="application/javascript" />
-            <mimeMap fileExtension=".json" mimeType="application/json" />
-            <mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
-            <mimeMap fileExtension=".jsx" mimeType="text/jscript" />
-            <mimeMap fileExtension=".latex" mimeType="application/x-latex" />
-            <mimeMap fileExtension=".less" mimeType="text/css" />
-            <mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
-            <mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
-            <mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
-            <mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
-            <mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
-            <mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
-            <mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
-            <mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
-            <mimeMap fileExtension=".m4v" mimeType="video/mp4" />
-            <mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
-            <mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
-            <mimeMap fileExtension=".map" mimeType="text/plain" />
-            <mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
-            <mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
-            <mimeMap fileExtension=".mht" mimeType="message/rfc822" />
-            <mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
-            <mimeMap fileExtension=".mid" mimeType="audio/mid" />
-            <mimeMap fileExtension=".midi" mimeType="audio/mid" />
-            <mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
-            <mimeMap fileExtension=".mno" mimeType="text/xml" />
-            <mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
-            <mimeMap fileExtension=".mov" mimeType="video/quicktime" />
-            <mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
-            <mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
-            <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
-            <mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
-            <mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
-            <mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
-            <mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
-            <mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
-            <mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
-            <mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
-            <mimeMap fileExtension=".nws" mimeType="message/rfc822" />
-            <mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".oda" mimeType="application/oda" />
-            <mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
-            <mimeMap fileExtension=".ods" mimeType="application/oleobject" />
-            <mimeMap fileExtension=".oga" mimeType="audio/ogg" />
-            <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
-            <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
-            <mimeMap fileExtension=".one" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onea" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
-            <mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
-            <mimeMap fileExtension=".otf" mimeType="font/otf" />
-            <mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
-            <mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
-            <mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
-            <mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
-            <mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
-            <mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
-            <mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
-            <mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
-            <mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pdf" mimeType="application/pdf" />
-            <mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
-            <mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
-            <mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
-            <mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".png" mimeType="image/png" />
-            <mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
-            <mimeMap fileExtension=".pnz" mimeType="image/png" />
-            <mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
-            <mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
-            <mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
-            <mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
-            <mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
-            <mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
-            <mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
-            <mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
-            <mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
-            <mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
-            <mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
-            <mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
-            <mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ps" mimeType="application/postscript" />
-            <mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
-            <mimeMap fileExtension=".qt" mimeType="video/quicktime" />
-            <mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
-            <mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
-            <mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
-            <mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
-            <mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
-            <mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
-            <mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
-            <mimeMap fileExtension=".rmi" mimeType="audio/mid" />
-            <mimeMap fileExtension=".roff" mimeType="application/x-troff" />
-            <mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
-            <mimeMap fileExtension=".rtf" mimeType="application/rtf" />
-            <mimeMap fileExtension=".rtx" mimeType="text/richtext" />
-            <mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
-            <mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
-            <mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
-            <mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
-            <mimeMap fileExtension=".sgml" mimeType="text/sgml" />
-            <mimeMap fileExtension=".sh" mimeType="application/x-sh" />
-            <mimeMap fileExtension=".shar" mimeType="application/x-shar" />
-            <mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
-            <mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
-            <mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
-            <mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
-            <mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
-            <mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
-            <mimeMap fileExtension=".snd" mimeType="audio/basic" />
-            <mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
-            <mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
-            <mimeMap fileExtension=".spx" mimeType="audio/ogg" />
-            <mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
-            <mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
-            <mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
-            <mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
-            <mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
-            <mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
-            <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
-            <mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
-            <mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
-            <mimeMap fileExtension=".t" mimeType="application/x-troff" />
-            <mimeMap fileExtension=".tar" mimeType="application/x-tar" />
-            <mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
-            <mimeMap fileExtension=".tex" mimeType="application/x-tex" />
-            <mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
-            <mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
-            <mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
-            <mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
-            <mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".tif" mimeType="image/tiff" />
-            <mimeMap fileExtension=".tiff" mimeType="image/tiff" />
-            <mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".tr" mimeType="application/x-troff" />
-            <mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
-            <mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
-            <mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
-            <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
-            <mimeMap fileExtension=".txt" mimeType="text/plain" />
-            <mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".uls" mimeType="text/iuls" />
-            <mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
-            <mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
-            <mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
-            <mimeMap fileExtension=".vcs" mimeType="text/plain" />
-            <mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
-            <mimeMap fileExtension=".vml" mimeType="text/xml" />
-            <mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
-            <mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".wav" mimeType="audio/wav" />
-            <mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
-            <mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
-            <mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
-            <mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
-            <mimeMap fileExtension=".webm" mimeType="video/webm" />
-            <mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
-            <mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
-            <mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
-            <mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
-            <mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
-            <mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
-            <mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
-            <mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
-            <mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
-            <mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
-            <mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
-            <mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
-            <mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
-            <mimeMap fileExtension=".woff" mimeType="font/x-woff" />
-            <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
-            <mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
-            <mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
-            <mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".wsdl" mimeType="text/xml" />
-            <mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
-            <mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
-            <mimeMap fileExtension=".x" mimeType="application/directx" />
-            <mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
-            <mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
-            <mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
-            <mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
-            <mimeMap fileExtension=".xdr" mimeType="text/plain" />
-            <mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
-            <mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
-            <mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
-            <mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
-            <mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
-            <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
-            <mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
-            <mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
-            <mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xml" mimeType="text/xml" />
-            <mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
-            <mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
-            <mimeMap fileExtension=".xsd" mimeType="text/xml" />
-            <mimeMap fileExtension=".xsf" mimeType="text/xml" />
-            <mimeMap fileExtension=".xsl" mimeType="text/xml" />
-            <mimeMap fileExtension=".xslt" mimeType="text/xml" />
-            <mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
-            <mimeMap fileExtension=".z" mimeType="application/x-compress" />
-            <mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
-        </staticContent>
-
-        <tracing>
-
-             <traceProviderDefinitions>
-                <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
-                    <areas>
-                        <clear />
-                        <add name="Authentication" value="2" />
-                        <add name="Security" value="4" />
-                        <add name="Filter" value="8" />
-                        <add name="StaticFile" value="16" />
-                        <add name="CGI" value="32" />
-                        <add name="Compression" value="64" />
-                        <add name="Cache" value="128" />
-                        <add name="RequestNotifications" value="256" />
-                        <add name="Module" value="512" />
-                        <add name="Rewrite" value="1024" />
-                        <add name="FastCGI" value="4096" />
-                        <add name="WebSocket" value="16384" />
-                    </areas>
-                </add>
-                <add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
-                    <areas>
-                        <clear />
-                    </areas>
-                </add>
-                <add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
-                    <areas>
-                        <clear />
-                    </areas>
-                </add>
-                <add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
-                    <areas>
-                        <add name="Infrastructure" value="1" />
-                        <add name="Module" value="2" />
-                        <add name="Page" value="4" />
-                        <add name="AppServices" value="8" />
-                    </areas>
-                </add>
-            </traceProviderDefinitions>
-
-            <traceFailedRequests>
-                <add path="*">
-                    <traceAreas>
-                        <add provider="ASP" verbosity="Verbose" />
-                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
-                        <add provider="ISAPI Extension" verbosity="Verbose" />
-                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
-                    </traceAreas>
-                    <failureDefinitions statusCodes="200-999" />
-                </add>
-            </traceFailedRequests>
-
-        </tracing>
-
-        <urlCompression />
-
-        <validation />
-        <webdav>
-            <globalSettings>
-                <propertyStores>
-                    <add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
-                </propertyStores>
-                <lockStores>
-                    <add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
-                </lockStores>
-
-            </globalSettings>
-            <authoring>
-                <locks enabled="true" lockStore="webdav_simple_lock" />
-            </authoring>
-            <authoringRules />
-        </webdav>
-        <webSocket />
-        <applicationInitialization />
-
-    </system.webServer>
-    <location path="" overrideMode="Allow">
-        <system.webServer>
-            <modules>
-                <add name="IsapiFilterModule" lockItem="true" />
-                <add name="BasicAuthenticationModule" lockItem="true" />
-                <add name="IsapiModule" lockItem="true" />
-                <add name="HttpLoggingModule" lockItem="true" />
-                <!--
-                <add name="HttpCacheModule" lockItem="true" />
--->
-                <add name="DynamicCompressionModule" lockItem="true" />
-                <add name="StaticCompressionModule" lockItem="true" />
-                <add name="DefaultDocumentModule" lockItem="true" />
-                <add name="DirectoryListingModule" lockItem="true" />
-
-                <add name="ProtocolSupportModule" lockItem="true" />
-                <add name="HttpRedirectionModule" lockItem="true" />
-                <add name="ServerSideIncludeModule" lockItem="true" />
-                <add name="StaticFileModule" lockItem="true" />
-                <add name="AnonymousAuthenticationModule" lockItem="true" />
-                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
-                <add name="UrlAuthorizationModule" lockItem="true" />
-                <add name="WindowsAuthenticationModule" lockItem="true" />
-                <!--
-                <add name="DigestAuthenticationModule" lockItem="true" />
--->
-                <add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
-                <add name="WebMatrixSupportModule" lockItem="true" />
-                <add name="IpRestrictionModule" lockItem="true" />
-                <add name="DynamicIpRestrictionModule" lockItem="true" />
-                <add name="RequestFilteringModule" lockItem="true" />
-                <add name="CustomLoggingModule" lockItem="true" />
-                <add name="CustomErrorModule" lockItem="true" />
-                <add name="FailedRequestsTracingModule" lockItem="true" />
-                <add name="CgiModule" lockItem="true" />
-                <add name="FastCgiModule" lockItem="true" />
-                <!--                <add name="WebDAVModule" /> -->
-                <add name="RewriteModule" />
-                <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
-                <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
-                <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
-                <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
-                <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
-                <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
-                <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
-                <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
-                <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
-                <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
-                <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
-                <add name="ConfigurationValidationModule" lockItem="true" />
-                <add name="WebSocketModule" lockItem="true" />
-                <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
-                <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
-                <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
-                <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
-                <add name="ApplicationInitializationModule" lockItem="true" />
-                <add name="AspNetCoreModule" lockItem="true" />
-            </modules>
-            <handlers accessPolicy="Read, Script">
-                <!--                <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
-                <add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
-                <add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
-                <add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
-                <add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
-                <add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
-                <add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
-                <add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
-                <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
-                <add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
-                <add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
-                <add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
-                <add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
-                <add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
-                <add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
-                <add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
-                <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
-                <add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
-                <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
-                <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
-                <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
-                <add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
-                <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
-                <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
-                <add name="ExtensionlessUrl-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
-                <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
-            </handlers>
-        </system.webServer>
-    </location>
-</configuration>
diff --git a/src/Server/Coderr.Server.Web.Tests/applicationhost.tt b/src/Server/Coderr.Server.Web.Tests/applicationhost.tt
deleted file mode 100644
index 1c28866c..00000000
--- a/src/Server/Coderr.Server.Web.Tests/applicationhost.tt
+++ /dev/null
@@ -1,1048 +0,0 @@
-﻿<#@ template debug="true" hostspecific="true" language="C#" #>
-<#@ assembly name="System.Core" #>
-<#@ import namespace="System.Linq" #>
-<#@ import namespace="System.Text" #>
-<#@ import namespace="System.Collections.Generic" #>
-<#@ output extension=".config" #>
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    IIS configuration sections.
-
-    For schema documentation, see
-    %IIS_BIN%\config\schema\IIS_schema.xml.
-    
-    Please make a backup of this file before making any changes to it.
-
-    NOTE: The following environment variables are available to be used
-          within this file and are understood by the IIS Express.
-
-          %IIS_USER_HOME% - The IIS Express home directory for the user
-          %IIS_SITES_HOME% - The default home directory for sites
-          %IIS_BIN% - The location of the IIS Express binaries
-          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%
-
--->
-<configuration>
-
-    <!--
-
-        The <configSections> section controls the registration of sections.
-        Section is the basic unit of deployment, locking, searching and
-        containment for configuration settings.
-        
-        Every section belongs to one section group.
-        A section group is a container of logically-related sections.
-        
-        Sections cannot be nested.
-        Section groups may be nested.
-        
-        <section
-            name=""  [Required, Collection Key] [XML name of the section]
-            allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
-            overrideModeDefault="Allow"  [Allow|Deny] [Default delegation mode]
-            allowLocation="true"  [true|false] [Allowed in location tags]
-        />
-        
-        The recommended way to unlock sections is by using a location tag:
-        <location path="Default Web Site" overrideMode="Allow">
-            <system.webServer>
-                <asp />
-            </system.webServer>
-        </location>
-
-    -->
-    <configSections>
-        <sectionGroup name="system.applicationHost">
-            <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-        </sectionGroup>
-
-        <sectionGroup name="system.webServer">
-            <section name="asp" overrideModeDefault="Deny" />
-            <section name="caching" overrideModeDefault="Allow" />
-            <section name="cgi" overrideModeDefault="Deny" />
-            <section name="defaultDocument" overrideModeDefault="Allow" />
-            <section name="directoryBrowse" overrideModeDefault="Allow" />
-            <section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-            <section name="handlers" overrideModeDefault="Deny" />
-            <section name="httpCompression" overrideModeDefault="Allow" />
-            <section name="httpErrors" overrideModeDefault="Allow" />
-            <section name="httpLogging" overrideModeDefault="Deny" />
-            <section name="httpProtocol" overrideModeDefault="Allow" />
-            <section name="httpRedirect" overrideModeDefault="Allow" />
-            <section name="httpTracing" overrideModeDefault="Deny" />
-            <section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
-            <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
-            <section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
-            <section name="odbcLogging" overrideModeDefault="Deny" />
-            <sectionGroup name="security">
-                <section name="access" overrideModeDefault="Deny" />
-                <section name="applicationDependencies" overrideModeDefault="Deny" />
-                <sectionGroup name="authentication">
-                    <section name="anonymousAuthentication" overrideModeDefault="Deny" />
-                    <section name="basicAuthentication" overrideModeDefault="Deny" />
-                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
-                    <section name="digestAuthentication" overrideModeDefault="Deny" />
-                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
-                    <section name="windowsAuthentication" overrideModeDefault="Deny" />
-                </sectionGroup>
-                <section name="authorization" overrideModeDefault="Allow" />
-                <section name="ipSecurity" overrideModeDefault="Deny" />
-                <section name="dynamicIpSecurity" overrideModeDefault="Deny" />
-                <section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
-                <section name="requestFiltering" overrideModeDefault="Allow" />
-            </sectionGroup>
-            <section name="serverRuntime" overrideModeDefault="Deny" />
-            <section name="serverSideInclude" overrideModeDefault="Deny" />
-            <section name="staticContent" overrideModeDefault="Allow" />
-            <sectionGroup name="tracing">
-                <section name="traceFailedRequests" overrideModeDefault="Allow" />
-                <section name="traceProviderDefinitions" overrideModeDefault="Deny" />
-            </sectionGroup>
-            <section name="urlCompression" overrideModeDefault="Allow" />
-            <section name="validation" overrideModeDefault="Allow" />
-            <sectionGroup name="webdav">
-                <section name="globalSettings" overrideModeDefault="Deny" />
-                <section name="authoring" overrideModeDefault="Deny" />
-                <section name="authoringRules" overrideModeDefault="Deny" />
-            </sectionGroup>
-            <sectionGroup name="rewrite">
-                <section name="allowedServerVariables" overrideModeDefault="Deny" />
-                <section name="rules" overrideModeDefault="Allow" />
-                <section name="outboundRules" overrideModeDefault="Allow" />
-                <section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
-                <section name="providers" overrideModeDefault="Allow" />
-                <section name="rewriteMaps" overrideModeDefault="Allow" />
-            </sectionGroup>
-            <section name="webSocket" overrideModeDefault="Deny" />
-        <section name="aspNetCore" overrideModeDefault="Allow" /></sectionGroup>
-    </configSections>
-
-    <configProtectedData>
-        <providers>
-            <add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
-            <add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=" />
-            <add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=" />
-        </providers>
-    </configProtectedData>
-
-    <system.applicationHost>
-
-        <applicationPools>
-            <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
-            <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
-            <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
-            <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
-            <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
-            <applicationPoolDefaults managedRuntimeLoader="v4.0">
-                <processModel />
-            </applicationPoolDefaults>
-        </applicationPools>
-
-        <!--
-
-          The <listenerAdapters> section defines the protocols with which the
-          Windows Process Activation Service (WAS) binds.
-
-        -->
-        <listenerAdapters>
-            <add name="http" />
-        </listenerAdapters>
-
-        <sites>
-            <site name="WebSite1" id="1" serverAutoStart="true">
-                <application path="/">
-                    <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
-                </application>
-                <bindings>
-                    <binding protocol="http" bindingInformation=":8080:localhost" />
-                </bindings>
-            </site>
-            <site name="codeRR.Server.Web" id="2">
-                <application path="/" applicationPool="Clr4IntegratedAppPool">
-                    <virtualDirectory path="/" physicalPath="<#=this.Host.ResolvePath("").Replace("Coderr.Server.Web.Tests", "Coderr.Server.Web") #>" />
-                </application>
-                <application path="/coderr" applicationPool="Clr4IntegratedAppPool">
-                    <virtualDirectory path="/" physicalPath="<#=this.Host.ResolvePath("").Replace("Coderr.Server.Web.Tests", "Coderr.Server.Web") #>" />
-                </application>
-                <bindings>
-                    <binding protocol="http" bindingInformation="*:50473:localhost" />
-                </bindings>
-            </site>
-            <siteDefaults>
-                <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
-                <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
-            </siteDefaults>
-            <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
-            <virtualDirectoryDefaults allowSubDirConfig="true" />
-        </sites>
-
-        <webLimits />
-
-    </system.applicationHost>
-
-    <system.webServer>
-
-        <serverRuntime />
-
-        <asp scriptErrorSentToBrowser="true">
-            <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
-            <limits />
-        </asp>
-
-        <caching enabled="true" enableKernelCache="true">
-        </caching>
-
-        <cgi />
-
-        <defaultDocument enabled="true">
-            <files>
-                <add value="Default.htm" />
-                <add value="Default.asp" />
-                <add value="index.htm" />
-                <add value="index.html" />
-                <add value="iisstart.htm" />
-                <add value="default.aspx" />
-            </files>
-        </defaultDocument>
-
-        <directoryBrowse enabled="false" />
-
-        <fastCgi />
-
-        <!--
-
-          The <globalModules> section defines all native-code modules.
-          To enable a module, specify it in the <modules> section.
-
-        -->
-        <globalModules>
-            <add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
-            <add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
-<!--            <add name="FileCacheModule" image="%IIS_BIN%\cachfile.dll" />  -->
-            <add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
-<!--            <add name="HttpCacheModule" image="%IIS_BIN%\cachhttp.dll" /> -->
-            <add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
-            <add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
-            <add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
-            <add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
-            <add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
-            <add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
-            <add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
-            <add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
-            <add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
-            <add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
-            <add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
-            <add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
-            <add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
-<!--            <add name="DigestAuthenticationModule" image="%IIS_BIN%\authmd5.dll" /> -->
-            <add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
-            <add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
-            <add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
-            <add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
-            <add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
-            <add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
-<!--            <add name="TracingModule" image="%IIS_BIN%\iisetw.dll" /> -->
-            <add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
-            <add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
-            <add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
-            <add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
-            <add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
-            <add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
-<!--            <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
-            <add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
-            <add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
-            <add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
-            <add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
-            <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
-            <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
-            <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
-            <add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
-            <add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
-            <add name="AspNetCoreModule" image="%IIS_BIN%\aspnetcore.dll" />
-        </globalModules>
-
-        <httpCompression directory="%TEMP%\iisexpress\IIS Temporary Compressed Files">
-            <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
-            <dynamicTypes>
-                <add mimeType="text/*" enabled="true" />
-                <add mimeType="message/*" enabled="true" />
-                <add mimeType="application/javascript" enabled="true" />
-                <add mimeType="application/atom+xml" enabled="true" />
-                <add mimeType="application/xaml+xml" enabled="true" />
-                <add mimeType="*/*" enabled="false" />
-            </dynamicTypes>
-            <staticTypes>
-                <add mimeType="text/*" enabled="true" />
-                <add mimeType="message/*" enabled="true" />
-                <add mimeType="image/svg+xml" enabled="true" />
-                <add mimeType="application/javascript" enabled="true" />
-                <add mimeType="application/atom+xml" enabled="true" />
-                <add mimeType="application/xaml+xml" enabled="true" />
-                <add mimeType="*/*" enabled="false" />
-            </staticTypes>
-        </httpCompression>
-
-        <httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
-            <error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
-            <error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
-            <error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
-            <error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
-            <error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
-            <error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
-            <error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
-            <error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
-            <error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
-        </httpErrors>
-
-        <httpLogging dontLog="false" />
-
-        <httpProtocol>
-            <customHeaders>
-                <clear />
-                <add name="X-Powered-By" value="ASP.NET" />
-            </customHeaders>
-            <redirectHeaders>
-                <clear />
-            </redirectHeaders>
-        </httpProtocol>
-
-        <httpRedirect enabled="false" />
-
-        <httpTracing>
-        </httpTracing>
-
-        <isapiFilters>
-            <filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
-            <filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
-            <filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
-            <filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
-            <filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
-        </isapiFilters>
-
-        <odbcLogging />
-
-        <security>
-
-            <access sslFlags="None" />
-
-            <applicationDependencies>
-                <application name="Active Server Pages" groupId="ASP" />
-            </applicationDependencies>
-
-            <authentication>
-
-                <anonymousAuthentication enabled="true" userName="" />
-
-                <basicAuthentication enabled="false" />
-
-                <clientCertificateMappingAuthentication enabled="false" />
-
-                <digestAuthentication enabled="false" />
-
-                <iisClientCertificateMappingAuthentication enabled="false">
-                </iisClientCertificateMappingAuthentication>
-
-                <windowsAuthentication enabled="false">
-                    <providers>
-                        <add value="Negotiate" />
-                        <add value="NTLM" />
-                    </providers>
-                </windowsAuthentication>
-
-            </authentication>
-
-            <authorization>
-                <add accessType="Allow" users="*" />
-            </authorization>
-
-            <ipSecurity allowUnlisted="true" />
-
-            <isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
-                <add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
-                <add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
-                <add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
-                <add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
-            </isapiCgiRestriction>
-
-            <requestFiltering>
-                <fileExtensions allowUnlisted="true" applyToWebDAV="true">
-                    <add fileExtension=".asa" allowed="false" />
-                    <add fileExtension=".asax" allowed="false" />
-                    <add fileExtension=".ascx" allowed="false" />
-                    <add fileExtension=".master" allowed="false" />
-                    <add fileExtension=".skin" allowed="false" />
-                    <add fileExtension=".browser" allowed="false" />
-                    <add fileExtension=".sitemap" allowed="false" />
-                    <add fileExtension=".config" allowed="false" />
-                    <add fileExtension=".cs" allowed="false" />
-                    <add fileExtension=".csproj" allowed="false" />
-                    <add fileExtension=".vb" allowed="false" />
-                    <add fileExtension=".vbproj" allowed="false" />
-                    <add fileExtension=".webinfo" allowed="false" />
-                    <add fileExtension=".licx" allowed="false" />
-                    <add fileExtension=".resx" allowed="false" />
-                    <add fileExtension=".resources" allowed="false" />
-                    <add fileExtension=".mdb" allowed="false" />
-                    <add fileExtension=".vjsproj" allowed="false" />
-                    <add fileExtension=".java" allowed="false" />
-                    <add fileExtension=".jsl" allowed="false" />
-                    <add fileExtension=".ldb" allowed="false" />
-                    <add fileExtension=".dsdgm" allowed="false" />
-                    <add fileExtension=".ssdgm" allowed="false" />
-                    <add fileExtension=".lsad" allowed="false" />
-                    <add fileExtension=".ssmap" allowed="false" />
-                    <add fileExtension=".cd" allowed="false" />
-                    <add fileExtension=".dsprototype" allowed="false" />
-                    <add fileExtension=".lsaprototype" allowed="false" />
-                    <add fileExtension=".sdm" allowed="false" />
-                    <add fileExtension=".sdmDocument" allowed="false" />
-                    <add fileExtension=".mdf" allowed="false" />
-                    <add fileExtension=".ldf" allowed="false" />
-                    <add fileExtension=".ad" allowed="false" />
-                    <add fileExtension=".dd" allowed="false" />
-                    <add fileExtension=".ldd" allowed="false" />
-                    <add fileExtension=".sd" allowed="false" />
-                    <add fileExtension=".adprototype" allowed="false" />
-                    <add fileExtension=".lddprototype" allowed="false" />
-                    <add fileExtension=".exclude" allowed="false" />
-                    <add fileExtension=".refresh" allowed="false" />
-                    <add fileExtension=".compiled" allowed="false" />
-                    <add fileExtension=".msgx" allowed="false" />
-                    <add fileExtension=".vsdisco" allowed="false" />
-                    <add fileExtension=".rules" allowed="false" />
-                </fileExtensions>
-                <verbs allowUnlisted="true" applyToWebDAV="true" />
-                <hiddenSegments applyToWebDAV="true">
-                    <add segment="web.config" />
-                    <add segment="bin" />
-                    <add segment="App_code" />
-                    <add segment="App_GlobalResources" />
-                    <add segment="App_LocalResources" />
-                    <add segment="App_WebReferences" />
-                    <add segment="App_Data" />
-                    <add segment="App_Browsers" />
-                </hiddenSegments>
-            </requestFiltering>
-
-        </security>
-
-        <serverSideInclude ssiExecDisable="false" />
-
-        <staticContent lockAttributes="isDocFooterFileName">
-            <mimeMap fileExtension=".323" mimeType="text/h323" />
-            <mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
-            <mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
-            <mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
-            <mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
-            <mimeMap fileExtension=".aac" mimeType="audio/aac" />
-            <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
-            <mimeMap fileExtension=".accde" mimeType="application/msaccess" />
-            <mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
-            <mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
-            <mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
-            <mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
-            <mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ai" mimeType="application/postscript" />
-            <mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
-            <mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
-            <mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
-            <mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
-            <mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
-            <mimeMap fileExtension=".art" mimeType="image/x-jg" />
-            <mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
-            <mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".asm" mimeType="text/plain" />
-            <mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
-            <mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
-            <mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
-            <mimeMap fileExtension=".au" mimeType="audio/basic" />
-            <mimeMap fileExtension=".avi" mimeType="video/msvideo" />
-            <mimeMap fileExtension=".axs" mimeType="application/olescript" />
-            <mimeMap fileExtension=".bas" mimeType="text/plain" />
-            <mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
-            <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".bmp" mimeType="image/bmp" />
-            <mimeMap fileExtension=".c" mimeType="text/plain" />
-            <mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
-            <mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
-            <mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
-            <mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
-            <mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
-            <mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
-            <mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
-            <mimeMap fileExtension=".cnf" mimeType="text/plain" />
-            <mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
-            <mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
-            <mimeMap fileExtension=".cpp" mimeType="text/plain" />
-            <mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
-            <mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
-            <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
-            <mimeMap fileExtension=".csh" mimeType="application/x-csh" />
-            <mimeMap fileExtension=".css" mimeType="text/css" />
-            <mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".dcr" mimeType="application/x-director" />
-            <mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
-            <mimeMap fileExtension=".dib" mimeType="image/bmp" />
-            <mimeMap fileExtension=".dir" mimeType="application/x-director" />
-            <mimeMap fileExtension=".disco" mimeType="text/xml" />
-            <mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
-            <mimeMap fileExtension=".dll.config" mimeType="text/xml" />
-            <mimeMap fileExtension=".dlm" mimeType="text/dlm" />
-            <mimeMap fileExtension=".doc" mimeType="application/msword" />
-            <mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
-            <mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
-            <mimeMap fileExtension=".dot" mimeType="application/msword" />
-            <mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
-            <mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
-            <mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".dtd" mimeType="text/xml" />
-            <mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
-            <mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
-            <mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
-            <mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".dxr" mimeType="application/x-director" />
-            <mimeMap fileExtension=".eml" mimeType="message/rfc822" />
-            <mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
-            <mimeMap fileExtension=".eps" mimeType="application/postscript" />
-            <mimeMap fileExtension=".etx" mimeType="text/x-setext" />
-            <mimeMap fileExtension=".evy" mimeType="application/envoy" />
-            <mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".exe.config" mimeType="text/xml" />
-            <mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
-            <mimeMap fileExtension=".fif" mimeType="application/fractals" />
-            <mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".flv" mimeType="video/x-flv" />
-            <mimeMap fileExtension=".gif" mimeType="image/gif" />
-            <mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
-            <mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
-            <mimeMap fileExtension=".h" mimeType="text/plain" />
-            <mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
-            <mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
-            <mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
-            <mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
-            <mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
-            <mimeMap fileExtension=".hta" mimeType="application/hta" />
-            <mimeMap fileExtension=".htc" mimeType="text/x-component" />
-            <mimeMap fileExtension=".htm" mimeType="text/html" />
-            <mimeMap fileExtension=".html" mimeType="text/html" />
-            <mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
-            <mimeMap fileExtension=".hxt" mimeType="text/html" />
-            <mimeMap fileExtension=".ico" mimeType="image/x-icon" />
-            <mimeMap fileExtension=".ics" mimeType="text/calendar" />
-            <mimeMap fileExtension=".ief" mimeType="image/ief" />
-            <mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
-            <mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
-            <mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
-            <mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
-            <mimeMap fileExtension=".jar" mimeType="application/java-archive" />
-            <mimeMap fileExtension=".java" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
-            <mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
-            <mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
-            <mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
-            <mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
-            <mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
-            <mimeMap fileExtension=".js" mimeType="application/javascript" />
-            <mimeMap fileExtension=".json" mimeType="application/json" />
-            <mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
-            <mimeMap fileExtension=".jsx" mimeType="text/jscript" />
-            <mimeMap fileExtension=".latex" mimeType="application/x-latex" />
-            <mimeMap fileExtension=".less" mimeType="text/css" />
-            <mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
-            <mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
-            <mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
-            <mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
-            <mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
-            <mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
-            <mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
-            <mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
-            <mimeMap fileExtension=".m4v" mimeType="video/mp4" />
-            <mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
-            <mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
-            <mimeMap fileExtension=".map" mimeType="text/plain" />
-            <mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
-            <mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
-            <mimeMap fileExtension=".mht" mimeType="message/rfc822" />
-            <mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
-            <mimeMap fileExtension=".mid" mimeType="audio/mid" />
-            <mimeMap fileExtension=".midi" mimeType="audio/mid" />
-            <mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
-            <mimeMap fileExtension=".mno" mimeType="text/xml" />
-            <mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
-            <mimeMap fileExtension=".mov" mimeType="video/quicktime" />
-            <mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
-            <mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
-            <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
-            <mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
-            <mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
-            <mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
-            <mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
-            <mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
-            <mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
-            <mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
-            <mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
-            <mimeMap fileExtension=".nws" mimeType="message/rfc822" />
-            <mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".oda" mimeType="application/oda" />
-            <mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
-            <mimeMap fileExtension=".ods" mimeType="application/oleobject" />
-            <mimeMap fileExtension=".oga" mimeType="audio/ogg" />
-            <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
-            <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
-            <mimeMap fileExtension=".one" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onea" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
-            <mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
-            <mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
-            <mimeMap fileExtension=".otf" mimeType="font/otf" />
-            <mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
-            <mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
-            <mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
-            <mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
-            <mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
-            <mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
-            <mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
-            <mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
-            <mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pdf" mimeType="application/pdf" />
-            <mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
-            <mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
-            <mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
-            <mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
-            <mimeMap fileExtension=".png" mimeType="image/png" />
-            <mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
-            <mimeMap fileExtension=".pnz" mimeType="image/png" />
-            <mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
-            <mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
-            <mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
-            <mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
-            <mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
-            <mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
-            <mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
-            <mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
-            <mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
-            <mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
-            <mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
-            <mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
-            <mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ps" mimeType="application/postscript" />
-            <mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
-            <mimeMap fileExtension=".qt" mimeType="video/quicktime" />
-            <mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
-            <mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
-            <mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
-            <mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
-            <mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
-            <mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
-            <mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
-            <mimeMap fileExtension=".rmi" mimeType="audio/mid" />
-            <mimeMap fileExtension=".roff" mimeType="application/x-troff" />
-            <mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
-            <mimeMap fileExtension=".rtf" mimeType="application/rtf" />
-            <mimeMap fileExtension=".rtx" mimeType="text/richtext" />
-            <mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
-            <mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
-            <mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
-            <mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
-            <mimeMap fileExtension=".sgml" mimeType="text/sgml" />
-            <mimeMap fileExtension=".sh" mimeType="application/x-sh" />
-            <mimeMap fileExtension=".shar" mimeType="application/x-shar" />
-            <mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
-            <mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
-            <mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
-            <mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
-            <mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
-            <mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
-            <mimeMap fileExtension=".snd" mimeType="audio/basic" />
-            <mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
-            <mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
-            <mimeMap fileExtension=".spx" mimeType="audio/ogg" />
-            <mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
-            <mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
-            <mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
-            <mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
-            <mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
-            <mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
-            <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
-            <mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
-            <mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
-            <mimeMap fileExtension=".t" mimeType="application/x-troff" />
-            <mimeMap fileExtension=".tar" mimeType="application/x-tar" />
-            <mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
-            <mimeMap fileExtension=".tex" mimeType="application/x-tex" />
-            <mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
-            <mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
-            <mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
-            <mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
-            <mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".tif" mimeType="image/tiff" />
-            <mimeMap fileExtension=".tiff" mimeType="image/tiff" />
-            <mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".tr" mimeType="application/x-troff" />
-            <mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
-            <mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
-            <mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
-            <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
-            <mimeMap fileExtension=".txt" mimeType="text/plain" />
-            <mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".uls" mimeType="text/iuls" />
-            <mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
-            <mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
-            <mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
-            <mimeMap fileExtension=".vcs" mimeType="text/plain" />
-            <mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
-            <mimeMap fileExtension=".vml" mimeType="text/xml" />
-            <mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
-            <mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
-            <mimeMap fileExtension=".wav" mimeType="audio/wav" />
-            <mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
-            <mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
-            <mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
-            <mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
-            <mimeMap fileExtension=".webm" mimeType="video/webm" />
-            <mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
-            <mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
-            <mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
-            <mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
-            <mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
-            <mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
-            <mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
-            <mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
-            <mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
-            <mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
-            <mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
-            <mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
-            <mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
-            <mimeMap fileExtension=".woff" mimeType="font/x-woff" />
-            <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
-            <mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
-            <mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
-            <mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".wsdl" mimeType="text/xml" />
-            <mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
-            <mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
-            <mimeMap fileExtension=".x" mimeType="application/directx" />
-            <mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
-            <mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
-            <mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
-            <mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
-            <mimeMap fileExtension=".xdr" mimeType="text/plain" />
-            <mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
-            <mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
-            <mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
-            <mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
-            <mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
-            <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
-            <mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
-            <mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
-            <mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
-            <mimeMap fileExtension=".xml" mimeType="text/xml" />
-            <mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
-            <mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
-            <mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
-            <mimeMap fileExtension=".xsd" mimeType="text/xml" />
-            <mimeMap fileExtension=".xsf" mimeType="text/xml" />
-            <mimeMap fileExtension=".xsl" mimeType="text/xml" />
-            <mimeMap fileExtension=".xslt" mimeType="text/xml" />
-            <mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
-            <mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
-            <mimeMap fileExtension=".z" mimeType="application/x-compress" />
-            <mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
-        </staticContent>
-
-        <tracing>
-
-             <traceProviderDefinitions>
-                <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
-                    <areas>
-                        <clear />
-                        <add name="Authentication" value="2" />
-                        <add name="Security" value="4" />
-                        <add name="Filter" value="8" />
-                        <add name="StaticFile" value="16" />
-                        <add name="CGI" value="32" />
-                        <add name="Compression" value="64" />
-                        <add name="Cache" value="128" />
-                        <add name="RequestNotifications" value="256" />
-                        <add name="Module" value="512" />
-                        <add name="Rewrite" value="1024" />
-                        <add name="FastCGI" value="4096" />
-                        <add name="WebSocket" value="16384" />
-                    </areas>
-                </add>
-                <add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
-                    <areas>
-                        <clear />
-                    </areas>
-                </add>
-                <add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
-                    <areas>
-                        <clear />
-                    </areas>
-                </add>
-                <add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
-                    <areas>
-                        <add name="Infrastructure" value="1" />
-                        <add name="Module" value="2" />
-                        <add name="Page" value="4" />
-                        <add name="AppServices" value="8" />
-                    </areas>
-                </add>
-            </traceProviderDefinitions>
-
-            <traceFailedRequests>
-                <add path="*">
-                    <traceAreas>
-                        <add provider="ASP" verbosity="Verbose" />
-                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
-                        <add provider="ISAPI Extension" verbosity="Verbose" />
-                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
-                    </traceAreas>
-                    <failureDefinitions statusCodes="200-999" />
-                </add>
-            </traceFailedRequests>
-
-        </tracing>
-
-        <urlCompression />
-
-        <validation />
-        <webdav>
-            <globalSettings>
-                <propertyStores>
-                    <add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
-                </propertyStores>
-                <lockStores>
-                    <add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
-                </lockStores>
-
-            </globalSettings>
-            <authoring>
-                <locks enabled="true" lockStore="webdav_simple_lock" />
-            </authoring>
-            <authoringRules />
-        </webdav>
-        <webSocket />
-        <applicationInitialization />
-
-    </system.webServer>
-    <location path="" overrideMode="Allow">
-        <system.webServer>
-            <modules>
-                <add name="IsapiFilterModule" lockItem="true" />
-                <add name="BasicAuthenticationModule" lockItem="true" />
-                <add name="IsapiModule" lockItem="true" />
-                <add name="HttpLoggingModule" lockItem="true" />
-                <!--
-                <add name="HttpCacheModule" lockItem="true" />
--->
-                <add name="DynamicCompressionModule" lockItem="true" />
-                <add name="StaticCompressionModule" lockItem="true" />
-                <add name="DefaultDocumentModule" lockItem="true" />
-                <add name="DirectoryListingModule" lockItem="true" />
-
-                <add name="ProtocolSupportModule" lockItem="true" />
-                <add name="HttpRedirectionModule" lockItem="true" />
-                <add name="ServerSideIncludeModule" lockItem="true" />
-                <add name="StaticFileModule" lockItem="true" />
-                <add name="AnonymousAuthenticationModule" lockItem="true" />
-                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
-                <add name="UrlAuthorizationModule" lockItem="true" />
-                <add name="WindowsAuthenticationModule" lockItem="true" />
-                <!--
-                <add name="DigestAuthenticationModule" lockItem="true" />
--->
-                <add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
-                <add name="WebMatrixSupportModule" lockItem="true" />
-                <add name="IpRestrictionModule" lockItem="true" />
-                <add name="DynamicIpRestrictionModule" lockItem="true" />
-                <add name="RequestFilteringModule" lockItem="true" />
-                <add name="CustomLoggingModule" lockItem="true" />
-                <add name="CustomErrorModule" lockItem="true" />
-                <add name="FailedRequestsTracingModule" lockItem="true" />
-                <add name="CgiModule" lockItem="true" />
-                <add name="FastCgiModule" lockItem="true" />
-                <!--                <add name="WebDAVModule" /> -->
-                <add name="RewriteModule" />
-                <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
-                <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
-                <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
-                <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
-                <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
-                <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
-                <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
-                <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
-                <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
-                <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
-                <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
-                <add name="ConfigurationValidationModule" lockItem="true" />
-                <add name="WebSocketModule" lockItem="true" />
-                <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
-                <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
-                <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
-                <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
-                <add name="ApplicationInitializationModule" lockItem="true" />
-                <add name="AspNetCoreModule" lockItem="true" />
-            </modules>
-            <handlers accessPolicy="Read, Script">
-                <!--                <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
-                <add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
-                <add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
-                <add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
-                <add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
-                <add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
-                <add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
-                <add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
-                <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
-                <add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
-                <add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
-                <add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
-                <add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
-                <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
-                <add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
-                <add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
-                <add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
-                <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
-                <add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
-                <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
-                <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
-                <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
-                <add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
-                <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
-                <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
-                <add name="ExtensionlessUrl-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
-                <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
-                <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
-            </handlers>
-        </system.webServer>
-    </location>
-</configuration>
diff --git a/src/Server/Coderr.Server.WebPush/Coderr.Server.WebPush.csproj b/src/Server/Coderr.Server.WebPush/Coderr.Server.WebPush.csproj
deleted file mode 100644
index 90b84a0a..00000000
--- a/src/Server/Coderr.Server.WebPush/Coderr.Server.WebPush.csproj
+++ /dev/null
@@ -1,19 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.0</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
-    <PackageReference Include="Portable.BouncyCastle" Version="1.8.9" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
-  </ItemGroup>
-
-</Project>
diff --git a/src/Server/Coderr.Server.WebSite/appsettings.Development.json b/src/Server/Coderr.Server.WebSite/appsettings.Development.json
deleted file mode 100644
index 2d1b8f79..00000000
--- a/src/Server/Coderr.Server.WebSite/appsettings.Development.json
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿{
-  "Logging": {
-    "IncludeScopes": false,
-    "LogLevel": {
-      "Default": "Debug",
-      "System": "Debug",
-      "Microsoft": "Debug"
-    }
-  }
-}
diff --git a/src/Server/Coderr.Server.WebSite/publish_upgrade.cmd b/src/Server/Coderr.Server.WebSite/publish_upgrade.cmd
deleted file mode 100644
index a7e257df..00000000
--- a/src/Server/Coderr.Server.WebSite/publish_upgrade.cmd
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-call publish_clean.cmd
-del /q bin\Release\PublishOutput\log4net*.config
-del /q bin\Release\PublishOutput\appsettings*.json
-del /q bin\Release\PublishOutput\web.config
diff --git a/src/Server/Coderr.Server.sln b/src/Server/Coderr.Server.sln
index a7dc7c6d..1479c860 100644
--- a/src/Server/Coderr.Server.sln
+++ b/src/Server/Coderr.Server.sln
@@ -1,181 +1,203 @@
 ﻿
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 17
-VisualStudioVersion = 17.0.32112.339
+VisualStudioVersion = 17.6.33829.357
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.App", "Coderr.Server.App\Coderr.Server.App.csproj", "{5EF42A74-9323-49FA-A1F6-974D6DE77202}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Api", "App\Coderr.Server.Api\Coderr.Server.Api.csproj", "{01D738C7-012E-40CB-A97D-30A13717F91D}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Api", "Coderr.Server.Api\Coderr.Server.Api.csproj", "{FC331A95-FCA4-4764-8004-0884665DD01F}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App", "App", "{B1F1EABA-8579-487D-A6C2-946DB140A18D}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.SqlServer", "Coderr.Server.SqlServer\Coderr.Server.SqlServer.csproj", "{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Api.Client", "App\Coderr.Server.Api.Client\Coderr.Server.Api.Client.csproj", "{30502908-C48F-4EB7-B4E1-52137B0B3413}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.SqlServer.Tests", "Coderr.Server.SqlServer.Tests\Coderr.Server.SqlServer.Tests.csproj", "{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Api.Client.Tests", "App\Coderr.Server.Api.Client.Tests\Coderr.Server.Api.Client.Tests.csproj", "{E637E4E4-891D-43CC-A393-E00D81594458}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.ReportAnalyzer", "Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj", "{29FBF805-CAFD-426A-A576-9756D375BF18}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.App", "App\Coderr.Server.App\Coderr.Server.App.csproj", "{A4E66B79-0103-40F9-9A54-A5D3024A84B5}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.App.Tests", "Coderr.Server.App.Tests\Coderr.Server.App.Tests.csproj", "{9031CF08-2778-487B-8E11-2F45714875D1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.App.Tests", "App\Coderr.Server.App.Tests\Coderr.Server.App.Tests.csproj", "{B3D93343-C9B5-4DE2-B987-F7E8D1E41C6A}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Infrastructure", "Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj", "{A78A50DA-C9D7-47F2-8528-D7EE39D91924}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Domain", "App\Coderr.Server.Domain\Coderr.Server.Domain.csproj", "{6D18A443-C6E7-4106-9091-BC4F2BFD0B73}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Api.Client", "Coderr.Server.Api.Client\Coderr.Server.Api.Client.csproj", "{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.WebPush", "App\Coderr.Server.WebPush\Coderr.Server.WebPush.csproj", "{205732B6-48B8-4E6E-B76C-B5E9B64AB351}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Api.Client.Tests", "Coderr.Server.Api.Client.Tests\Coderr.Server.Api.Client.Tests.csproj", "{62989500-31BC-44FA-97CA-84F484C6F1AA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.WebSite", "App\Coderr.Server.WebSite\Coderr.Server.WebSite.csproj", "{30AB7239-5097-48B1-BD72-35D203A8B756}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.ReportAnalyzer.Tests", "Coderr.Server.ReportAnalyzer.Tests\Coderr.Server.ReportAnalyzer.Tests.csproj", "{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{E136D4CD-8777-4573-9C0F-5EEE2D2B1EDE}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Abstractions", "Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj", "{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Infrastructure", "Common\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj", "{F222A24E-EEB4-4DB0-8929-49E29D93A2C3}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.ReportAnalyzer.Abstractions", "Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj", "{CA835337-B8F6-447F-8144-F69977363C45}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Infrastructure.Tests", "Common\Coderr.Server.Infrastructure.Tests\Coderr.Server.Infrastructure.Tests.csproj", "{6DB61C04-F8CB-4AC8-BF48-774EA6494D2E}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Domain", "Coderr.Server.Domain\Coderr.Server.Domain.csproj", "{2971156C-327E-4EBD-BDF8-91772451F359}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Data", "Data", "{3CC7F8DF-6F9A-48D2-B817-D397A2DFA481}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.WebSite", "Coderr.Server.WebSite\Coderr.Server.WebSite.csproj", "{537FEFB2-76EA-48F1-99D6-BA3DAACED337}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.SqlServer", "Data\Coderr.Server.SqlServer\Coderr.Server.SqlServer.csproj", "{2FA1C0DF-A2EC-4A4F-A77B-20CCF8EB36B0}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.WebPush", "Coderr.Server.WebPush\Coderr.Server.WebPush.csproj", "{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.SqlServer.Tests", "Data\Coderr.Server.SqlServer.Tests\Coderr.Server.SqlServer.Tests.csproj", "{9BD4B4BA-7DF2-476A-B509-D238EE5A84F1}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Infrastructure.Tests", "Coderr.Server.Infrastructure.Tests\Coderr.Server.Infrastructure.Tests.csproj", "{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{4CE81302-C06D-46A8-8CD3-268285613673}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Plugins.AzureDevOps.App", "Plugins\Coderr.Server.Plugins.AzureDevOps\Coderr.Server.Plugins.AzureDevOps.App.csproj", "{7EBEE0E2-5935-4C2D-85C4-ABAC92916B9F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Plugins.AzureDevOps.Api", "Plugins\Coderr.Server.Plugins.AzureDevOps.Api\Coderr.Server.Plugins.AzureDevOps.Api.csproj", "{7F429F8D-35AF-4F58-BD33-4A98D76032D0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Reporting", "Reporting", "{CB6F7389-365F-4109-A61F-8B3D192F12C1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.ReportAnalyzer", "Reporting\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj", "{3601F340-63F6-4960-AC6C-3549F299D257}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.ReportAnalyzer.Abstractions", "Reporting\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj", "{8DD4F5C9-E375-43C0-88DF-E639A94AE5D1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.ReportAnalyzer.Tests", "Reporting\Coderr.Server.ReportAnalyzer.Tests\Coderr.Server.ReportAnalyzer.Tests.csproj", "{88BD7076-F366-403C-9F34-80F17620AFE0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Plugins.AzureDevOps.SqlServer", "..\Plugins\Coderr.Server.Plugins.AzureDevOps.SqlServer\Coderr.Server.Plugins.AzureDevOps.SqlServer.csproj", "{35D442DA-A1CD-44A5-B066-73550F64479C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Coderr.Server.Abstractions", "Common\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj", "{175E0833-C4A1-4573-9939-9E21C8215DE8}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Premise|Any CPU = Premise|Any CPU
-		PremiseDebug|Any CPU = PremiseDebug|Any CPU
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{5EF42A74-9323-49FA-A1F6-974D6DE77202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{5EF42A74-9323-49FA-A1F6-974D6DE77202}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{5EF42A74-9323-49FA-A1F6-974D6DE77202}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{5EF42A74-9323-49FA-A1F6-974D6DE77202}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{5EF42A74-9323-49FA-A1F6-974D6DE77202}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{5EF42A74-9323-49FA-A1F6-974D6DE77202}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{5EF42A74-9323-49FA-A1F6-974D6DE77202}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{5EF42A74-9323-49FA-A1F6-974D6DE77202}.Release|Any CPU.Build.0 = Release|Any CPU
-		{FC331A95-FCA4-4764-8004-0884665DD01F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{FC331A95-FCA4-4764-8004-0884665DD01F}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{FC331A95-FCA4-4764-8004-0884665DD01F}.Premise|Any CPU.ActiveCfg = Release|Any CPU
-		{FC331A95-FCA4-4764-8004-0884665DD01F}.Premise|Any CPU.Build.0 = Release|Any CPU
-		{FC331A95-FCA4-4764-8004-0884665DD01F}.PremiseDebug|Any CPU.ActiveCfg = Debug|Any CPU
-		{FC331A95-FCA4-4764-8004-0884665DD01F}.PremiseDebug|Any CPU.Build.0 = Debug|Any CPU
-		{FC331A95-FCA4-4764-8004-0884665DD01F}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{FC331A95-FCA4-4764-8004-0884665DD01F}.Release|Any CPU.Build.0 = Release|Any CPU
-		{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B967BEEA-CDDD-4A83-A4F2-1C946099ED51}.Release|Any CPU.Build.0 = Release|Any CPU
-		{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{502E6EC1-FF7D-4E1A-846E-D0E8A4EE9705}.Release|Any CPU.Build.0 = Release|Any CPU
-		{29FBF805-CAFD-426A-A576-9756D375BF18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{29FBF805-CAFD-426A-A576-9756D375BF18}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{29FBF805-CAFD-426A-A576-9756D375BF18}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{29FBF805-CAFD-426A-A576-9756D375BF18}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{29FBF805-CAFD-426A-A576-9756D375BF18}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{29FBF805-CAFD-426A-A576-9756D375BF18}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{29FBF805-CAFD-426A-A576-9756D375BF18}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{29FBF805-CAFD-426A-A576-9756D375BF18}.Release|Any CPU.Build.0 = Release|Any CPU
-		{9031CF08-2778-487B-8E11-2F45714875D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{9031CF08-2778-487B-8E11-2F45714875D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{9031CF08-2778-487B-8E11-2F45714875D1}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{9031CF08-2778-487B-8E11-2F45714875D1}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{9031CF08-2778-487B-8E11-2F45714875D1}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{9031CF08-2778-487B-8E11-2F45714875D1}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{9031CF08-2778-487B-8E11-2F45714875D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{9031CF08-2778-487B-8E11-2F45714875D1}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A78A50DA-C9D7-47F2-8528-D7EE39D91924}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A78A50DA-C9D7-47F2-8528-D7EE39D91924}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A78A50DA-C9D7-47F2-8528-D7EE39D91924}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{A78A50DA-C9D7-47F2-8528-D7EE39D91924}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{A78A50DA-C9D7-47F2-8528-D7EE39D91924}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{A78A50DA-C9D7-47F2-8528-D7EE39D91924}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{A78A50DA-C9D7-47F2-8528-D7EE39D91924}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A78A50DA-C9D7-47F2-8528-D7EE39D91924}.Release|Any CPU.Build.0 = Release|Any CPU
-		{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{017F8863-3DE0-4AD2-9ED3-5ACB87BBBCD0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{62989500-31BC-44FA-97CA-84F484C6F1AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{62989500-31BC-44FA-97CA-84F484C6F1AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{62989500-31BC-44FA-97CA-84F484C6F1AA}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{62989500-31BC-44FA-97CA-84F484C6F1AA}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{62989500-31BC-44FA-97CA-84F484C6F1AA}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{62989500-31BC-44FA-97CA-84F484C6F1AA}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{62989500-31BC-44FA-97CA-84F484C6F1AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{62989500-31BC-44FA-97CA-84F484C6F1AA}.Release|Any CPU.Build.0 = Release|Any CPU
-		{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}.Premise|Any CPU.ActiveCfg = Release|Any CPU
-		{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}.Premise|Any CPU.Build.0 = Release|Any CPU
-		{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}.PremiseDebug|Any CPU.ActiveCfg = Debug|Any CPU
-		{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}.PremiseDebug|Any CPU.Build.0 = Debug|Any CPU
-		{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{421C787A-079B-4A88-A6C5-1ACD9A7C6A7E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{47A845A0-FCC2-46F1-A553-0F7110BDDBEA}.Release|Any CPU.Build.0 = Release|Any CPU
-		{CA835337-B8F6-447F-8144-F69977363C45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{CA835337-B8F6-447F-8144-F69977363C45}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{CA835337-B8F6-447F-8144-F69977363C45}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{CA835337-B8F6-447F-8144-F69977363C45}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{CA835337-B8F6-447F-8144-F69977363C45}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{CA835337-B8F6-447F-8144-F69977363C45}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{CA835337-B8F6-447F-8144-F69977363C45}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{CA835337-B8F6-447F-8144-F69977363C45}.Release|Any CPU.Build.0 = Release|Any CPU
-		{2971156C-327E-4EBD-BDF8-91772451F359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2971156C-327E-4EBD-BDF8-91772451F359}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{2971156C-327E-4EBD-BDF8-91772451F359}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
-		{2971156C-327E-4EBD-BDF8-91772451F359}.Premise|Any CPU.Build.0 = Premise|Any CPU
-		{2971156C-327E-4EBD-BDF8-91772451F359}.PremiseDebug|Any CPU.ActiveCfg = Premise|Any CPU
-		{2971156C-327E-4EBD-BDF8-91772451F359}.PremiseDebug|Any CPU.Build.0 = Premise|Any CPU
-		{2971156C-327E-4EBD-BDF8-91772451F359}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{2971156C-327E-4EBD-BDF8-91772451F359}.Release|Any CPU.Build.0 = Release|Any CPU
-		{537FEFB2-76EA-48F1-99D6-BA3DAACED337}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{537FEFB2-76EA-48F1-99D6-BA3DAACED337}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{537FEFB2-76EA-48F1-99D6-BA3DAACED337}.Premise|Any CPU.ActiveCfg = Release|Any CPU
-		{537FEFB2-76EA-48F1-99D6-BA3DAACED337}.Premise|Any CPU.Build.0 = Release|Any CPU
-		{537FEFB2-76EA-48F1-99D6-BA3DAACED337}.PremiseDebug|Any CPU.ActiveCfg = Debug|Any CPU
-		{537FEFB2-76EA-48F1-99D6-BA3DAACED337}.PremiseDebug|Any CPU.Build.0 = Debug|Any CPU
-		{537FEFB2-76EA-48F1-99D6-BA3DAACED337}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{537FEFB2-76EA-48F1-99D6-BA3DAACED337}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}.Premise|Any CPU.ActiveCfg = Release|Any CPU
-		{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}.Premise|Any CPU.Build.0 = Release|Any CPU
-		{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}.PremiseDebug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}.PremiseDebug|Any CPU.Build.0 = Debug|Any CPU
-		{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{EB78BA49-5596-4B1C-89C6-E2375FDF9BC5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
-		{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}.Premise|Any CPU.Build.0 = Debug|Any CPU
-		{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}.PremiseDebug|Any CPU.ActiveCfg = Debug|Any CPU
-		{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}.PremiseDebug|Any CPU.Build.0 = Debug|Any CPU
-		{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{ACC6BA6C-FA0B-4C5B-A7D2-B00D37EF2BC7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{01D738C7-012E-40CB-A97D-30A13717F91D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{01D738C7-012E-40CB-A97D-30A13717F91D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{01D738C7-012E-40CB-A97D-30A13717F91D}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
+		{01D738C7-012E-40CB-A97D-30A13717F91D}.Premise|Any CPU.Build.0 = Debug|Any CPU
+		{01D738C7-012E-40CB-A97D-30A13717F91D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{01D738C7-012E-40CB-A97D-30A13717F91D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{30502908-C48F-4EB7-B4E1-52137B0B3413}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{30502908-C48F-4EB7-B4E1-52137B0B3413}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{30502908-C48F-4EB7-B4E1-52137B0B3413}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{30502908-C48F-4EB7-B4E1-52137B0B3413}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{30502908-C48F-4EB7-B4E1-52137B0B3413}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{30502908-C48F-4EB7-B4E1-52137B0B3413}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E637E4E4-891D-43CC-A393-E00D81594458}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E637E4E4-891D-43CC-A393-E00D81594458}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E637E4E4-891D-43CC-A393-E00D81594458}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{E637E4E4-891D-43CC-A393-E00D81594458}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{E637E4E4-891D-43CC-A393-E00D81594458}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E637E4E4-891D-43CC-A393-E00D81594458}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A4E66B79-0103-40F9-9A54-A5D3024A84B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A4E66B79-0103-40F9-9A54-A5D3024A84B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A4E66B79-0103-40F9-9A54-A5D3024A84B5}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{A4E66B79-0103-40F9-9A54-A5D3024A84B5}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{A4E66B79-0103-40F9-9A54-A5D3024A84B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A4E66B79-0103-40F9-9A54-A5D3024A84B5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B3D93343-C9B5-4DE2-B987-F7E8D1E41C6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B3D93343-C9B5-4DE2-B987-F7E8D1E41C6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B3D93343-C9B5-4DE2-B987-F7E8D1E41C6A}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{B3D93343-C9B5-4DE2-B987-F7E8D1E41C6A}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{B3D93343-C9B5-4DE2-B987-F7E8D1E41C6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B3D93343-C9B5-4DE2-B987-F7E8D1E41C6A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6D18A443-C6E7-4106-9091-BC4F2BFD0B73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D18A443-C6E7-4106-9091-BC4F2BFD0B73}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6D18A443-C6E7-4106-9091-BC4F2BFD0B73}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{6D18A443-C6E7-4106-9091-BC4F2BFD0B73}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{6D18A443-C6E7-4106-9091-BC4F2BFD0B73}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6D18A443-C6E7-4106-9091-BC4F2BFD0B73}.Release|Any CPU.Build.0 = Release|Any CPU
+		{205732B6-48B8-4E6E-B76C-B5E9B64AB351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{205732B6-48B8-4E6E-B76C-B5E9B64AB351}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{205732B6-48B8-4E6E-B76C-B5E9B64AB351}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
+		{205732B6-48B8-4E6E-B76C-B5E9B64AB351}.Premise|Any CPU.Build.0 = Debug|Any CPU
+		{205732B6-48B8-4E6E-B76C-B5E9B64AB351}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{205732B6-48B8-4E6E-B76C-B5E9B64AB351}.Release|Any CPU.Build.0 = Release|Any CPU
+		{30AB7239-5097-48B1-BD72-35D203A8B756}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{30AB7239-5097-48B1-BD72-35D203A8B756}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{30AB7239-5097-48B1-BD72-35D203A8B756}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
+		{30AB7239-5097-48B1-BD72-35D203A8B756}.Premise|Any CPU.Build.0 = Debug|Any CPU
+		{30AB7239-5097-48B1-BD72-35D203A8B756}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{30AB7239-5097-48B1-BD72-35D203A8B756}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F222A24E-EEB4-4DB0-8929-49E29D93A2C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F222A24E-EEB4-4DB0-8929-49E29D93A2C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F222A24E-EEB4-4DB0-8929-49E29D93A2C3}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{F222A24E-EEB4-4DB0-8929-49E29D93A2C3}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{F222A24E-EEB4-4DB0-8929-49E29D93A2C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F222A24E-EEB4-4DB0-8929-49E29D93A2C3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6DB61C04-F8CB-4AC8-BF48-774EA6494D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6DB61C04-F8CB-4AC8-BF48-774EA6494D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6DB61C04-F8CB-4AC8-BF48-774EA6494D2E}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
+		{6DB61C04-F8CB-4AC8-BF48-774EA6494D2E}.Premise|Any CPU.Build.0 = Debug|Any CPU
+		{6DB61C04-F8CB-4AC8-BF48-774EA6494D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6DB61C04-F8CB-4AC8-BF48-774EA6494D2E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2FA1C0DF-A2EC-4A4F-A77B-20CCF8EB36B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2FA1C0DF-A2EC-4A4F-A77B-20CCF8EB36B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2FA1C0DF-A2EC-4A4F-A77B-20CCF8EB36B0}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{2FA1C0DF-A2EC-4A4F-A77B-20CCF8EB36B0}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{2FA1C0DF-A2EC-4A4F-A77B-20CCF8EB36B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2FA1C0DF-A2EC-4A4F-A77B-20CCF8EB36B0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9BD4B4BA-7DF2-476A-B509-D238EE5A84F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9BD4B4BA-7DF2-476A-B509-D238EE5A84F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9BD4B4BA-7DF2-476A-B509-D238EE5A84F1}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{9BD4B4BA-7DF2-476A-B509-D238EE5A84F1}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{9BD4B4BA-7DF2-476A-B509-D238EE5A84F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9BD4B4BA-7DF2-476A-B509-D238EE5A84F1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7EBEE0E2-5935-4C2D-85C4-ABAC92916B9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7EBEE0E2-5935-4C2D-85C4-ABAC92916B9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7EBEE0E2-5935-4C2D-85C4-ABAC92916B9F}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
+		{7EBEE0E2-5935-4C2D-85C4-ABAC92916B9F}.Premise|Any CPU.Build.0 = Debug|Any CPU
+		{7EBEE0E2-5935-4C2D-85C4-ABAC92916B9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7EBEE0E2-5935-4C2D-85C4-ABAC92916B9F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7F429F8D-35AF-4F58-BD33-4A98D76032D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7F429F8D-35AF-4F58-BD33-4A98D76032D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7F429F8D-35AF-4F58-BD33-4A98D76032D0}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
+		{7F429F8D-35AF-4F58-BD33-4A98D76032D0}.Premise|Any CPU.Build.0 = Debug|Any CPU
+		{7F429F8D-35AF-4F58-BD33-4A98D76032D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7F429F8D-35AF-4F58-BD33-4A98D76032D0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3601F340-63F6-4960-AC6C-3549F299D257}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3601F340-63F6-4960-AC6C-3549F299D257}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3601F340-63F6-4960-AC6C-3549F299D257}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{3601F340-63F6-4960-AC6C-3549F299D257}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{3601F340-63F6-4960-AC6C-3549F299D257}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3601F340-63F6-4960-AC6C-3549F299D257}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8DD4F5C9-E375-43C0-88DF-E639A94AE5D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8DD4F5C9-E375-43C0-88DF-E639A94AE5D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8DD4F5C9-E375-43C0-88DF-E639A94AE5D1}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{8DD4F5C9-E375-43C0-88DF-E639A94AE5D1}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{8DD4F5C9-E375-43C0-88DF-E639A94AE5D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8DD4F5C9-E375-43C0-88DF-E639A94AE5D1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{88BD7076-F366-403C-9F34-80F17620AFE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{88BD7076-F366-403C-9F34-80F17620AFE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{88BD7076-F366-403C-9F34-80F17620AFE0}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
+		{88BD7076-F366-403C-9F34-80F17620AFE0}.Premise|Any CPU.Build.0 = Debug|Any CPU
+		{88BD7076-F366-403C-9F34-80F17620AFE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{88BD7076-F366-403C-9F34-80F17620AFE0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{35D442DA-A1CD-44A5-B066-73550F64479C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{35D442DA-A1CD-44A5-B066-73550F64479C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{35D442DA-A1CD-44A5-B066-73550F64479C}.Premise|Any CPU.ActiveCfg = Debug|Any CPU
+		{35D442DA-A1CD-44A5-B066-73550F64479C}.Premise|Any CPU.Build.0 = Debug|Any CPU
+		{35D442DA-A1CD-44A5-B066-73550F64479C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{35D442DA-A1CD-44A5-B066-73550F64479C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{175E0833-C4A1-4573-9939-9E21C8215DE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{175E0833-C4A1-4573-9939-9E21C8215DE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{175E0833-C4A1-4573-9939-9E21C8215DE8}.Premise|Any CPU.ActiveCfg = Premise|Any CPU
+		{175E0833-C4A1-4573-9939-9E21C8215DE8}.Premise|Any CPU.Build.0 = Premise|Any CPU
+		{175E0833-C4A1-4573-9939-9E21C8215DE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{175E0833-C4A1-4573-9939-9E21C8215DE8}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{01D738C7-012E-40CB-A97D-30A13717F91D} = {B1F1EABA-8579-487D-A6C2-946DB140A18D}
+		{30502908-C48F-4EB7-B4E1-52137B0B3413} = {B1F1EABA-8579-487D-A6C2-946DB140A18D}
+		{E637E4E4-891D-43CC-A393-E00D81594458} = {B1F1EABA-8579-487D-A6C2-946DB140A18D}
+		{A4E66B79-0103-40F9-9A54-A5D3024A84B5} = {B1F1EABA-8579-487D-A6C2-946DB140A18D}
+		{B3D93343-C9B5-4DE2-B987-F7E8D1E41C6A} = {B1F1EABA-8579-487D-A6C2-946DB140A18D}
+		{6D18A443-C6E7-4106-9091-BC4F2BFD0B73} = {B1F1EABA-8579-487D-A6C2-946DB140A18D}
+		{205732B6-48B8-4E6E-B76C-B5E9B64AB351} = {B1F1EABA-8579-487D-A6C2-946DB140A18D}
+		{30AB7239-5097-48B1-BD72-35D203A8B756} = {B1F1EABA-8579-487D-A6C2-946DB140A18D}
+		{F222A24E-EEB4-4DB0-8929-49E29D93A2C3} = {E136D4CD-8777-4573-9C0F-5EEE2D2B1EDE}
+		{6DB61C04-F8CB-4AC8-BF48-774EA6494D2E} = {E136D4CD-8777-4573-9C0F-5EEE2D2B1EDE}
+		{2FA1C0DF-A2EC-4A4F-A77B-20CCF8EB36B0} = {3CC7F8DF-6F9A-48D2-B817-D397A2DFA481}
+		{9BD4B4BA-7DF2-476A-B509-D238EE5A84F1} = {3CC7F8DF-6F9A-48D2-B817-D397A2DFA481}
+		{7EBEE0E2-5935-4C2D-85C4-ABAC92916B9F} = {4CE81302-C06D-46A8-8CD3-268285613673}
+		{7F429F8D-35AF-4F58-BD33-4A98D76032D0} = {4CE81302-C06D-46A8-8CD3-268285613673}
+		{3601F340-63F6-4960-AC6C-3549F299D257} = {CB6F7389-365F-4109-A61F-8B3D192F12C1}
+		{8DD4F5C9-E375-43C0-88DF-E639A94AE5D1} = {CB6F7389-365F-4109-A61F-8B3D192F12C1}
+		{88BD7076-F366-403C-9F34-80F17620AFE0} = {CB6F7389-365F-4109-A61F-8B3D192F12C1}
+		{35D442DA-A1CD-44A5-B066-73550F64479C} = {4CE81302-C06D-46A8-8CD3-268285613673}
+		{175E0833-C4A1-4573-9939-9E21C8215DE8} = {E136D4CD-8777-4573-9C0F-5EEE2D2B1EDE}
+	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
-		SolutionGuid = {508BE8C5-ECAB-4876-8E3D-7935C53ACDEB}
+		SolutionGuid = {3BBC8750-0F93-4CFE-88A7-5E2E6B6483C4}
 	EndGlobalSection
 EndGlobal
diff --git a/src/Server/Coderr.Server.Abstractions/Boot/ConfigurationContext.cs b/src/Server/Common/Coderr.Server.Abstractions/Boot/ConfigurationContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Boot/ConfigurationContext.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Boot/ConfigurationContext.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Boot/ContainerServiceAttribute.cs b/src/Server/Common/Coderr.Server.Abstractions/Boot/ContainerServiceAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Boot/ContainerServiceAttribute.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Boot/ContainerServiceAttribute.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Boot/IAppModule.cs b/src/Server/Common/Coderr.Server.Abstractions/Boot/IAppModule.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Boot/IAppModule.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Boot/IAppModule.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Boot/IConfiguration.cs b/src/Server/Common/Coderr.Server.Abstractions/Boot/IConfiguration.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Boot/IConfiguration.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Boot/IConfiguration.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Boot/IConfigurationSection.cs b/src/Server/Common/Coderr.Server.Abstractions/Boot/IConfigurationSection.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Boot/IConfigurationSection.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Boot/IConfigurationSection.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Boot/RegisterExtensions.cs b/src/Server/Common/Coderr.Server.Abstractions/Boot/RegisterExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Boot/RegisterExtensions.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Boot/RegisterExtensions.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Boot/StartContext.cs b/src/Server/Common/Coderr.Server.Abstractions/Boot/StartContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Boot/StartContext.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Boot/StartContext.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Coderr.Server.Abstractions.csproj b/src/Server/Common/Coderr.Server.Abstractions/Coderr.Server.Abstractions.csproj
similarity index 80%
rename from src/Server/Coderr.Server.Abstractions/Coderr.Server.Abstractions.csproj
rename to src/Server/Common/Coderr.Server.Abstractions/Coderr.Server.Abstractions.csproj
index 5306ba1d..1009883d 100644
--- a/src/Server/Coderr.Server.Abstractions/Coderr.Server.Abstractions.csproj
+++ b/src/Server/Common/Coderr.Server.Abstractions/Coderr.Server.Abstractions.csproj
@@ -6,11 +6,11 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Api\Coderr.Server.Api.csproj" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.22" />
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.22" />
+    <ProjectReference Include="..\..\App\Coderr.Server.Api\Coderr.Server.Api.csproj" />
   </ItemGroup>
 
 </Project>
diff --git a/src/Server/Coderr.Server.Abstractions/Config/ConfigurationCategoryExtensions.cs b/src/Server/Common/Coderr.Server.Abstractions/Config/ConfigurationCategoryExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Config/ConfigurationCategoryExtensions.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Config/ConfigurationCategoryExtensions.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Config/ConfigurationStore.cs b/src/Server/Common/Coderr.Server.Abstractions/Config/ConfigurationStore.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Config/ConfigurationStore.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Config/ConfigurationStore.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Config/IConfiguration.cs b/src/Server/Common/Coderr.Server.Abstractions/Config/IConfiguration.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Config/IConfiguration.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Config/IConfiguration.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Config/IConfigurationSection.cs b/src/Server/Common/Coderr.Server.Abstractions/Config/IConfigurationSection.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Config/IConfigurationSection.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Config/IConfigurationSection.cs
diff --git a/src/Server/Common/Coderr.Server.Abstractions/Directory/IDirectoryEntry.cs b/src/Server/Common/Coderr.Server.Abstractions/Directory/IDirectoryEntry.cs
new file mode 100644
index 00000000..5d944154
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/Directory/IDirectoryEntry.cs
@@ -0,0 +1,11 @@
+﻿namespace Coderr.Server.Abstractions.Directory
+{
+    public interface IDirectoryEntry
+    {
+        string FullName { get; }
+        string Identity { get; }
+        string Name { get; }
+        //IDictionary<string, object> Properties { get; }
+        string SchemaClassName { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Common/Coderr.Server.Abstractions/Directory/IDirectoryService.cs b/src/Server/Common/Coderr.Server.Abstractions/Directory/IDirectoryService.cs
new file mode 100644
index 00000000..c878d07e
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/Directory/IDirectoryService.cs
@@ -0,0 +1,12 @@
+﻿using System.Collections.Generic;
+
+namespace Coderr.Server.Abstractions.Directory
+{
+    public interface IDirectoryService
+    {
+        bool IsInDomain { get; }
+        IEnumerable<IDirectoryEntry> Find(string text, bool groups, bool users, int pageNumber = 1, int pageSize = 20);
+        string FindEmail(string samAccountName);
+        IDirectoryEntry GetBySid(string sid);
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.Abstractions/HostConfig.cs b/src/Server/Common/Coderr.Server.Abstractions/HostConfig.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/HostConfig.cs
rename to src/Server/Common/Coderr.Server.Abstractions/HostConfig.cs
diff --git a/src/Server/Coderr.Server.Abstractions/IConnectionFactory.cs b/src/Server/Common/Coderr.Server.Abstractions/IConnectionFactory.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/IConnectionFactory.cs
rename to src/Server/Common/Coderr.Server.Abstractions/IConnectionFactory.cs
diff --git a/src/Server/Coderr.Server.Abstractions/IGotTransaction.cs b/src/Server/Common/Coderr.Server.Abstractions/IGotTransaction.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/IGotTransaction.cs
rename to src/Server/Common/Coderr.Server.Abstractions/IGotTransaction.cs
diff --git a/src/Server/Coderr.Server.Abstractions/IPAddressExtension.cs b/src/Server/Common/Coderr.Server.Abstractions/IPAddressExtension.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/IPAddressExtension.cs
rename to src/Server/Common/Coderr.Server.Abstractions/IPAddressExtension.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Incidents/HighlightedContextDataProviderContext.cs b/src/Server/Common/Coderr.Server.Abstractions/Incidents/HighlightedContextDataProviderContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Incidents/HighlightedContextDataProviderContext.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Incidents/HighlightedContextDataProviderContext.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Incidents/IHighlightedContextDataProvider.cs b/src/Server/Common/Coderr.Server.Abstractions/Incidents/IHighlightedContextDataProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Incidents/IHighlightedContextDataProvider.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Incidents/IHighlightedContextDataProvider.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Incidents/IQuickfactProvider.cs b/src/Server/Common/Coderr.Server.Abstractions/Incidents/IQuickfactProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Incidents/IQuickfactProvider.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Incidents/IQuickfactProvider.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Incidents/ISolutionProvider.cs b/src/Server/Common/Coderr.Server.Abstractions/Incidents/ISolutionProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Incidents/ISolutionProvider.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Incidents/ISolutionProvider.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Incidents/QuickFactContext.cs b/src/Server/Common/Coderr.Server.Abstractions/Incidents/QuickFactContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Incidents/QuickFactContext.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Incidents/QuickFactContext.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Incidents/SolutionProviderContext.cs b/src/Server/Common/Coderr.Server.Abstractions/Incidents/SolutionProviderContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Incidents/SolutionProviderContext.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Incidents/SolutionProviderContext.cs
diff --git a/src/Server/Coderr.Server.Abstractions/QueueConfig.cs b/src/Server/Common/Coderr.Server.Abstractions/QueueConfig.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/QueueConfig.cs
rename to src/Server/Common/Coderr.Server.Abstractions/QueueConfig.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Reports/ReportConfig.cs b/src/Server/Common/Coderr.Server.Abstractions/Reports/ReportConfig.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Reports/ReportConfig.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Reports/ReportConfig.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Security/ClaimsExtensions.cs b/src/Server/Common/Coderr.Server.Abstractions/Security/ClaimsExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Security/ClaimsExtensions.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Security/ClaimsExtensions.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Security/CoderrClaims.cs b/src/Server/Common/Coderr.Server.Abstractions/Security/CoderrClaims.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Security/CoderrClaims.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Security/CoderrClaims.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Security/CoderrRoles.cs b/src/Server/Common/Coderr.Server.Abstractions/Security/CoderrRoles.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Security/CoderrRoles.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Security/CoderrRoles.cs
diff --git a/src/Server/Coderr.Server.Abstractions/Security/IPrincipalAccessor.cs b/src/Server/Common/Coderr.Server.Abstractions/Security/IPrincipalAccessor.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/Security/IPrincipalAccessor.cs
rename to src/Server/Common/Coderr.Server.Abstractions/Security/IPrincipalAccessor.cs
diff --git a/src/Server/Coderr.Server.Abstractions/ServerConfig.cs b/src/Server/Common/Coderr.Server.Abstractions/ServerConfig.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/ServerConfig.cs
rename to src/Server/Common/Coderr.Server.Abstractions/ServerConfig.cs
diff --git a/src/Server/Coderr.Server.Abstractions/ServerType.cs b/src/Server/Common/Coderr.Server.Abstractions/ServerType.cs
similarity index 100%
rename from src/Server/Coderr.Server.Abstractions/ServerType.cs
rename to src/Server/Common/Coderr.Server.Abstractions/ServerType.cs
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IUserMappingRepository.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IUserMappingRepository.cs
new file mode 100644
index 00000000..cbbc0ff9
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IUserMappingRepository.cs
@@ -0,0 +1,12 @@
+﻿using System.Threading.Tasks;
+
+namespace Coderr.Server.Abstractions.WorkItems
+{
+    public interface IUserMappingRepository
+    {
+        Task Create(WorkItemUserMapping mapping);
+        Task<WorkItemUserMapping> Get(int accountId);
+        Task<WorkItemUserMapping> GetByExternalId(string externalId);
+
+    }
+}
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemRepository.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemRepository.cs
new file mode 100644
index 00000000..27302952
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemRepository.cs
@@ -0,0 +1,18 @@
+﻿using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Coderr.Server.Abstractions.WorkItems
+{
+    public interface IWorkItemRepository
+    {
+        Task<WorkItemMapping> Find(int incidentId);
+        Task<IReadOnlyList<WorkItemMapping>> FindAllWorkItems(string integrationName);
+        Task Create(WorkItemMapping item);
+
+        Task MapApplication(int applicationId, string integrationName);
+
+        Task<string> GetIntegrationName(int applicationId);
+        Task DeleteAbandonedWorkItems();
+        Task Delete(WorkItemMapping workItem);
+    }
+}
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemService.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemService.cs
new file mode 100644
index 00000000..bfaba2ad
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemService.cs
@@ -0,0 +1,36 @@
+﻿using System.Threading.Tasks;
+
+namespace Coderr.Server.Abstractions.WorkItems
+{
+    /// <summary>
+    /// Used to create and manage work items in an external system.
+    /// </summary>
+    public interface IWorkItemService
+    {
+        string Name { get; }
+        string Title { get; }
+        Task Create(WorkItemDTO workItem);
+
+        /// <summary>
+        /// Assign a work item to a person
+        /// </summary>
+        /// <param name="applicationId"></param>
+        /// <param name="workItemId"></param>
+        /// <param name="accountId">Person that got it assigned</param>
+        /// <param name="workitemId">Work item to assign</param>
+        Task Assign(int applicationId, string workItemId, int accountId);
+
+
+        /// <summary>
+        /// Assign a work item to a person
+        /// </summary>
+        /// <param name="applicationId"></param>
+        /// <param name="workItemId"></param>
+        /// <param name="accountId"></param>
+        /// <param name="solution"></param>
+        /// <param name="version"></param>
+        /// <param name="workitemId"></param>
+        Task Solve(int applicationId, string workItemId, int accountId, string solution, string version);
+
+    }
+}
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemServiceProvider.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemServiceProvider.cs
new file mode 100644
index 00000000..299d73d2
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemServiceProvider.cs
@@ -0,0 +1,16 @@
+﻿using System.Threading.Tasks;
+
+namespace Coderr.Server.Abstractions.WorkItems
+{
+    /// <summary>
+    /// Used to register services for work items (each integration have its own service).
+    /// </summary>
+    public interface IWorkItemServiceProvider
+    {
+        Task CreateAsync(int applicationId, int incidentId);
+
+        Task MapApplication(int applicationId, string integrationName);
+
+        Task<IWorkItemService> FindService(int applicationId);
+    }
+}
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemServiceRegistrar.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemServiceRegistrar.cs
new file mode 100644
index 00000000..cad7a716
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/IWorkItemServiceRegistrar.cs
@@ -0,0 +1,14 @@
+﻿using System;
+
+namespace Coderr.Server.Abstractions.WorkItems
+{
+    /// <summary>
+    /// Used to register services for work items (each integration have its own service).
+    /// </summary>
+    public interface IWorkItemServiceRegistrar
+    {
+        void Register<T>(string integrationName) where T : IWorkItemService;
+
+        Type GetServiceType(string integrationName);
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemDTO.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemDTO.cs
new file mode 100644
index 00000000..4e181d37
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemDTO.cs
@@ -0,0 +1,73 @@
+﻿using System;
+
+namespace Coderr.Server.Abstractions.WorkItems
+{
+    /// <summary>
+    ///     Work item linked to an incident.
+    /// </summary>
+    public class WorkItemDTO
+    {
+        public WorkItemDTO(int applicationId, int incidentId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            if (incidentId <= 0) throw new ArgumentOutOfRangeException(nameof(incidentId));
+            ApplicationId = applicationId;
+            IncidentId = incidentId;
+        }
+
+        protected WorkItemDTO()
+        {
+
+        }
+
+        /// <summary>
+        ///     Url used to fetch updates
+        /// </summary>
+        /// <remarks>
+        ///     <para>
+        ///         Specified by the work item service when the item is created.
+        ///     </para>
+        /// </remarks>
+        public string ApiUrl { get; set; }
+
+        public int ApplicationId { get; private set; }
+        public int IncidentId { get; private set; }
+
+        /// <summary>
+        ///     "Jira", "AzureDevOps"
+        /// </summary>
+        public string IntegrationName { get; set; }
+
+        public string ReproduceSteps { get; set; }
+
+
+        /// <summary>
+        ///     State in the other system.
+        /// </summary>
+        public WorkItemState State { get; set; }
+
+        public string SystemInformation { get; set; }
+
+        public string[] Tags { get; set; }
+
+        /// <summary>
+        ///     Display name
+        /// </summary>
+        public string Title { get; set; }
+
+        /// <summary>
+        ///     Url that the user can click on to get to the other system.
+        /// </summary>
+        /// <remarks>
+        ///     <para>
+        ///         Specified by the work item service when the item is created.
+        ///     </para>
+        /// </remarks>
+        public string UiUrl { get; set; }
+
+        /// <summary>
+        ///     Id in the other system
+        /// </summary>
+        public string WorkItemId { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemMapping.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemMapping.cs
new file mode 100644
index 00000000..f011f686
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemMapping.cs
@@ -0,0 +1,49 @@
+﻿using System;
+
+namespace Coderr.Server.Abstractions.WorkItems
+{
+    /// <summary>
+    ///     Keeps a link between our incident and the work item in the external system
+    /// </summary>
+    public class WorkItemMapping
+    {
+        public WorkItemMapping(int applicationId, int incidentId, string integrationName)
+        {
+            ApplicationId = applicationId;
+            IncidentId = incidentId;
+            IntegrationName = integrationName;
+        }
+
+        protected WorkItemMapping()
+        {
+        }
+
+        public int ApplicationId { get; private set; }
+
+        public int IncidentId { get; private set; }
+
+        /// <summary>
+        ///     When we synchronized the last time.
+        /// </summary>
+        public DateTime LastSynchronizationAtUtc { get; set; }
+
+        public string Name { get; set; }
+
+        /// <summary>
+        ///     Url that the user can click on to get to the other system.
+        /// </summary>
+        public string UiUrl { get; set; }
+
+        /// <summary>
+        /// Url used to fetch updates.
+        /// </summary>
+        public string ApiUrl { get; set; }
+
+        /// <summary>
+        ///     Id in the other system
+        /// </summary>
+        public string WorkItemId { get; set; }
+
+        public string IntegrationName { get; private set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemState.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemState.cs
new file mode 100644
index 00000000..f2e0bf0e
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemState.cs
@@ -0,0 +1,33 @@
+﻿namespace Coderr.Server.Abstractions.WorkItems
+{
+    /// <summary>
+    /// State for <see cref="WorkItemMapping"/>
+    /// </summary>
+    public enum WorkItemState
+    {
+        /// <summary>
+        /// Not known
+        /// </summary>
+        Unspecified,
+
+        /// <summary>
+        /// Have not started working on it
+        /// </summary>
+        New,
+
+        /// <summary>
+        /// Active
+        /// </summary>
+        Active,
+
+        /// <summary>
+        /// Solved
+        /// </summary>
+        Solved,
+
+        /// <summary>
+        /// Removed from the other system
+        /// </summary>
+        Deleted
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemUserMapping.cs b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemUserMapping.cs
new file mode 100644
index 00000000..c1e26142
--- /dev/null
+++ b/src/Server/Common/Coderr.Server.Abstractions/WorkItems/WorkItemUserMapping.cs
@@ -0,0 +1,21 @@
+﻿using System.Collections.Generic;
+
+namespace Coderr.Server.Abstractions.WorkItems
+{
+    /// <summary>
+    /// Used to find our users in the external system.
+    /// </summary>
+    public class WorkItemUserMapping
+    {
+        public int AccountId { get; set; }
+
+        /// <summary>
+        /// Id in the external system.
+        /// </summary>
+        /// <remarks>
+        ///<para>This must contain the value that is used in the work item.</para>
+        /// </remarks>
+        public string ExternalId { get; set; }
+        public IDictionary<string, string> AdditionalData { get; set; }
+    }
+}
diff --git a/src/Server/Coderr.Server.Infrastructure.Tests/Coderr.Server.Infrastructure.Tests.csproj b/src/Server/Common/Coderr.Server.Infrastructure.Tests/Coderr.Server.Infrastructure.Tests.csproj
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure.Tests/Coderr.Server.Infrastructure.Tests.csproj
rename to src/Server/Common/Coderr.Server.Infrastructure.Tests/Coderr.Server.Infrastructure.Tests.csproj
diff --git a/src/Server/Coderr.Server.Infrastructure.Tests/Messaging/Disk/Queue/DiskFileTests.cs b/src/Server/Common/Coderr.Server.Infrastructure.Tests/Messaging/Disk/Queue/DiskFileTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure.Tests/Messaging/Disk/Queue/DiskFileTests.cs
rename to src/Server/Common/Coderr.Server.Infrastructure.Tests/Messaging/Disk/Queue/DiskFileTests.cs
diff --git a/src/Server/Coderr.Server.Infrastructure.Tests/UnitTest1.cs b/src/Server/Common/Coderr.Server.Infrastructure.Tests/UnitTest1.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure.Tests/UnitTest1.cs
rename to src/Server/Common/Coderr.Server.Infrastructure.Tests/UnitTest1.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/ApplicationVersionComparer.cs b/src/Server/Common/Coderr.Server.Infrastructure/ApplicationVersionComparer.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/ApplicationVersionComparer.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/ApplicationVersionComparer.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Coderr.Server.Infrastructure.csproj b/src/Server/Common/Coderr.Server.Infrastructure/Coderr.Server.Infrastructure.csproj
similarity index 67%
rename from src/Server/Coderr.Server.Infrastructure/Coderr.Server.Infrastructure.csproj
rename to src/Server/Common/Coderr.Server.Infrastructure/Coderr.Server.Infrastructure.csproj
index ac4d1138..a1d4b858 100644
--- a/src/Server/Coderr.Server.Infrastructure/Coderr.Server.Infrastructure.csproj
+++ b/src/Server/Common/Coderr.Server.Infrastructure/Coderr.Server.Infrastructure.csproj
@@ -1,8 +1,6 @@
 ﻿<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFrameworks>netstandard2.0</TargetFrameworks>
-    <RootNamespace>Coderr.Server.Infrastructure</RootNamespace>
-    <AssemblyName>Coderr.Server.Infrastructure</AssemblyName>
     <Configurations>Debug;Release;Premise</Configurations>
   </PropertyGroup>
   <ItemGroup>
@@ -15,14 +13,8 @@
     <PackageReference Include="System.Memory" Version="4.5.4" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Api\Coderr.Server.Api.csproj" />
+    <ProjectReference Include="..\..\App\Coderr.Server.Api\Coderr.Server.Api.csproj" />
     <ProjectReference Include="..\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" />
-  </ItemGroup>
-  <ItemGroup Condition="'$(TargetFramework)' == 'net452'">
-    <Reference Include="System.Configuration" />
-    <Reference Include="System.Messaging" />
-  </ItemGroup>
-  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
     <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions">
       <Version>3.1.22</Version>
     </PackageReference>
diff --git a/src/Server/Coderr.Server.Infrastructure/CoderrDtoSerializer.cs b/src/Server/Common/Coderr.Server.Infrastructure/CoderrDtoSerializer.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/CoderrDtoSerializer.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/CoderrDtoSerializer.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Configuration/BaseConfiguration.cs b/src/Server/Common/Coderr.Server.Infrastructure/Configuration/BaseConfiguration.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Configuration/BaseConfiguration.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Configuration/BaseConfiguration.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Configuration/CoderrConfigSection.cs b/src/Server/Common/Coderr.Server.Infrastructure/Configuration/CoderrConfigSection.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Configuration/CoderrConfigSection.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Configuration/CoderrConfigSection.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Configuration/ConfigDictionaryExtensions.cs b/src/Server/Common/Coderr.Server.Infrastructure/Configuration/ConfigDictionaryExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Configuration/ConfigDictionaryExtensions.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Configuration/ConfigDictionaryExtensions.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Configuration/Database/DatabaseStore.cs b/src/Server/Common/Coderr.Server.Infrastructure/Configuration/Database/DatabaseStore.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Configuration/Database/DatabaseStore.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Configuration/Database/DatabaseStore.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/IDatabaseUtilities.cs b/src/Server/Common/Coderr.Server.Infrastructure/IDatabaseUtilities.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/IDatabaseUtilities.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/IDatabaseUtilities.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/IPrincipalAccessor.cs b/src/Server/Common/Coderr.Server.Infrastructure/IPrincipalAccessor.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/IPrincipalAccessor.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/IPrincipalAccessor.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/IUrlHelper.cs b/src/Server/Common/Coderr.Server.Infrastructure/IUrlHelper.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/IUrlHelper.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/IUrlHelper.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/ClaimDto.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/ClaimDto.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/ClaimDto.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/ClaimDto.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DequeueTracking.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DequeueTracking.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DequeueTracking.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DequeueTracking.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DiskEntry.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DiskEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DiskEntry.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DiskEntry.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DiskQueueAdapter.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DiskQueueAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DiskQueueAdapter.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DiskQueueAdapter.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueProvider.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueProvider.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueProvider.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueSession.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueSession.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueSession.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/DotNetCqs/DiskQueueSession.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/AdoNetMessageDTO.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/AdoNetMessageDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/AdoNetMessageDTO.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/AdoNetMessageDTO.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/ClaimDto.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/ClaimDto.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/ClaimDto.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/ClaimDto.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/IdentityDto.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/IdentityDto.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/IdentityDto.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Dtos/IdentityDto.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/JsonNetDiskSerializer.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/JsonNetDiskSerializer.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/JsonNetDiskSerializer.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/JsonNetDiskSerializer.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/BufferStream.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/BufferStream.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/BufferStream.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/BufferStream.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskFile.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskFile.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskFile.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskFile.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskQueue.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskQueue.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskQueue.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/DiskQueue.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/IContentSerializer.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/IContentSerializer.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/IContentSerializer.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/IContentSerializer.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/ReadState.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/ReadState.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/ReadState.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/ReadState.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/Record.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/Record.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/Record.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/Record.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/SegmentedReadStream.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/SegmentedReadStream.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/Queue/SegmentedReadStream.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/Queue/SegmentedReadStream.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Disk/QueueLockFile.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/QueueLockFile.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Disk/QueueLockFile.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Disk/QueueLockFile.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/IRouteRegistrar.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/IRouteRegistrar.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/IRouteRegistrar.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/IRouteRegistrar.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/IncludeNonPublicAndUseCamelCaseContractResolver.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/IncludeNonPublicAndUseCamelCaseContractResolver.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/IncludeNonPublicAndUseCamelCaseContractResolver.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/IncludeNonPublicAndUseCamelCaseContractResolver.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/MessageRouter.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/MessageRouter.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/MessageRouter.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/MessageRouter.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/MessagingSerializer.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/MessagingSerializer.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/MessagingSerializer.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/MessagingSerializer.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/QueueManager.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/QueueManager.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/QueueManager.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/QueueManager.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/ShutdownRequestCompletedEventArgs.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/ShutdownRequestCompletedEventArgs.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/ShutdownRequestCompletedEventArgs.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/ShutdownRequestCompletedEventArgs.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/ShuttingDownEventArgs.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/ShuttingDownEventArgs.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/ShuttingDownEventArgs.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/ShuttingDownEventArgs.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Tests/TestMessageWrapper.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Tests/TestMessageWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Tests/TestMessageWrapper.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Tests/TestMessageWrapper.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Tests/TestQueue.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Tests/TestQueue.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Tests/TestQueue.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Tests/TestQueue.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueProvider.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueProvider.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueProvider.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueSession.cs b/src/Server/Common/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueSession.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueSession.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Messaging/Tests/TestQueueSession.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Net/MimeMapping.cs b/src/Server/Common/Coderr.Server.Infrastructure/Net/MimeMapping.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Net/MimeMapping.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Net/MimeMapping.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Plugins/Configuration.cs b/src/Server/Common/Coderr.Server.Infrastructure/Plugins/Configuration.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Plugins/Configuration.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Plugins/Configuration.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Plugins/IPlugin.cs b/src/Server/Common/Coderr.Server.Infrastructure/Plugins/IPlugin.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Plugins/IPlugin.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Plugins/IPlugin.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Plugins/MenuConfiguration.cs b/src/Server/Common/Coderr.Server.Infrastructure/Plugins/MenuConfiguration.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Plugins/MenuConfiguration.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Plugins/MenuConfiguration.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Plugins/MenuItem.cs b/src/Server/Common/Coderr.Server.Infrastructure/Plugins/MenuItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Plugins/MenuItem.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Plugins/MenuItem.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Security/AuthenticationTypes.cs b/src/Server/Common/Coderr.Server.Infrastructure/Security/AuthenticationTypes.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Security/AuthenticationTypes.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Security/AuthenticationTypes.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/Security/UpdatesLoggedInAccountAttribute.cs b/src/Server/Common/Coderr.Server.Infrastructure/Security/UpdatesLoggedInAccountAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/Security/UpdatesLoggedInAccountAttribute.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/Security/UpdatesLoggedInAccountAttribute.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/SetupTools.cs b/src/Server/Common/Coderr.Server.Infrastructure/SetupTools.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/SetupTools.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/SetupTools.cs
diff --git a/src/Server/Coderr.Server.Infrastructure/TypeHelper.cs b/src/Server/Common/Coderr.Server.Infrastructure/TypeHelper.cs
similarity index 100%
rename from src/Server/Coderr.Server.Infrastructure/TypeHelper.cs
rename to src/Server/Common/Coderr.Server.Infrastructure/TypeHelper.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Analysis/IncidentBeingAnalyzedMapper.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Analysis/IncidentBeingAnalyzedMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Analysis/IncidentBeingAnalyzedMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Analysis/IncidentBeingAnalyzedMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Coderr.Server.SqlServer.Tests.csproj b/src/Server/Data/Coderr.Server.SqlServer.Tests/Coderr.Server.SqlServer.Tests.csproj
similarity index 82%
rename from src/Server/Coderr.Server.SqlServer.Tests/Coderr.Server.SqlServer.Tests.csproj
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Coderr.Server.SqlServer.Tests.csproj
index 0737f7d1..fb216a40 100644
--- a/src/Server/Coderr.Server.SqlServer.Tests/Coderr.Server.SqlServer.Tests.csproj
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Coderr.Server.SqlServer.Tests.csproj
@@ -26,9 +26,9 @@
     </PackageReference>
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Api\Coderr.Server.Api.csproj" />
-    <ProjectReference Include="..\Coderr.Server.App\Coderr.Server.App.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
+    <ProjectReference Include="..\..\App\Coderr.Server.Api\Coderr.Server.Api.csproj" />
+    <ProjectReference Include="..\..\App\Coderr.Server.App\Coderr.Server.App.csproj" />
+    <ProjectReference Include="..\..\Reporting\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
     <ProjectReference Include="..\Coderr.Server.SqlServer\Coderr.Server.SqlServer.csproj" />
   </ItemGroup>
 
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/CommonIntegrationTest.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/CommonIntegrationTest.cs
new file mode 100644
index 00000000..4583ee8e
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/CommonIntegrationTest.cs
@@ -0,0 +1,38 @@
+﻿using System.Data;
+using System.IO;
+using System.Reflection;
+using Coderr.Server.SqlServer.Partitions;
+using Coderr.Server.SqlServer.Schema.Common;
+using Coderr.Server.SqlServer.Schema.Oss;
+using Griffin.Data.Mapper;
+using Xunit.Abstractions;
+
+namespace Coderr.Server.SqlServer.Tests
+{
+    public class CommonIntegrationTest : IntegrationTest
+    {
+        static CommonIntegrationTest()
+        {
+            MigrationSources.Add(("Coderr", typeof(CoderrMigrationPointer).Namespace));
+            MigrationSources.Add(("Common", typeof(CommonSchemaPointer).Namespace));
+            //MigrationSources.Add(("Premise", typeof(PremiseSchemaPointer).Namespace));
+            MappingProvider.Scan(typeof(PartitionsRepository).Assembly);
+        }
+
+        public CommonIntegrationTest(ITestOutputHelper output) : base(output)
+        {
+        }
+
+        private static void AddLiveTables(IDbConnection connection)
+        {
+            var sqlScript = Assembly.GetExecutingAssembly()
+                .GetManifestResourceStream("Coderr.Server.Common.Data.SqlServer.Tests.liveTables.sql");
+            var sql = new StreamReader(sqlScript).ReadToEnd();
+            using (var cmd = connection.CreateDbCommand())
+            {
+                cmd.CommandText = sql;
+                cmd.ExecuteNonQuery();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Core/Accounts/AccountRepositoryTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Core/Accounts/AccountRepositoryTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Core/Accounts/AccountRepositoryTests.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Core/Accounts/AccountRepositoryTests.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/CreateApiKeyHandlerTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/CreateApiKeyHandlerTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/CreateApiKeyHandlerTests.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/CreateApiKeyHandlerTests.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/DeleteApiKeyHandlerTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/DeleteApiKeyHandlerTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/DeleteApiKeyHandlerTests.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Commands/DeleteApiKeyHandlerTests.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/GetApiKeyHandlerTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/GetApiKeyHandlerTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/GetApiKeyHandlerTests.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/GetApiKeyHandlerTests.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/ListApiKeysHandlerTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/ListApiKeysHandlerTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/ListApiKeysHandlerTests.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Core/ApiKeys/Queries/ListApiKeysHandlerTests.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Helpers/DatabaseManager.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Helpers/DatabaseManager.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Helpers/DatabaseManager.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Helpers/DatabaseManager.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Helpers/TestDataManager.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Helpers/TestDataManager.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Helpers/TestDataManager.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Helpers/TestDataManager.cs
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Applications/NewIncidentsIndicatorTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Applications/NewIncidentsIndicatorTests.cs
new file mode 100644
index 00000000..0c017ed3
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Applications/NewIncidentsIndicatorTests.cs
@@ -0,0 +1,32 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.SqlServer.Insights.Applications;
+using Xunit;
+
+namespace Coderr.Server.SqlServer.Tests.Insights.Applications
+{
+    public class NewIncidentsIndicatorTests : SimpleDbTest
+    {
+        public NewIncidentsIndicatorTests()
+        {
+            FillCommonIncidentData();
+        }
+
+        [Fact]
+        public async Task Should_not_give_mapping_errors()
+        {
+            var items = new Dictionary<int, List<KeyPerformanceIndicator>>();
+            var context = new KeyPerformanceIndicatorContext(items) {ApplicationIds = new[] {1}};
+
+
+            var sut = new NewIncidentsIndicator(OpenUow());
+            await sut.CollectAsync(context);
+
+            var kpi = items.Values.First();
+            
+        }
+
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Applications/WorkTimeIndicatorTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Applications/WorkTimeIndicatorTests.cs
new file mode 100644
index 00000000..e18e84ed
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Applications/WorkTimeIndicatorTests.cs
@@ -0,0 +1,32 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.SqlServer.Insights.Applications;
+using Xunit;
+
+namespace Coderr.Server.SqlServer.Tests.Insights.Applications
+{
+    public class WorkTimeIndicatorTests : SimpleDbTest
+    {
+        public WorkTimeIndicatorTests()
+        {
+            FillCommonIncidentData();
+        }
+
+        [Fact]
+        public async Task Should_not_give_mapping_errors()
+        {
+            var items = new Dictionary<int, List<KeyPerformanceIndicator>>();
+            var context = new KeyPerformanceIndicatorContext(items) {ApplicationIds = new[] {1}};
+
+
+            var sut = new WorkTimeIndicator(OpenUow());
+            await sut.CollectAsync(context);
+
+            var kpi = items.Values.First();
+            
+        }
+
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/CloserIndicatorTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/CloserIndicatorTests.cs
new file mode 100644
index 00000000..c0e81fd4
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/CloserIndicatorTests.cs
@@ -0,0 +1,31 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.SqlServer.Insights.Users;
+using Xunit;
+
+namespace Coderr.Server.SqlServer.Tests.Insights.Users
+{
+    public class CloserIndicatorTests : SimpleDbTest
+    {
+        public CloserIndicatorTests()
+        {
+            FillCommonIncidentData();
+        }
+
+        [Fact]
+        public async Task Should_not_give_mapping_errors()
+        {
+            var items = new Dictionary<int, List<KeyPerformanceIndicator>>();
+            var context = new KeyPerformanceIndicatorContext(items) {ApplicationIds = new[] {1}};
+
+
+            var sut = new CloserIndicator(OpenUow());
+            await sut.CollectAsync(context);
+
+            var kpi = items.Values.First();
+
+        }
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/OptimistIndicatorTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/OptimistIndicatorTests.cs
new file mode 100644
index 00000000..9ec54bcb
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/OptimistIndicatorTests.cs
@@ -0,0 +1,31 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.SqlServer.Insights.Users;
+using Xunit;
+
+namespace Coderr.Server.SqlServer.Tests.Insights.Users
+{
+    public class OptimistIndicatorTests : SimpleDbTest
+    {
+        public OptimistIndicatorTests()
+        {
+            FillCommonIncidentData();
+        }
+
+        [Fact]
+        public async Task Should_not_give_mapping_errors()
+        {
+            var items = new Dictionary<int, List<KeyPerformanceIndicator>>();
+            var context = new KeyPerformanceIndicatorContext(items) {ApplicationIds = new[] {1}};
+
+
+            var sut = new ProcastinatorIndicator(OpenUow());
+            await sut.CollectAsync(context);
+
+            var kpi = items.Values.First();
+
+        }
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/ProcastinatorIndicatorTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/ProcastinatorIndicatorTests.cs
new file mode 100644
index 00000000..6c81f207
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Insights/Users/ProcastinatorIndicatorTests.cs
@@ -0,0 +1,30 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.SqlServer.Insights.Users;
+using Xunit;
+
+namespace Coderr.Server.SqlServer.Tests.Insights.Users
+{
+    public class ProcastinatorIndicatorTests : SimpleDbTest
+    {
+        public ProcastinatorIndicatorTests()
+        {
+            FillCommonIncidentData();
+        }
+
+        [Fact]
+        public async Task Should_not_give_mapping_errors()
+        {
+            var items = new Dictionary<int, List<KeyPerformanceIndicator>>();
+            var context = new KeyPerformanceIndicatorContext(items) {ApplicationIds = new[] {1}};
+
+
+            var sut = new ProcastinatorIndicator(OpenUow());
+            await sut.CollectAsync(context);
+
+            var kpi = items.Values.First();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/IntegrationTest.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/IntegrationTest.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/IntegrationTest.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/IntegrationTest.cs
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/Mine/ListMyIncidentsQueryHandlerTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Mine/ListMyIncidentsQueryHandlerTests.cs
new file mode 100644
index 00000000..172fe161
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Mine/ListMyIncidentsQueryHandlerTests.cs
@@ -0,0 +1,46 @@
+﻿using System.Security.Claims;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Modules.Mine.Queries;
+using Coderr.Server.App.Modules.Mine;
+using Coderr.Server.App.Partitions.Events;
+using Coderr.Server.SqlServer.Core.Applications;
+using Coderr.Server.SqlServer.Core.Incidents;
+using Coderr.Server.SqlServer.Modules.Mine;
+using Coderr.Server.SqlServer.Partitions;
+using DotNetCqs;
+using NSubstitute;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Coderr.Server.SqlServer.Tests.Mine
+{
+    public class ListMyIncidentsQueryHandlerTests : CommonIntegrationTest
+    {
+        public ListMyIncidentsQueryHandlerTests(ITestOutputHelper output) : base(output)
+        {
+        }
+
+        [Fact]
+        public async Task Should_fetch_item()
+        {
+            var uow = CreateUnitOfWork();
+            var repos = new PartitionsRepository(uow);
+            var provider = new SuggestPartitionIncidents(repos);
+            var service = new RecommendationService(new []{provider});
+            var incidentRepository = new IncidentRepository(uow);
+            var context = Substitute.For<IMessageContext>();
+            var appRepos = new ApplicationRepository(uow);
+            context.Principal.Returns(new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.NameIdentifier, "1"), })));
+
+            var sut = new ListMyIncidentsQueryHandler(CreateUnitOfWork(), service, incidentRepository, appRepos);
+            var query = new ListMyIncidents();
+            await sut.HandleAsync(context, query);
+        }
+
+        //public async Task Should_return_result_even_when_there_are_no_suggestions_Available()
+        //{
+
+        //}
+
+    }
+}
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Models/TestUser.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Models/TestUser.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Models/TestUser.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Models/TestUser.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Modules/Geolocation/ErrorOriginRepositoryTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Modules/Geolocation/ErrorOriginRepositoryTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Modules/Geolocation/ErrorOriginRepositoryTests.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Modules/Geolocation/ErrorOriginRepositoryTests.cs
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/Partitions/GetPartitionInsightsHandlerTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Partitions/GetPartitionInsightsHandlerTests.cs
new file mode 100644
index 00000000..eb90a58b
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Partitions/GetPartitionInsightsHandlerTests.cs
@@ -0,0 +1,60 @@
+﻿using System;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Partitions.Queries;
+using Coderr.Server.Domain.Modules.Partitions;
+using Coderr.Server.SqlServer.Partitions;
+using DotNetCqs;
+using Griffin.Data;
+using NSubstitute;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Coderr.Server.SqlServer.Tests.Partitions
+{
+    public class GetPartitionInsightsHandlerTests : CommonIntegrationTest
+    {
+        private readonly IAdoNetUnitOfWork _uow;
+        private readonly PartitionsRepository _repository;
+
+        [Fact]
+        public async Task Should_be_able_to_make_query()
+        {
+            var appId = await FillDb();
+            var context = Substitute.For<IMessageContext>();
+            var msg = new GetPartitionInsights(appId);
+            var repos = new PartitionsRepository(_uow);
+
+            var sut = new GetPartitionInsightsHandler(_uow, repos);
+            var result = await sut.HandleAsync(context, msg);
+
+            
+        }
+
+        public GetPartitionInsightsHandlerTests(ITestOutputHelper output) : base(output)
+        {
+            ResetDatabase();
+
+            _uow = CreateUnitOfWork();
+            _repository = new PartitionsRepository(_uow);
+        }
+
+        protected async Task<int> FillDb()
+        {
+            var appId = base.CreateApplication("partitionTest1", FirstUserId);
+            var def = new PartitionDefinition(appId, "Users2", "usrs2");
+            await _repository.CreateAsync(def);
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Ada"));
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Key"));
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Doc"));
+            _uow.ExecuteNonQuery($"INSERT INTO ApplicationPartitionInsights (PartitionId, Value, YearMonth) VALUES({def.Id}, 'Ada', '{DateTime.Today:yyyy-MM-01}')");
+            _uow.SaveChanges();
+            return appId;
+        }
+
+        protected override void Dispose(bool isBeingDisposed)
+        {
+            _uow.Dispose();
+            base.Dispose(isBeingDisposed);
+        }
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/Partitions/SuggestPartitionIncidentsTests.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Partitions/SuggestPartitionIncidentsTests.cs
new file mode 100644
index 00000000..5e3d7755
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/Partitions/SuggestPartitionIncidentsTests.cs
@@ -0,0 +1,77 @@
+﻿using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.App.Modules.Mine;
+using Coderr.Server.App.Partitions.Events;
+using Coderr.Server.Domain.Modules.Partitions;
+using Coderr.Server.SqlServer.Partitions;
+using FluentAssertions;
+using Griffin.Data;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Coderr.Server.SqlServer.Tests.Partitions
+{
+    public class SuggestPartitionIncidentsTests : CommonIntegrationTest
+    {
+        private PartitionsRepository _repository;
+        private int _reportId;
+        private int _incidentId;
+        private IAdoNetUnitOfWork _uow;
+
+        public SuggestPartitionIncidentsTests(ITestOutputHelper output) : base(output)
+        {
+            _uow = CreateUnitOfWork();
+            _repository = new PartitionsRepository(_uow);
+            ResetDatabase();
+        }
+
+        [Fact]
+        public async Task Should_calculate_using_NumberOfItems_when_specified()
+        {
+            var appId = base.CreateApplication("partitionTest1", FirstUserId);
+            CreateReportAndIncident(appId, out _reportId, out _incidentId);
+            var items = new List<RecommendedIncident>();
+            var ctx = new RecommendIncidentContext(items) { ApplicationId = appId };
+            var def = new PartitionDefinition(appId, "Users1", "usrs1")
+            {
+                NumberOfItems = 100,
+            };
+            await _repository.CreateAsync(def);
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Ada"));
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Key"));
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Doc"));
+            await _repository.CreateAsync(new IncidentPartitionValue(def.Id, _incidentId, 1));
+            await _repository.CreateAsync(new IncidentPartitionValue(def.Id, _incidentId, 2));
+            _uow.SaveChanges();
+
+            var sut = new SuggestPartitionIncidents(_repository);
+            await sut.Recommend(ctx);
+
+            items.Should().NotBeEmpty();
+            items[0].Score.Should().Be(2, "because 2 of 100 is 2.");
+        }
+
+        [Fact]
+        public async Task Should_calculate_using_AppCount_when_NumberOfItems_is_not_specified()
+        {
+            var appId = base.CreateApplication("partitionTest1", FirstUserId);
+            CreateReportAndIncident(appId, out _reportId, out _incidentId);
+            var items = new List<RecommendedIncident>();
+            var ctx = new RecommendIncidentContext(items) { ApplicationId = appId };
+            var def = new PartitionDefinition(appId, "Users2", "usrs2");
+            await _repository.CreateAsync(def);
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Ada"));
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Key"));
+            await _repository.CreateAsync(new ApplicationPartitionValue(def.Id, "Doc"));
+            await _repository.CreateAsync(new IncidentPartitionValue(def.Id, _incidentId, 1));
+            await _repository.CreateAsync(new IncidentPartitionValue(def.Id, _incidentId, 2));
+            _uow.SaveChanges();
+
+            var sut = new SuggestPartitionIncidents(_repository);
+            await sut.Recommend(ctx);
+
+            items.Should().NotBeEmpty();
+            items[0].Score.Should().Be(66, "because 2 of 3 is 66%.");
+        }
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/SimpleDbTest.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/SimpleDbTest.cs
new file mode 100644
index 00000000..9ffea61b
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/SimpleDbTest.cs
@@ -0,0 +1,134 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data.Common;
+using System.Data.SqlClient;
+using Coderr.Server.App;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Tests
+{
+    public class SimpleDbTest : IDisposable
+    {
+        private readonly List<DbConnection> _connections = new List<DbConnection>();
+
+        public void Dispose()
+        {
+            foreach (var connection in _connections)
+            {
+                connection.Dispose();
+            }
+        }
+
+        public void FillCommonIncidentData()
+        {
+            var random = new Random();
+            using (var uow = OpenUow())
+            {
+                using (var cmd = uow.CreateDbCommand())
+                {
+                    cmd.CommandText =
+                        @"DELETE FROM CommonIncidentProgressTracking";
+                    cmd.ExecuteNonQuery();
+                }
+
+                var date = DateTime.Today.AddMonths(-12).ToFirstDayOfMonth();
+                var incidentId = 1000;
+                int monthIndex = 0;
+                while (date < DateTime.Today)
+                {
+                    using (var cmd = uow.CreateDbCommand())
+                    {
+                        cmd.CommandText =
+                            @"INSERT INTO CommonIncidentProgressTracking (IncidentId, ApplicationId, CreatedAtUtc, AssignedAtUtc, AssignedToId, ClosedById, ClosedAtUtc, ReOpenCount, ReOpenedAtUtc, VersionCount, Versions)
+                                        VALUES (@incidentId, @applicationId, @creationDate, @assignDate, @accountId, @accountId, @closeDate, 1, GetUtcDate(), 1, '1.0')";
+                        cmd.AddParameter("incidentId", incidentId++);
+                        cmd.AddParameter("applicationId", 1);
+                        cmd.AddParameter("creationDate", date.AddMinutes(random.Next(0, 60 * 24)));
+                        var multiplier = GetDaysMultiplier(monthIndex);
+                        cmd.AddParameter("assignDate", date.AddDays(1 * multiplier).AddMinutes(random.Next(0, 60 * 24)));
+                        cmd.AddParameter("accountId", 1);
+                        cmd.AddParameter("closeDate", date.AddDays(2 * multiplier).AddMinutes(random.Next(0, 60 * 24)));
+                        cmd.ExecuteNonQuery();
+
+                        if (monthIndex >= 11)
+                        {
+                            cmd.Parameters["incidentId"].Value = incidentId++;
+                            cmd.ExecuteNonQuery();
+                        }
+                        if (monthIndex >= 12)
+                        {
+                            cmd.Parameters["incidentId"].Value = incidentId++;
+                            cmd.ExecuteNonQuery();
+                        }
+                    }
+
+                    date = date.AddMonths(1);
+                    monthIndex++;
+                }
+
+                monthIndex = 0;
+                date = DateTime.Today.AddMonths(-12).ToFirstDayOfMonth();
+                while (date < DateTime.Today)
+                {
+                    using (var cmd = uow.CreateDbCommand())
+                    {
+                        cmd.CommandText =
+                            @"INSERT INTO CommonIncidentProgressTracking (IncidentId, ApplicationId, CreatedAtUtc, AssignedAtUtc, AssignedToId, ClosedById, ClosedAtUtc, ReOpenCount, ReOpenedAtUtc, VersionCount, Versions)
+                                        VALUES (@incidentId, @applicationId, @creationDate, @assignDate, @accountId, @accountId, @closeDate, 1, GetUtcDate(), 1, '1.0')";
+                        cmd.AddParameter("incidentId", incidentId++);
+                        cmd.AddParameter("applicationId", 2);
+                        cmd.AddParameter("creationDate", date.AddMinutes(random.Next(0, 60 * 24)));
+                        var multiplier = GetDaysMultiplier(monthIndex);
+                        cmd.AddParameter("assignDate", date.AddDays(2 * multiplier).AddMinutes(random.Next(0, 60 * 24)));
+                        cmd.AddParameter("accountId", 1);
+                        cmd.AddParameter("closeDate", date.AddDays(3 * multiplier).AddMinutes(random.Next(0, 60 * 24)));
+                        cmd.ExecuteNonQuery();
+
+                        if (monthIndex >= 11)
+                        {
+                            cmd.Parameters["incidentId"].Value = incidentId++;
+                            cmd.ExecuteNonQuery();
+                        }
+                        if (monthIndex >= 12)
+                        {
+                            cmd.Parameters["incidentId"].Value = incidentId++;
+                            cmd.ExecuteNonQuery();
+                        }
+                    }
+
+                    date = date.AddMonths(1);
+                    monthIndex++;
+                }
+
+                uow.SaveChanges();
+            }
+        }
+
+        private static int GetDaysMultiplier(int monthIndex)
+        {
+            var multiplier = monthIndex == 10
+                ? 2
+                : monthIndex == 11
+                    ? 3
+                    : 1;
+            return multiplier;
+        }
+
+        public DbConnection OpenDb()
+        {
+            var conStr = ConfigurationManager.ConnectionStrings["IntegrationDb"];
+
+            var connection = new SqlConnection(conStr.ConnectionString);
+            connection.Open();
+            _connections.Add(connection);
+            return connection;
+        }
+
+        public AdoNetUnitOfWork OpenUow()
+        {
+            var con = OpenDb();
+            return new AdoNetUnitOfWork(con);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/TestConfigStore.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/TestConfigStore.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/TestConfigStore.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/TestConfigStore.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Xunit/MethodLogger.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/MethodLogger.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Xunit/MethodLogger.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/MethodLogger.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Xunit/XunitTestAssemblyRunnerWithAssemblyFixture.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/XunitTestAssemblyRunnerWithAssemblyFixture.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Xunit/XunitTestAssemblyRunnerWithAssemblyFixture.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/XunitTestAssemblyRunnerWithAssemblyFixture.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Xunit/XunitTestCollectionRunnerWithAssemblyFixture.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/XunitTestCollectionRunnerWithAssemblyFixture.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Xunit/XunitTestCollectionRunnerWithAssemblyFixture.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/XunitTestCollectionRunnerWithAssemblyFixture.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkExecutorWithAssemblyFixture.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkExecutorWithAssemblyFixture.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkExecutorWithAssemblyFixture.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkExecutorWithAssemblyFixture.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkWithAssemblyFixture.cs b/src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkWithAssemblyFixture.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkWithAssemblyFixture.cs
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/Xunit/XunitTestFrameworkWithAssemblyFixture.cs
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/app.config b/src/Server/Data/Coderr.Server.SqlServer.Tests/app.config
similarity index 98%
rename from src/Server/Coderr.Server.SqlServer.Tests/app.config
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/app.config
index a5929ca5..e947cafc 100644
--- a/src/Server/Coderr.Server.SqlServer.Tests/app.config
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/app.config
@@ -1,8 +1,8 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-
-<configuration>
-  <connectionStrings>
-    <add name="Db" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog={DbName};AttachDBFilename=|DataDirectory|\{DbName}.mdf;Integrated Security=True;Connection Timeout=5" providerName="System.Data.SqlClient" />
-  </connectionStrings>
-
+﻿<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+  <connectionStrings>
+    <add name="Db" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog={DbName};AttachDBFilename=|DataDirectory|\{DbName}.mdf;Integrated Security=True;Connection Timeout=5" providerName="System.Data.SqlClient" />
+  </connectionStrings>
+
 </configuration>
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/codeRR.Server.SqlServer.Tests.v3.ncrunchproject b/src/Server/Data/Coderr.Server.SqlServer.Tests/codeRR.Server.SqlServer.Tests.v3.ncrunchproject
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer.Tests/codeRR.Server.SqlServer.Tests.v3.ncrunchproject
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/codeRR.Server.SqlServer.Tests.v3.ncrunchproject
diff --git a/src/Server/Data/Coderr.Server.SqlServer.Tests/liveTables.sql b/src/Server/Data/Coderr.Server.SqlServer.Tests/liveTables.sql
new file mode 100644
index 00000000..e1e598fc
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/liveTables.sql
@@ -0,0 +1,42 @@
+﻿IF OBJECT_ID(N'dbo.[Settings]', N'U') IS NULL
+BEGIN
+	CREATE TABLE [dbo].[Settings](
+		[Section] [varchar](50) NOT NULL,
+		[Name] [varchar](50) NOT NULL,
+		[Value] [varchar](512),
+	 ) ON [PRIMARY]
+ END
+
+CREATE TABLE PartitionDefinitions
+(
+	Id int not null identity primary key,
+	ApplicationId int not null CONSTRAINT FK_PartitionDefinitions_Applications REFERENCES Applications (Id) ON DELETE CASCADE,
+	Name varchar(40) not null,
+	NumberOfItems int null,
+	PartitionKey varchar(50) not null,
+	Weight int not null default (1)
+);
+
+CREATE TABLE InboundPartitionValues
+(
+	Id int not null identity primary key,
+	IncidentId int not null  CONSTRAINT FK_PartitionInboundValues_Incidents REFERENCES Incidents (Id) ON DELETE CASCADE,
+	PartitionKey varchar(40) not null,
+	Value varchar(40) not null,
+);
+
+CREATE TABLE IncidentPartitionValues
+(
+	Id int not null identity primary key,
+	PartitionId int not null, --får felet multiple cascade path :( CONSTRAINT FK_IncidentPartitionValues_PartitionDefinitions REFERENCES PartitionDefinitions (Id) ON DELETE SET NULL,
+	IncidentId int not null CONSTRAINT FK_IncidentPartitionValues_Incidents REFERENCES Incidents (Id) ON DELETE CASCADE,
+	Value varchar(40) not null
+);
+
+CREATE TABLE ApplicationPartitionValues
+(
+	Id int not null identity primary key,
+	PartitionId int not null CONSTRAINT FK_ApplicationPartitionValues_PartitionDefinitions REFERENCES PartitionDefinitions (Id) ON DELETE CASCADE,
+	Value varchar(MAX) not null
+);
+
diff --git a/src/Server/Coderr.Server.SqlServer.Tests/log4net.config b/src/Server/Data/Coderr.Server.SqlServer.Tests/log4net.config
similarity index 97%
rename from src/Server/Coderr.Server.SqlServer.Tests/log4net.config
rename to src/Server/Data/Coderr.Server.SqlServer.Tests/log4net.config
index edb55826..4a503902 100644
--- a/src/Server/Coderr.Server.SqlServer.Tests/log4net.config
+++ b/src/Server/Data/Coderr.Server.SqlServer.Tests/log4net.config
@@ -1,20 +1,20 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-
-<log4net>
-
-  <appender name="StandardAppender" type="log4net.Appender.RollingFileAppender">
-    <file value=".\logs\CoderrTests.log" />
-    <appendToFile value="true" />
-    <rollingStyle value="Date" />
-    <PreserveLogFileNameExtension value="true" />
-    <datePattern value="yyyy-MM-dd" />
-    <layout type="log4net.Layout.PatternLayout">
-      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
-    </layout>
-  </appender>
-
-  <root>
-    <level value="ALL" />
-    <appender-ref ref="StandardAppender" />
-  </root>
+﻿<?xml version="1.0" encoding="utf-8"?>
+
+<log4net>
+
+  <appender name="StandardAppender" type="log4net.Appender.RollingFileAppender">
+    <file value=".\logs\CoderrTests.log" />
+    <appendToFile value="true" />
+    <rollingStyle value="Date" />
+    <PreserveLogFileNameExtension value="true" />
+    <datePattern value="yyyy-MM-dd" />
+    <layout type="log4net.Layout.PatternLayout">
+      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
+    </layout>
+  </appender>
+
+  <root>
+    <level value="ALL" />
+    <appender-ref ref="StandardAppender" />
+  </root>
 </log4net>
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Coderr.Server.SqlServer.csproj b/src/Server/Data/Coderr.Server.SqlServer/Coderr.Server.SqlServer.csproj
new file mode 100644
index 00000000..36d80866
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Coderr.Server.SqlServer.csproj
@@ -0,0 +1,30 @@
+﻿<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+    <RootNamespace>Coderr.Server.SqlServer</RootNamespace>
+    <AssemblyName>Coderr.Server.SqlServer</AssemblyName>
+    <Configurations>Debug;Release;Premise</Configurations>
+  </PropertyGroup>
+  <ItemGroup>
+    <PackageReference Include="DnsClient" Version="1.6.0" />
+    <PackageReference Include="DotNetCqs" Version="2.1.1" />
+    <PackageReference Include="Griffin.Framework" Version="2.1.1" />
+    <PackageReference Include="log4net" Version="2.0.14" />
+    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\App\Coderr.Server.Api\Coderr.Server.Api.csproj" />
+    <ProjectReference Include="..\..\App\Coderr.Server.App\Coderr.Server.App.csproj" />
+    <ProjectReference Include="..\..\App\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
+    <ProjectReference Include="..\..\Common\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
+    <ProjectReference Include="..\..\Reporting\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj" />
+    <ProjectReference Include="..\..\Reporting\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <EmbeddedResource Include="Schema\*\*.sql" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Accounts/AccountMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Accounts/AccountMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Accounts/AccountMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Accounts/AccountMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Accounts/AccountRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Accounts/AccountRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Accounts/AccountRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Accounts/AccountRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/GetAccountEmailByIdHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/GetAccountEmailByIdHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/GetAccountEmailByIdHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/GetAccountEmailByIdHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/ListAccountsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/ListAccountsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/ListAccountsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Accounts/QueryHandlers/ListAccountsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/ApiKeys/ApiKeyRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/ApiKeyRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/ApiKeys/ApiKeyRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/ApiKeyRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Commands/CreateApiKeyHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Commands/CreateApiKeyHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Commands/CreateApiKeyHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Commands/CreateApiKeyHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Commands/DeleteApiKeyHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Commands/DeleteApiKeyHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Commands/DeleteApiKeyHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Commands/DeleteApiKeyHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Commands/EditApiKeyHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Commands/EditApiKeyHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Commands/EditApiKeyHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Commands/EditApiKeyHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/ApiKeyMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/ApiKeyMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/ApiKeyMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/ApiKeyMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/IntMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/IntMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/IntMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Mappings/IntMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Queries/GetApiKeyHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Queries/GetApiKeyHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Queries/GetApiKeyHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Queries/GetApiKeyHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Queries/ListApiKeysHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Queries/ListApiKeysHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/ApiKeys/Queries/ListApiKeysHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/ApiKeys/Queries/ListApiKeysHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationGroup.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationGroup.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationGroup.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationGroup.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMap.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMap.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMap.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMap.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationGroupMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/ApplicationRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/ApplicationRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/CreateApplicationGroupHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/CreateApplicationGroupHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/CreateApplicationGroupHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/CreateApplicationGroupHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/DeleteApplicationGroupHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/DeleteApplicationGroupHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/DeleteApplicationGroupHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/DeleteApplicationGroupHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/GetApplicationByAppKeyHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/GetApplicationByAppKeyHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/GetApplicationByAppKeyHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/GetApplicationByAppKeyHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupMapHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupMapHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupMapHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupMapHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationGroupsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationIdByKeyHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationIdByKeyHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationIdByKeyHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationIdByKeyHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationOverviewHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationOverviewHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationOverviewHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/Queries/GetApplicationOverviewHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Applications/SetApplicationGroupHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Applications/SetApplicationGroupHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Applications/SetApplicationGroupHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Applications/SetApplicationGroupHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Environments/ApplicationEnvironmentMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Environments/ApplicationEnvironmentMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Environments/ApplicationEnvironmentMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Environments/ApplicationEnvironmentMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Environments/DeleteAbandonedEnvironments.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Environments/DeleteAbandonedEnvironments.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Environments/DeleteAbandonedEnvironments.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Environments/DeleteAbandonedEnvironments.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Environments/EnvironmentMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Environments/EnvironmentMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Environments/EnvironmentMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Environments/EnvironmentMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Environments/EnvironmentRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Environments/EnvironmentRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Environments/EnvironmentRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Environments/EnvironmentRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Environments/GetEnvironmentsResultItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Environments/GetEnvironmentsResultItemMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Environments/GetEnvironmentsResultItemMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Environments/GetEnvironmentsResultItemMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Feedback/CheckForFeedbackNotificationsToSend.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/CheckForFeedbackNotificationsToSend.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Feedback/CheckForFeedbackNotificationsToSend.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/CheckForFeedbackNotificationsToSend.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Feedback/DeleteAbandonedFeedback.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/DeleteAbandonedFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Feedback/DeleteAbandonedFeedback.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/DeleteAbandonedFeedback.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Feedback/FeedbackEntityMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/FeedbackEntityMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Feedback/FeedbackEntityMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/FeedbackEntityMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Feedback/FeedbackRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/FeedbackRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Feedback/FeedbackRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/FeedbackRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Feedback/SubmitFeedbackHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/SubmitFeedbackHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Feedback/SubmitFeedbackHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Feedback/SubmitFeedbackHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedFeedback.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedFeedback.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedFeedback.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedSimilarities.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedSimilarities.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedSimilarities.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/DeleteAbandonedSimilarities.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/IncidentMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/IncidentMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/IncidentMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/IncidentMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/IncidentRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/IncidentRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/IncidentRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/IncidentRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/IncidentSummaryMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/IncidentSummaryMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/IncidentSummaryMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/IncidentSummaryMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentResultItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentResultItemMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentResultItemMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentResultItemMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/FindIncidentsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetCollectionHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetCollectionHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetCollectionHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetCollectionHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePage.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePage.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePage.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePage.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePageResultMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePageResultMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePageResultMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentForClosePageResultMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentResultMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentResultMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentResultMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentResultMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentStatisticsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentStatisticsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentStatisticsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetIncidentStatisticsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListResultItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListResultItemMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListResultItemMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/Queries/GetReportListResultItemMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Incidents/ReportDayMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/ReportDayMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Incidents/ReportDayMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Incidents/ReportDayMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Invitations/GetInvitationByKeyHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Invitations/GetInvitationByKeyHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Invitations/GetInvitationByKeyHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Invitations/GetInvitationByKeyHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Invitations/InvitationMapping.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Invitations/InvitationMapping.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Invitations/InvitationMapping.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Invitations/InvitationMapping.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Invitations/InvitationRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Invitations/InvitationRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Invitations/InvitationRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Invitations/InvitationRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Notifications/BrowserSubscriptionMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Notifications/BrowserSubscriptionMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Notifications/BrowserSubscriptionMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Notifications/BrowserSubscriptionMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Notifications/NotificationRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Notifications/NotificationRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Notifications/NotificationRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Notifications/NotificationRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Notifications/NotificationService.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Notifications/NotificationService.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Notifications/NotificationService.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Notifications/NotificationService.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Notifications/UserNotificationSettingsMap.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Notifications/UserNotificationSettingsMap.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Notifications/UserNotificationSettingsMap.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Notifications/UserNotificationSettingsMap.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Reports/ErrorReportDtoMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Reports/ErrorReportDtoMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Reports/ErrorReportDtoMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Reports/ErrorReportDtoMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Reports/ErrorReportRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Reports/ErrorReportRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Reports/ErrorReportRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Reports/ErrorReportRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Reports/ReportMappingMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Reports/ReportMappingMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Reports/ReportMappingMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Reports/ReportMappingMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Settings/AccountSetting.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Settings/AccountSetting.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Settings/AccountSetting.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Settings/AccountSetting.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Settings/AccountSettingMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Settings/AccountSettingMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Settings/AccountSettingMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Settings/AccountSettingMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Settings/GetAccountSettingsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Settings/SaveAccountSettingsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Users/ApplicationTeamMemberMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Users/ApplicationTeamMemberMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Users/ApplicationTeamMemberMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Users/ApplicationTeamMemberMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Users/UserMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Users/UserMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Users/UserMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Users/UserMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Core/Users/UserRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Core/Users/UserRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Core/Users/UserRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Core/Users/UserRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/DateTimeExtensions.cs b/src/Server/Data/Coderr.Server.SqlServer/DateTimeExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/DateTimeExtensions.cs
rename to src/Server/Data/Coderr.Server.SqlServer/DateTimeExtensions.cs
diff --git a/src/Server/Coderr.Server.SqlServer/DbConverters.cs b/src/Server/Data/Coderr.Server.SqlServer/DbConverters.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/DbConverters.cs
rename to src/Server/Data/Coderr.Server.SqlServer/DbConverters.cs
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/AppCountGeneratorExtensions.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/AppCountGeneratorExtensions.cs
new file mode 100644
index 00000000..2d6f2abb
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/AppCountGeneratorExtensions.cs
@@ -0,0 +1,141 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using Coderr.Client;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+
+namespace Coderr.Server.SqlServer.Insights
+{
+    public static class AppCountGeneratorExtensions
+    {
+        public static void AppCountInsight(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            int applicationId,
+            Func<ItemWithCount, int> groupField,
+            Func<IGrouping<int, ItemWithCount>, double> valueAggregation = null)
+        {
+            if (valueAggregation == null)
+            {
+                valueAggregation = x => x.Sum(y => y.Count);
+            }
+
+            context.AppCountKpi(kpi, groupField);
+            context.AppAccountCountTopList(kpi, groupField, valueAggregation);
+            context.AppCountTrend(kpi, groupField);
+            context.IndicatorContext.AddIndicator(applicationId, kpi);
+        }
+
+        /// <summary>
+        /// We group
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="kpi"></param>
+        /// <param name="groupField"></param>
+
+        public static void AppCountKpi(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<ItemWithCount, int> groupField)
+        {
+            var periodValue = context.Incidents
+                .Where(x => x.When >= context.IndicatorContext.PeriodStartDate
+                            && x.When <= context.IndicatorContext.PeriodEndDate)
+                .GroupBy(groupField)
+                .FirstOrDefault();
+            kpi.PeriodValue = periodValue?.Sum(x => x.Count).DivideWith(3);
+            kpi.PeriodValueId = periodValue?.Key;
+
+
+            var valueItem = context.Incidents
+                .Where(x => x.When >= context.IndicatorContext.ValueStartDate
+                            && x.When <= context.IndicatorContext.ValueEndDate)
+                .GroupBy(groupField)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Sum(x => x.Count);
+            kpi.ValueId = valueItem?.Key;
+        }
+
+        public static void AppCountTrend(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<ItemWithCount, int> groupField)
+        {
+            var lines = new List<TrendLine>();
+            var incidentsPerAppOrdered = context.Incidents
+                .GroupBy(groupField)
+                .OrderByKpi(x => x.Sum(y => y.Count), kpi)
+                .Take(5);
+            foreach (var valuesPerAccount in incidentsPerAppOrdered)
+            {
+                if (valuesPerAccount.Key == 0)
+                {
+                    Err.ReportLogicError("Expected an accountId, got 0.", new
+                    {
+                        apps = incidentsPerAppOrdered.Select(x => x.Key).ToArray(),
+                        kpi
+                    });
+                    continue;
+                }
+
+                var values = new TrendLineValue[context.IndicatorContext.TrendDates.Length];
+                for (var i = 0; i < context.IndicatorContext.TrendDates.Length; i++)
+                {
+                    var value = valuesPerAccount
+                        .Where(x => x.When == context.IndicatorContext.TrendDates[i])
+                        .DefaultIfEmpty()
+                        .Sum(x => x?.Count ?? 0);
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerAccount.Key, values));
+            }
+
+            kpi.TrendLines = lines.ToArray();
+        }
+
+        public static void AppCountTrend2(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<ItemWithCount, int> groupField)
+        {
+            var lines = new List<TrendLine>();
+            var values = new TrendLineValue[context.IndicatorContext.TrendDates.Length];
+            for (var i = 0; i < context.IndicatorContext.TrendDates.Length; i++)
+            {
+                var value = context.Incidents
+                    .Where(x => x.When == context.IndicatorContext.TrendDates[i])
+                    .Sum(x => x.Count);
+                values[i] = new TrendLineValue(value);
+            }
+
+            lines.Add(new TrendLine("Count", values));
+            kpi.TrendLines = lines.ToArray();
+        }
+
+        /// <summary>
+        /// For the toplist, we take the average values for each application/account
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="kpi"></param>
+        /// <param name="groupField"></param>
+        /// <param name="valueAggregation"></param>
+        public static void AppAccountCountTopList(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<ItemWithCount, int> groupField,
+            Func<IGrouping<int, ItemWithCount>, double> valueAggregation)
+        {
+
+            kpi.Toplist = context.Incidents
+                .GroupBy(groupField)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = valueAggregation(x),
+                    ValueName = kpi.ValueUnit
+                })
+                .OrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/AppDurationGeneratorExtensions.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/AppDurationGeneratorExtensions.cs
new file mode 100644
index 00000000..8914bad7
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/AppDurationGeneratorExtensions.cs
@@ -0,0 +1,108 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+
+namespace Coderr.Server.SqlServer.Insights
+{
+    public static class AppDurationGeneratorExtensions
+    {
+        public static void AppDurationInsight(this DurationBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            int applicationId,
+            Func<MonthDuration, int> groupField,
+            Func<IGrouping<int, MonthDuration>, double> toplistAggregation = null)
+        {
+            if (toplistAggregation == null)
+            {
+                toplistAggregation = x => x.Average(y => y.Duration.TotalDays);
+            }
+
+            context.AppDurationKeyFigure(kpi, groupField);
+            context.AppDurationTrend(kpi, groupField);
+            context.AppDurationTopList(kpi, groupField, toplistAggregation);
+            context.IndicatorContext.AddIndicator(applicationId, kpi);
+        }
+
+        public static void AppDurationKeyFigure(this DurationBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<MonthDuration, int> groupField)
+        {
+            var periodValue = context.Incidents
+                .Where(x => x.When >= context.IndicatorContext.PeriodStartDate
+                            && x.When <= context.IndicatorContext.PeriodEndDate)
+                .GroupBy(groupField)
+                .OrderByKpi(y => y.Average(x => x.Duration.TotalDays), kpi)
+                .FirstOrDefault();
+            kpi.PeriodValue = periodValue?.Average(x => x.Duration.TotalDays);
+            kpi.PeriodValueId = periodValue?.Key;
+
+
+            var valueItem = context.Incidents
+                .Where(x => x.When >= context.IndicatorContext.ValueStartDate
+                            && x.When <= context.IndicatorContext.ValueEndDate)
+                .GroupBy(groupField)
+                .OrderByKpi(y => y.Average(x => x.Duration.TotalDays), kpi)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Average(x => x.Duration.TotalDays);
+            kpi.ValueId = valueItem?.Key;
+        }
+
+        public static void AppDurationTrend(this DurationBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<MonthDuration, int> groupField)
+        {
+            var lines = new List<TrendLine>();
+            var incidentsPerAppOrdered = context.Incidents
+                .GroupBy(groupField)
+                .OrderByKpi(x => x.Count(), kpi)
+                .Take(5);
+            foreach (var valuesPerAccount in incidentsPerAppOrdered)
+            {
+                double lastValue = 0;
+                var values = new TrendLineValue[context.IndicatorContext.TrendDates.Length];
+                for (var i = 0; i < context.IndicatorContext.TrendDates.Length; i++)
+                {
+                    var value = valuesPerAccount
+                        .Where(x => x.When == context.IndicatorContext.TrendDates[i])
+                        .DefaultIfEmpty()
+                        .Average(x => x?.Duration.TotalDays ?? 0);
+                    if (value < 0.5)
+                    {
+                        values[i] = new TrendLineValue(lastValue);
+                    }
+                    else
+                    {
+                        values[i] = new TrendLineValue(value);
+                        lastValue = value;
+                    }
+                }
+
+                lines.Add(new TrendLine(valuesPerAccount.Key, values));
+            }
+
+            kpi.TrendLines = lines.ToArray();
+        }
+
+        public static void AppDurationTopList(this DurationBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<MonthDuration, int> groupField,
+            Func<IGrouping<int, MonthDuration>, double> valueAggregation)
+        {
+            kpi.Toplist = context.Incidents
+                .GroupBy(groupField)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = valueAggregation(x),
+                    ValueName = kpi.ValueUnit
+                })
+                .OrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/AssignedCountIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/AssignedCountIndicator.cs
new file mode 100644
index 00000000..5a64d140
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/AssignedCountIndicator.cs
@@ -0,0 +1,70 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Applications
+{
+    [ContainerService]
+    class AssignedCountIndicator : CounterIndicator
+    {
+        public AssignedCountIndicator(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+
+        private const string IndicatorName = "AssignedCount";
+        private const string Comment = "Having a low amount of open incidents are great as those who are assigned are also solved.";
+
+        public override async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+            var sql = @"select ApplicationId, cast(FORMAT(AssignedAtUtc,'yyyy-MM-01') as date), count(*), AssignedToId
+                                    from CommonIncidentProgressTracking
+                                    where (AssignedAtUtc >= @startDate AND AssignedAtUtc <= @endDate)
+                                    #AppIdConstraint#
+                                    group by ApplicationId, cast(FORMAT(AssignedAtUtc,'yyyy-MM-01') as date), AssignedToId";
+            var items = await base.ExecuteCountSql(context, sql, true);
+
+            var builderContext = new CountBuilderContext(context, items);
+            var systemInsight = CreateIndicator("Assigned incidents");
+            builderContext.SystemCountInsight(systemInsight, x => x.ApplicationId);
+
+            systemInsight = CreateIndicator("Have most assigned incidents", IndicatorValueComparison.HigherIsBetter, true);
+            builderContext.SystemCountInsight(systemInsight, x => x.ApplicationId);
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+                var appBuilderContext = new CountBuilderContext(context, filtered);
+
+                var appIndicator1 = CreateIndicator("Assigned incidents");
+                appBuilderContext.AppCountInsight(appIndicator1, applicationId, x => x.ApplicationId);
+                appIndicator1.ValueIdType = ValueIdType.None;
+
+                var appIndicator2 = CreateIndicator("Assigned incidents (per developer)", idType: ValueIdType.AccountId, isVariation: true);
+                appBuilderContext.AppCountInsight(appIndicator2, applicationId, x => x.AccountId);
+
+                // Want to use devs as the toplist.
+                appIndicator1.Toplist = appIndicator2.Toplist;
+                appIndicator1.ToplistValueType = appIndicator2.ToplistValueType;
+            }
+
+        }
+
+        private KeyPerformanceIndicator CreateIndicator(string title, IndicatorValueComparison comparisonType = IndicatorValueComparison.LowerIsBetter, bool isVariation = false, ValueIdType idType = ValueIdType.ApplicationId)
+        {
+            return new KeyPerformanceIndicator(IndicatorName, title,
+                comparisonType)
+            {
+                CanBeNormalized = true,
+                Comment = Comment,
+                Description = "Number of incidents that are being corrected.",
+                IsVariation = isVariation,
+                ValueIdType = idType
+            };
+        }
+    }
+
+
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/NewIncidentsIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/NewIncidentsIndicator.cs
new file mode 100644
index 00000000..d3e224a6
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/NewIncidentsIndicator.cs
@@ -0,0 +1,187 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Applications
+{
+    [ContainerService]
+    public class NewIncidentsIndicator : CounterIndicator
+    {
+        public NewIncidentsIndicator(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+
+        private const string IndicatorName = "NewIncidentsCount";
+
+        public override async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+            var sql = @"select ApplicationId, cast(FORMAT(CreatedAtUtc,'yyyy-MM-01') as date) CreatedAt, count(*)
+                                    from CommonIncidentProgressTracking
+                                    where (CreatedAtUtc >= @startDate AND CreatedAtUtc <= @endDate)
+                                    #AppIdConstraint#
+                                    group by cast(FORMAT(CreatedAtUtc,'yyyy-MM-01') as date), ApplicationId";
+            var items = await ExecuteCountSql(context, sql);
+
+            var builderContext = new CountBuilderContext(context, items);
+            var systemInsight = CreateKpiBase("New incidents");
+            builderContext.SystemCountInsight(systemInsight, x => x.ApplicationId);
+
+            systemInsight = CreateKpiBase("Most new incidents", IndicatorValueComparison.HigherIsBetter, true);
+            builderContext.SystemCountInsight(systemInsight, x => x.ApplicationId);
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+                var appBuilderContext = new CountBuilderContext(context, filtered);
+
+                var appInsight = CreateKpiBase("New incidents");
+                appBuilderContext.AppCountInsight(appInsight, applicationId, x => x.ApplicationId);
+                appInsight.PeriodValueId = null;
+                appInsight.ValueId = null;
+                appInsight.Toplist = null;
+            }
+
+        }
+
+        private static KeyPerformanceIndicator CreateKpiBase(string title, IndicatorValueComparison comparisonType = IndicatorValueComparison.LowerIsBetter, bool isVariation = false, ValueIdType idType = ValueIdType.ApplicationId)
+        {
+            return new KeyPerformanceIndicator(IndicatorName, title,
+                comparisonType)
+            {
+                IsVariation = isVariation,
+                CanBeNormalized = true,
+                Comment = "Number of new incidents",
+                Description = "Lower numbers indicates better quality as less unique errors have been reported.",
+                ValueIdType = idType
+            };
+        }
+    }
+
+
+    //[ContainerService]
+    //public class NewIncidentsMetric : CounterKeyMetricGenerator
+    //{
+    //    private readonly IAdoNetUnitOfWork _unitOfWork;
+
+    //    public NewIncidentsMetric(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+    //    {
+    //        _unitOfWork = unitOfWork;
+    //    }
+
+    //    private const string IndicatorName = "NewIncidentsCount";
+
+    //    public override async Task<KeyMetricDataResult> Collect(KeyMetricGeneratorContext context)
+    //    {
+    //        IEnumerable<int> appIds;
+    //        if (context.ApplicationId == null)
+    //        {
+    //            appIds = context.User.Claims
+    //                .Where(x => x.Type == CoderrClaims.Application)
+    //                .Select(x => int.Parse(x.Value));
+    //        }
+    //        else
+    //        {
+    //            appIds = new[] { context.ApplicationId.Value };
+    //        }
+    //        var appIdStr = string.Join(", ", appIds);
+
+    //        var from = DateTime.Today.AddDays(-context.DaysFrom);
+    //        var to = DateTime.Today.AddDays(1).AddSeconds(-1).AddDays(-context.DaysTo);
+
+
+    //        var result = new KeyMetricDataResult { };
+
+    //        if (context.IncludeMetric)
+    //        {
+    //            var sql2 = $@"select count(IncidentId)
+    //                        from CommonIncidentProgressTracking
+    //                        where AssignedAtUtc is null
+    //                        AND CreatedAtUtc >= @from AND CreatedAtUtc <= @to
+    //                        AND ApplicationId IN ({appIdStr})";
+
+    //            result.Application.Metric.Value = (int)_unitOfWork.ExecuteScalar(sql2, new { from, to });
+    //        }
+
+    //        else if (context.IncludeTopList && context.ApplicationId == null)
+    //        {
+    //            var sql2 = $@"select ApplicationId, count(*) Count
+    //                        from CommonIncidentProgressTracking
+    //                        where AssignedAtUtc is null
+    //                        AND CreatedAtUtc >= @from AND CreatedAtUtc <= @to
+    //                        AND ApplicationId IN ({appIdStr})
+    //                        group by ApplicationId";
+
+    //            var data3 = await _unitOfWork.ToListAsync<ItemWithCount>(sql2, new { startDate = from, endDate = to });
+
+    //            result.Application.Toplist = data3
+    //                .Select(x => new MetricToplistItem { Id=x.ApplicationId, Title = context.ApplicationNames[x.ApplicationId], Value = x.Count })
+    //                .OrderByDescending(x => x.Value)
+    //                .ToArray();
+
+    //            if (result.Application.Toplist.Any())
+    //            {
+    //                result.Application.Metric.Value = context.ApplicationNames[result.Application.Toplist[0].Id];
+    //                result.Application.Metric.Comment = $"{result.Application.Toplist[0].Value} errors";
+    //            }
+                
+    //        }
+
+    //        if (context.IncludeChartData)
+    //        {
+    //            var sql = $@"select ApplicationId, cast(FORMAT(CreatedAtUtc,'yyyy-MM-01') as date) When, count(*)
+    //                                from CommonIncidentProgressTracking
+    //                                where (CreatedAtUtc >= @startDate AND CreatedAtUtc <= @endDate)
+    //                                AND ApplicationId IN ({appIdStr})
+    //                                group by cast(FORMAT(CreatedAtUtc,'yyyy-MM-01') as date), ApplicationId";
+    //            var data2 = await _unitOfWork.ToListAsync<ItemWithCount>(sql, new { startDate = from, endDate = to });
+
+    //            var perApp = data2.GroupBy(x=>x.)
+    //            result.Application.ChartData = data2.Select(x=>new TrendLineValue(x.Count))
+    //        }
+    //        var data = new KeyMetricDataResult();
+    //        data.Application = new KeyMetricDataResultItem
+    //        {
+
+    //        }
+
+
+    //        var items = await ExecuteCountSql(context, sql);
+
+    //        var builderContext = new CountBuilderContext(context, items);
+    //        var systemInsight = CreateKpiBase("New incidents");
+    //        builderContext.SystemCountInsight(systemInsight, x => x.ApplicationId);
+
+    //        systemInsight = CreateKpiBase("Most new incidents", IndicatorValueComparison.HigherIsBetter, true);
+    //        builderContext.SystemCountInsight(systemInsight, x => x.ApplicationId);
+
+    //        foreach (var applicationId in context.ApplicationIds)
+    //        {
+    //            var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+    //            var appBuilderContext = new CountBuilderContext(context, filtered);
+
+    //            var appInsight = CreateKpiBase("New incidents");
+    //            appBuilderContext.AppCountInsight(appInsight, applicationId, x => x.ApplicationId);
+    //            appInsight.PeriodValueId = null;
+    //            appInsight.ValueId = null;
+    //            appInsight.Toplist = null;
+    //        }
+
+    //    }
+
+    //    private static KeyPerformanceIndicator CreateKpiBase(string title, IndicatorValueComparison comparisonType = IndicatorValueComparison.LowerIsBetter, bool isVariation = false, ValueIdType idType = ValueIdType.ApplicationId)
+    //    {
+    //        return new KeyPerformanceIndicator(IndicatorName, title,
+    //            comparisonType)
+    //        {
+    //            IsVariation = isVariation,
+    //            CanBeNormalized = true,
+    //            Comment = "Number of new incidents",
+    //            Description = "Lower numbers indicates better quality as less unique errors have been reported.",
+    //            ValueIdType = idType
+    //        };
+    //    }
+    //}
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/RespondTimeIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/RespondTimeIndicator.cs
new file mode 100644
index 00000000..7a39ce7a
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/RespondTimeIndicator.cs
@@ -0,0 +1,80 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Applications
+{
+    [ContainerService]
+    class RespondTimeIndicator : DurationIndicator
+    {
+        public RespondTimeIndicator(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+
+        private const string InidcatorName = "RespondTime";
+
+        public override async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+            var sql = @"SELECT ApplicationId, 
+	                                       cast(FORMAT(CreatedAtUtc,'yyyy-MM-01') as date) CreatedAt, 
+	                                       Duration = AVG(
+                                            CASE 
+                                                WHEN AssignedAtUtc IS NULL 
+                                                THEN DATEDIFF(hour, CreatedAtUtc, GetUtcDate())
+		                                        ELSE DATEDIFF(hour, CreatedAtUtc, AssignedAtUtc)
+	                                       END / 24.0), AssignedToId
+                                    FROM CommonIncidentProgressTracking
+                                    WHERE CreatedAtUtc <= @to AND AssignedAtUtc >= @from
+                                    #AppIdConstraint#
+                                    Group BY ApplicationId, AssignedToId, cast(FORMAT(CreatedAtUtc,'yyyy-MM-01') as date)";
+
+
+            var items = await base.ExecuteCountSql(context, sql, true);
+
+            var systemBuilderContext = new DurationBuilderContext(context, items);
+            var systemInsight = CreateKpiBase("Respond time");
+            systemBuilderContext.SystemDurationInsight(systemInsight, x => x.ApplicationId);
+
+            systemInsight = CreateKpiBase("Highest response time");
+            systemInsight.IsVariation = true;
+            systemBuilderContext.SystemDurationInsight(systemInsight, x => x.ApplicationId);
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+                var appContext = new DurationBuilderContext(context, filtered);
+
+                var appInsight = CreateKpiBase("Respond time");
+                appContext.AppDurationInsight(appInsight, applicationId, x => x.ApplicationId);
+                appInsight.PeriodValueId = null;
+                appInsight.ValueId = null;
+
+                var appInsight2 = CreateKpiBase("Respond time (per developer)", IndicatorValueComparison.HigherIsBetter, true, ValueIdType.AccountId);
+                appInsight2.ValueIdType = ValueIdType.AccountId;
+                appContext.AppDurationInsight(appInsight2, applicationId, x => x.AccountId);
+
+                appInsight.Toplist = appInsight2.Toplist;
+                appInsight.ToplistValueType = appInsight2.ToplistValueType;
+            }
+        }
+
+
+        private KeyPerformanceIndicator CreateKpiBase(string title, IndicatorValueComparison comparisonType = IndicatorValueComparison.LowerIsBetter, bool isVariation = false, ValueIdType idType = ValueIdType.ApplicationId)
+        {
+            return new KeyPerformanceIndicator(InidcatorName, title,
+                comparisonType)
+            {
+                CanBeNormalized = true,
+                Comment = "",
+                Description =
+                    "Number of days (in average) that it takes from the first error report until someone starts to correct an error",
+                IsVariation = isVariation,
+                ValueIdType = idType,
+                ValueUnit = "day(s)"
+            };
+        }
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/SolvedCountIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/SolvedCountIndicator.cs
new file mode 100644
index 00000000..c9abd7aa
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/SolvedCountIndicator.cs
@@ -0,0 +1,82 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Applications
+{
+    /// <summary>
+    /// Number of solved incidents.
+    /// </summary>
+    /// <remarks>
+    ///<para>
+    /// 
+    /// </para>
+    /// </remarks>
+    [ContainerService]
+    class SolvedCountIndicator : CounterIndicator
+    {
+
+        public SolvedCountIndicator(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+
+        private const string IndicatorName = "SolvedIncidentsCount";
+
+        public override async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+
+            var sql = @"select ApplicationId, cast(FORMAT(ClosedAtUtc,'yyyy-MM-01') as date), count(*), ClosedById
+                                    from CommonIncidentProgressTracking
+                                    where (ClosedAtUtc >= @startDate AND ClosedAtUtc <= @endDate)
+                                    #AppIdConstraint#
+                                    group by ApplicationId, cast(FORMAT(ClosedAtUtc,'yyyy-MM-01') as date), ClosedById";
+            var items = await ExecuteCountSql(context, sql, true);
+
+
+            var builderContext = new CountBuilderContext(context, items);
+            var systemInsight = CreateIndicator("Corrected incidents");
+            builderContext.SystemCountInsight(systemInsight, x => x.ApplicationId);
+
+            systemInsight = CreateIndicator("Have Least corrected incidents", IndicatorValueComparison.HigherIsBetter, true);
+            builderContext.SystemCountInsight(systemInsight, x => x.ApplicationId);
+
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+                var appBuilderContext = new CountBuilderContext(context, filtered);
+
+                var appIndicator1 = CreateIndicator("Corrected incidents");
+                appBuilderContext.AppCountInsight(appIndicator1, applicationId, x => x.ApplicationId);
+                appIndicator1.ValueIdType = ValueIdType.None;
+
+                var appIndicator2 = CreateIndicator("Solved incidents (per developer)", idType: ValueIdType.AccountId, isVariation:true);
+                appBuilderContext.AppCountInsight(appIndicator2, applicationId, x => x.AccountId);
+
+                // Want to use devs as the toplist.
+                appIndicator1.Toplist = appIndicator2.Toplist;
+                appIndicator1.ToplistValueType = appIndicator2.ToplistValueType;
+            }
+
+        }
+
+        private static KeyPerformanceIndicator CreateIndicator(string title, IndicatorValueComparison comparisonType = IndicatorValueComparison.HigherIsBetter, bool isVariation = false, ValueIdType idType = ValueIdType.ApplicationId)
+        {
+            var kpi = new KeyPerformanceIndicator(IndicatorName, title,
+                comparisonType)
+            {
+                CanBeNormalized = true,
+                Comment = "Higher amount is better",
+                Description = "Number of incidents that were corrected.",
+                IsVariation = isVariation,
+                ValueIdType = idType
+            };
+            return kpi;
+        }
+    }
+
+
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/WorkTimeIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/WorkTimeIndicator.cs
new file mode 100644
index 00000000..432c6129
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Applications/WorkTimeIndicator.cs
@@ -0,0 +1,73 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Applications
+{
+    [ContainerService]
+    public class WorkTimeIndicator : DurationIndicator
+    {
+
+        public WorkTimeIndicator(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+
+        private const string IndicatorName = "WorkTime";
+
+        public override async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+
+            var sql = @"SELECT ApplicationId, 
+	                                       cast(FORMAT(AssignedAtUtc,'yyyy-MM-01') as date) AssignedAt, 
+	                                       Duration = AVG(
+                                            CASE 
+                                                WHEN ClosedAtUtc IS NULL 
+                                                THEN DATEDIFF(hour, AssignedAtUtc, GetUtcDate())
+		                                        ELSE DATEDIFF(hour, AssignedAtUtc, ClosedAtUtc)
+	                                       END / 24.0)
+                                    FROM CommonIncidentProgressTracking
+                                    WHERE AssignedAtUtc <= @to AND ClosedAtUtc >= @from
+                                    #AppIdConstraint#
+                                    Group BY ApplicationId, cast(FORMAT(AssignedAtUtc,'yyyy-MM-01') as date)";
+            var items = await ExecuteCountSql(context, sql);
+
+            var systemBuilderContext = new DurationBuilderContext(context, items);
+            var systemInsight = CreateKpiBase("Work duration");
+            systemBuilderContext.SystemDurationInsight(systemInsight, x => x.ApplicationId);
+
+            systemInsight = CreateKpiBase("Longest work duration");
+            systemInsight.IsVariation = true;
+            systemBuilderContext.SystemDurationInsight(systemInsight, x => x.ApplicationId);
+
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+                var appContext = new DurationBuilderContext(context, filtered);
+
+                var appInsight = CreateKpiBase("Work duration");
+                appContext.AppDurationInsight(appInsight, applicationId, x => x.ApplicationId);
+                appInsight.PeriodValueId = null;
+                appInsight.ValueId = null;
+                appInsight.ValueIdType = ValueIdType.None;
+            }
+        }
+
+        private KeyPerformanceIndicator CreateKpiBase(string title)
+        {
+            return new KeyPerformanceIndicator(IndicatorName, title,
+                IndicatorValueComparison.LowerIsBetter)
+            {
+                CanBeNormalized = true,
+                Comment = "",
+                Description = "Average time it takes to correct an issue.",
+                ValueUnit = "day(s)",
+                ValueIdType = ValueIdType.ApplicationId
+            };
+        }
+
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/CounterIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/CounterIndicator.cs
new file mode 100644
index 00000000..725f42ad
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/CounterIndicator.cs
@@ -0,0 +1,130 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Data.Common;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Security;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+using Coderr.Server.App.Insights.Metrics;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights
+{
+    public abstract class CounterIndicator : IKeyPerformanceIndicatorGenerator
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        protected CounterIndicator(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public abstract Task CollectAsync(KeyPerformanceIndicatorContext context);
+
+        protected async Task<List<ItemWithCount>> ExecuteCountSql(KeyPerformanceIndicatorContext context,
+            string baseQuery, bool includeAccountId = false)
+        {
+            List<ItemWithCount> items;
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = baseQuery;
+                if (context.ApplicationIds.Length == 0)
+                {
+                    cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#", "");
+                }
+                else
+                {
+                    var commaIds = string.Join(", ", context.ApplicationIds);
+                    cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#",
+                        $" AND ApplicationId IN ({commaIds}) ");
+                }
+
+                cmd.AddParameter("startDate", context.StartDate);
+                cmd.AddParameter("endDate", context.EndDate);
+                items = new List<ItemWithCount>();
+
+                await FillCountItems(cmd, items, includeAccountId);
+            }
+
+            return items;
+        }
+
+        private static async Task FillCountItems(DbCommand cmd, ICollection<ItemWithCount> items, bool includeAccountId)
+        {
+            using (var reader = await cmd.ExecuteReaderAsync())
+            {
+                while (await reader.ReadAsync())
+                {
+                    var item = new ItemWithCount(reader.GetInt32(0), reader.GetDateTime(1))
+                    {
+                        Count = reader.GetInt32(2)
+                    };
+                    if (includeAccountId) item.AccountId = reader.GetInt32(3);
+                    items.Add(item);
+                }
+            }
+        }
+    }
+
+
+    public abstract class CounterKeyMetricGenerator : IKeyMetricGenerator
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        protected CounterKeyMetricGenerator(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public abstract Task<KeyMetricDataResult> Collect(KeyMetricGeneratorContext context);
+
+        protected async Task<ICollection<ItemWithCount>> ExecuteCountSql(KeyMetricGeneratorContext context,
+            string baseQuery, bool includeAccountId = false)
+        {
+            List<ItemWithCount> items;
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = baseQuery;
+                IEnumerable<int> appIds;
+                if (context.ApplicationId == null)
+                {
+                    appIds = context.User.Claims
+                        .Where(x => x.Type == CoderrClaims.Application)
+                        .Select(x => int.Parse(x.Value));
+                }
+                else
+                {
+                    appIds = new[] {context.ApplicationId.Value};
+                }
+
+                var commaIds = string.Join(", ", appIds);
+                cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#",
+                    $" AND ApplicationId IN ({commaIds}) ");
+                cmd.AddParameter("startDate", DateTime.Today.AddDays(-context.DaysFrom));
+                cmd.AddParameter("endDate", DateTime.Today.AddDays(1).AddSeconds(-1).AddDays(-context.DaysTo));
+                items = new List<ItemWithCount>();
+
+                await FillCountItems(cmd, items, includeAccountId);
+            }
+
+            return items;
+        }
+
+        private static async Task FillCountItems(DbCommand cmd, ICollection<ItemWithCount> items, bool includeAccountId)
+        {
+            using (var reader = await cmd.ExecuteReaderAsync())
+            {
+                while (await reader.ReadAsync())
+                {
+                    var item = new ItemWithCount(reader.GetInt32(0), reader.GetDateTime(1))
+                    {
+                        Count = reader.GetInt32(2)
+                    };
+                    if (includeAccountId) item.AccountId = reader.GetInt32(3);
+                    items.Add(item);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/DurationIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/DurationIndicator.cs
new file mode 100644
index 00000000..b4b8e3c6
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/DurationIndicator.cs
@@ -0,0 +1,76 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Data.Common;
+using System.Threading.Tasks;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights
+{
+    public abstract class DurationIndicator : IKeyPerformanceIndicatorGenerator
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        protected DurationIndicator(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public abstract Task CollectAsync(KeyPerformanceIndicatorContext context);
+
+        /// <summary>
+        ///     Execute count query
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="baseQuery"></param>
+        /// <param name="includeAccountId">The query returns four columns where the last one is the account id. (Required for user indicators) </param>
+        /// <returns></returns>
+        protected async Task<List<MonthDuration>> ExecuteCountSql(KeyPerformanceIndicatorContext context,
+            string baseQuery, bool includeAccountId = false)
+        {
+            List<MonthDuration> items;
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = baseQuery;
+                if (context.ApplicationIds.Length == 0)
+                {
+                    cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#", "");
+                }
+                else
+                {
+                    var commaIds = string.Join(", ", context.ApplicationIds);
+                    cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#",
+                        $" AND ApplicationId IN ({commaIds}) ");
+                }
+
+                cmd.AddParameter("from", context.StartDate);
+                cmd.AddParameter("to", context.EndDate);
+                items = new List<MonthDuration>();
+
+                await FillCountItems(cmd, items, includeAccountId);
+            }
+
+            return items;
+        }
+
+        private static async Task FillCountItems(DbCommand cmd, ICollection<MonthDuration> items, bool includeAccountId)
+        {
+            using (var reader = await cmd.ExecuteReaderAsync())
+            {
+                while (await reader.ReadAsync())
+                {
+                    var value = decimal.ToDouble(reader.GetDecimal(2));
+                    var item = new MonthDuration(reader.GetDateTime(1), TimeSpan.FromDays(value))
+                    {
+                        ApplicationId = reader.GetInt32(0)
+                    };
+                    if (includeAccountId)
+                        item.AccountId = reader.GetInt32(3);
+
+                    items.Add(item);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/GeneratorExtensions.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/GeneratorExtensions.cs
new file mode 100644
index 00000000..11160e7d
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/GeneratorExtensions.cs
@@ -0,0 +1,567 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+
+namespace Coderr.Server.SqlServer.Insights
+{
+    public class CountBuilderContext
+    {
+        public CountBuilderContext(KeyPerformanceIndicatorContext indicatorContext, IReadOnlyList<ItemWithCount> incidents)
+        {
+            IndicatorContext = indicatorContext;
+            Incidents = incidents;
+        }
+
+        public KeyPerformanceIndicatorContext IndicatorContext { get; private set; }
+        public IReadOnlyList<ItemWithCount> Incidents { get; private set; }
+    }
+
+    public class DurationBuilderContext
+    {
+        public DurationBuilderContext(KeyPerformanceIndicatorContext indicatorContext, IReadOnlyList<MonthDuration> incidents)
+        {
+            IndicatorContext = indicatorContext;
+            Incidents = incidents;
+        }
+
+        public KeyPerformanceIndicatorContext IndicatorContext { get; private set; }
+        public IReadOnlyList<MonthDuration> Incidents { get; private set; }
+    }
+
+
+    public static class GeneratorExtensions
+    {
+        public static int? AsInt(this double? value)
+        {
+            if (value == null)
+                return null;
+
+            return Convert.ToInt32(value);
+        }
+
+        public static int AsInt(this double value)
+        {
+            return Convert.ToInt32(value);
+        }
+
+
+        /// <summary>
+        /// Generate an incident count indicator for a specific application.
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="kpi"></param>
+        /// <param name="applicationId"></param>
+        /// <param name="incidents"></param>
+        /// <remarks>
+        ///<para>
+        ///Toplist are for developers.
+        /// Trend is the average count trend (no grouping)
+        /// Value is total
+        /// </para>
+        /// </remarks>
+        public static void BuildIncidentCountForApplication(this KeyPerformanceIndicatorContext context,
+            KeyPerformanceIndicator kpi, int applicationId, IReadOnlyCollection<ItemWithCount> incidents)
+        {
+            var periodValue = incidents
+                .Where(x => x.When >= context.PeriodStartDate
+                            && x.When <= context.PeriodEndDate)
+                .DefaultIfEmpty()
+                .Sum(y => y?.Count ?? 0);
+            kpi.PeriodValue = periodValue;
+
+
+            var valueItem = incidents
+                .Where(x => x.When >= context.ValueStartDate
+                            && x.When <= context.ValueEndDate)
+                .DefaultIfEmpty()
+                .Sum(y => y?.Count ?? 0);
+            kpi.Value = valueItem;
+
+            kpi.Toplist = incidents
+                .GroupBy(x => x.AccountId)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = x.Average(y => y.Count).AsInt(),
+                    ValueName = kpi.ValueUnit
+                })
+                .OrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+
+            var lines = new List<TrendLine>();
+            var values = new TrendLineValue[context.TrendDates.Length];
+            for (var i = 0; i < context.TrendDates.Length; i++)
+            {
+                var value = incidents
+                    .Where(x => x.When == context.TrendDates[i])
+                    .Sum(x => x.Count);
+                values[i] = new TrendLineValue(value);
+            }
+
+            lines.Add(new TrendLine("Count", values));
+
+            kpi.TrendLines = lines.ToArray();
+            context.AddIndicator(applicationId, kpi);
+        }
+
+        /// <summary>
+        /// AssignCount
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="kpi"></param>
+        /// <param name="applicationId"></param>
+        /// <param name="incidents"></param>
+        public static void BuildIncidentCountPerAccountForApplication(this KeyPerformanceIndicatorContext context,
+            KeyPerformanceIndicator kpi, int applicationId, IReadOnlyCollection<ItemWithCount> incidents)
+        {
+            var periodValue = incidents
+                .Where(x => x.When >= context.PeriodStartDate
+                            && x.When <= context.PeriodEndDate)
+                .Sum(x => x.Count);
+            kpi.PeriodValue = periodValue;
+
+
+            var valueItem = incidents
+                .Where(x => x.When >= context.ValueStartDate
+                            && x.When <= context.ValueEndDate)
+                .Sum(x => x.Count);
+            kpi.Value = valueItem;
+
+
+            kpi.Toplist = incidents
+                .GroupBy(x => x.AccountId)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = x.Sum(y => y.Count),
+                    ValueName = kpi.ValueUnit
+                })
+                .OrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+
+            var lines = new List<TrendLine>();
+            var incidentsPerAppOrdered = incidents
+                .GroupBy(x => x.AccountId)
+                .OrderByKpi(x => x.Count(), kpi)
+                .Take(5);
+            foreach (var valuesPerAccount in incidentsPerAppOrdered)
+            {
+                var values = new TrendLineValue[context.TrendDates.Length];
+                for (var i = 0; i < context.TrendDates.Length; i++)
+                {
+                    var value = valuesPerAccount
+                        .FirstOrDefault(x => x.When == context.TrendDates[i])?.Count ?? 0;
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerAccount.Key, values));
+            }
+
+            kpi.TrendLines = lines.ToArray();
+            context.AddIndicator(applicationId, kpi);
+        }
+
+        public static void BuildAccountWorstCountIndicator(this KeyPerformanceIndicatorContext context,
+            KeyPerformanceIndicator kpi, int applicationId, IReadOnlyCollection<ItemWithCount> incidents)
+        {
+            var periodValue = incidents
+                .Where(x => x.When >= context.PeriodStartDate
+                            && x.When <= context.PeriodEndDate)
+                .GroupBy(x => x.AccountId)
+                .ReverseOrderByKpi(x => x.Count(), kpi)
+                .FirstOrDefault();
+            kpi.PeriodValue = periodValue?.Sum(x => x.Count);
+            kpi.PeriodValueId = periodValue?.Key;
+
+
+            var valueItem = incidents
+                .Where(x => x.When >= context.ValueStartDate
+                            && x.When <= context.ValueEndDate)
+                .GroupBy(x => x.AccountId)
+                .ReverseOrderByKpi(x => x.Count(), kpi)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Sum(x => x.Count); ;
+            kpi.PeriodValueId = valueItem?.Key;
+
+            var lines = new List<TrendLine>();
+            var incidentsPerAppOrdered = incidents
+                .GroupBy(x => x.AccountId)
+                .ReverseOrderByKpi(x => x.Count(), kpi)
+                .Take(5);
+            foreach (var valuesPerAccount in incidentsPerAppOrdered)
+            {
+                var values = new TrendLineValue[context.TrendDates.Length];
+                for (var i = 0; i < context.TrendDates.Length; i++)
+                {
+                    var value = valuesPerAccount
+                        .FirstOrDefault(x => x.When == context.TrendDates[i])?.Count ?? 0;
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerAccount.Key, values));
+            }
+
+            kpi.TrendLines = lines.ToArray();
+            context.AddIndicator(applicationId, kpi);
+        }
+
+
+        public static void BuildAppDurationIndicator(this KeyPerformanceIndicatorContext context,
+            KeyPerformanceIndicator kpi, int applicationId, IReadOnlyCollection<MonthDuration> incidents)
+        {
+            // company with longest work duration during 90 days
+            var periodValue = incidents
+                .Where(x => x.When >= context.PeriodStartDate
+                            && x.When <= context.PeriodEndDate)
+                .DefaultIfEmpty()
+                .Average(y => y?.Duration.TotalDays ?? 0);
+            kpi.PeriodValue = periodValue;
+
+            // company with longest work duration during 30 days
+            var valueItem = incidents
+                .Where(x => x.When >= context.ValueStartDate
+                            && x.When <= context.ValueEndDate)
+                .DefaultIfEmpty()
+                .Average(y => y?.Duration.TotalDays ?? 0);
+            kpi.Value = valueItem;
+
+            var lines = new List<TrendLine>();
+            var values = new TrendLineValue[context.TrendDates.Length];
+            for (var i = 0; i < context.TrendDates.Length; i++)
+            {
+                var value = incidents
+                    .Where(x => x.When == context.TrendDates[i])
+                    .DefaultIfEmpty()
+                    .Average(x => x?.Duration.TotalDays ?? 0);
+                values[i] = new TrendLineValue(value);
+            }
+
+            lines.Add(new TrendLine("Average duration (days)", values));
+
+            kpi.TrendLines = lines.ToArray();
+            context.AddIndicator(applicationId, kpi);
+        }
+
+
+        public static void BuildSystemCountIndicator(this KeyPerformanceIndicatorContext context,
+            KeyPerformanceIndicator kpi, IReadOnlyCollection<ItemWithCount> incidents)
+        {
+            // Number of incidents during the period grouped by app/account
+            var periodItem = incidents
+                .Where(x => x.When >= context.PeriodStartDate
+                            && x.When <= context.PeriodEndDate)
+                .GroupBy(x => x.ApplicationId)
+                .OrderByDescending(x => x.Average(y => y.Count))
+                .FirstOrDefault();
+            kpi.PeriodValue = periodItem?.Average(x => x.Count).AsInt() ?? 0;
+            kpi.PeriodValueId = periodItem?.Key ?? 0;
+
+            var valueItem = incidents
+                .Where(x => x.When >= context.ValueStartDate
+                            && x.When <= context.ValueEndDate)
+                .GroupBy(x => x.ApplicationId)
+                .OrderByKpi(x => x.Average(y => y.Count), kpi)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Average(x => x.Count).AsInt() ?? 0;
+            kpi.ValueId = valueItem?.Key ?? 0;
+
+
+            kpi.Toplist = incidents
+                .GroupBy(x => kpi.ToplistValueType == ValueIdType.ApplicationId ? x.ApplicationId : x.AccountId)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = x.Average(y => y.Count).AsInt(),
+                    ValueName = kpi.ValueUnit
+                })
+                .OrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+
+            var lines = new List<TrendLine>();
+
+            var line = CreateAverageTrendLine(context, incidents);
+            lines.Add(line);
+
+            var incidentsPerAppOrdered = incidents
+                .GroupBy(x => x.ApplicationId)
+                .ReverseOrderByKpi(x => x.Count(), kpi)
+                .Take(5);
+            foreach (var valuesPerAccount in incidentsPerAppOrdered)
+            {
+                var values = new TrendLineValue[context.TrendDates.Length];
+                for (var i = 0; i < context.TrendDates.Length; i++)
+                {
+                    var value = valuesPerAccount
+                        .FirstOrDefault(x => x.When == context.TrendDates[i])?.Count ?? 0;
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerAccount.Key, values));
+            }
+
+            kpi.TrendLines = lines.ToArray();
+            context.AddIndicator(0, kpi);
+        }
+
+        public static void BuildSystemDurationIndicator(this KeyPerformanceIndicatorContext context,
+            KeyPerformanceIndicator kpi, IReadOnlyCollection<MonthDuration> incidents)
+        {
+            // company with longest work duration during 90 days
+            var periodItem = incidents
+                .Where(x => x.When >= context.PeriodStartDate
+                            && x.When <= context.PeriodEndDate)
+                .GroupBy(x => x.ApplicationId)
+                .OrderByKpi(x => x.Average(y => y.Duration.TotalDays), kpi)
+                .FirstOrDefault();
+            kpi.PeriodValue = periodItem?.Average(x => x.Duration.TotalDays).AsInt() ?? 0;
+            kpi.PeriodValueId = periodItem?.Key;
+
+            // company with longest work duration during 30 days
+            var valueItem = incidents
+                .Where(x => x.When >= context.ValueStartDate
+                            && x.When <= context.ValueEndDate)
+                .GroupBy(x => x.ApplicationId)
+                .OrderByKpi(x => x.Average(y => y.Duration.TotalDays), kpi)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Average(x => x.Duration.TotalDays).AsInt() ?? 0;
+            kpi.ValueId = valueItem?.Key;
+
+
+            kpi.Toplist = incidents
+                .GroupBy(x => kpi.ToplistValueType == ValueIdType.ApplicationId ? x.ApplicationId : x.AccountId)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = x.Average(y => y.Duration.TotalDays),
+                    ValueName = "incidents"
+                })
+                .OrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+
+            var lines = new List<TrendLine>();
+
+            var line = CreateAverageTrendLine(context, incidents);
+            lines.Add(line);
+
+            // Best apps
+            var appIncidentsSorted = incidents
+                .GroupBy(x => x.ApplicationId)
+                .OrderByKpi(x => x.Average(y => y.Duration.TotalDays), kpi)
+                .Take(5);
+            foreach (var valuesPerApp in appIncidentsSorted)
+            {
+                var values = new TrendLineValue[context.TrendDates.Length];
+                for (var i = 0; i < context.TrendDates.Length; i++)
+                {
+                    var value = valuesPerApp
+                        .FirstOrDefault(x => x.When == context.TrendDates[i])?.Duration.TotalDays ?? 0;
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerApp.Key, values));
+            }
+
+
+
+            kpi.TrendLines = lines.ToArray();
+            context.AddIndicator(0, kpi);
+        }
+
+        public static void BuildSystemWorstDurationIndicator(this KeyPerformanceIndicatorContext context,
+            KeyPerformanceIndicator kpi, IReadOnlyCollection<MonthDuration> incidents)
+        {
+            kpi.IsVariation = true;
+
+            // company with longest work duration during 90 days
+            var periodItem = incidents
+                .Where(x => x.When >= context.PeriodStartDate
+                            && x.When <= context.PeriodEndDate)
+                .GroupBy(x => x.ApplicationId)
+                .ReverseOrderByKpi(x => x.Average(y => y.Duration.TotalDays), kpi)
+                .FirstOrDefault();
+            kpi.PeriodValue = periodItem?.Average(x => x.Duration.TotalDays).AsInt() ?? 0;
+            kpi.PeriodValueId = periodItem?.Key;
+
+            // company with longest work duration during 30 days
+            var valueItem = incidents
+                .Where(x => x.When >= context.ValueStartDate
+                            && x.When <= context.ValueEndDate)
+                .GroupBy(x => x.ApplicationId)
+                .ReverseOrderByKpi(x => x.Average(y => y.Duration.TotalDays), kpi)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Average(x => x.Duration.TotalDays).AsInt() ?? 0;
+            kpi.ValueId = valueItem?.Key;
+
+
+            kpi.Toplist = incidents
+                .GroupBy(x => kpi.ToplistValueType == ValueIdType.ApplicationId ? x.ApplicationId : x.AccountId)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = x.Average(y => y.Duration.TotalDays),
+                    ValueName = "incidents"
+                })
+                .ReverseOrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+
+            var lines = new List<TrendLine>();
+            var line2 = CreateAverageTrendLine(context, incidents);
+            lines.Add(line2);
+
+            var appIncidentsSorted = incidents
+                .GroupBy(x => x.ApplicationId)
+                .ReverseOrderByKpi(x => x.Average(y => y.Duration.TotalDays), kpi)
+                .Take(5);
+            foreach (var valuesPerApp in appIncidentsSorted)
+            {
+                var values = new TrendLineValue[context.TrendDates.Length];
+                for (var i = 0; i < context.TrendDates.Length; i++)
+                {
+                    var value = valuesPerApp
+                        .FirstOrDefault(x => x.When == context.TrendDates[i])?.Duration.TotalDays ?? 0;
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerApp.Key, values));
+            }
+
+
+            kpi.TrendLines = lines.ToArray();
+            context.AddIndicator(0, kpi);
+        }
+
+        public static void BuildWorstSystemCountIndicator(this KeyPerformanceIndicatorContext context,
+            KeyPerformanceIndicator kpi, IReadOnlyCollection<ItemWithCount> incidents)
+        {
+            kpi.IsVariation = true;
+
+            // Number of incidents during the period grouped by app/account
+            var periodItem = incidents
+                .Where(x => x.When >= context.PeriodStartDate
+                            && x.When <= context.PeriodEndDate)
+                .GroupBy(x => x.ApplicationId)
+                .ReverseOrderByKpi(x => x.Average(y => y.Count), kpi)
+                .FirstOrDefault();
+            kpi.PeriodValue = periodItem?.Average(x => x.Count).AsInt() ?? 0;
+            kpi.PeriodValueId = periodItem?.Key ?? 0;
+
+            var valueItem = incidents
+                .Where(x => x.When >= context.ValueStartDate
+                            && x.When <= context.ValueEndDate)
+                .GroupBy(x => x.ApplicationId)
+                .ReverseOrderByKpi(x => x.Average(y => y.Count), kpi)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Average(x => x.Count).AsInt() ?? 0;
+            kpi.ValueId = valueItem?.Key ?? 0;
+
+
+            kpi.Toplist = incidents
+                .GroupBy(x => kpi.ToplistValueType == ValueIdType.ApplicationId ? x.ApplicationId : x.AccountId)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = x.Average(y => y.Count).AsInt(),
+                    ValueName = "incidents"
+                })
+                .ReverseOrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+
+            var lines = new List<TrendLine>();
+            var line = CreateAverageTrendLine(context, incidents);
+            lines.Add(line);
+
+            var incidentsPerAppOrdered = incidents
+                .GroupBy(x => x.ApplicationId)
+                .ReverseOrderByKpi(x => x.Count(), kpi)
+                .Take(5);
+
+            foreach (var valuesPerAccount in incidentsPerAppOrdered)
+            {
+                var values = new TrendLineValue[context.TrendDates.Length];
+                for (var i = 0; i < context.TrendDates.Length; i++)
+                {
+                    var value = valuesPerAccount
+                        .FirstOrDefault(x => x.When == context.TrendDates[i])?.Count ?? 0;
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerAccount.Key, values));
+            }
+
+            kpi.TrendLines = lines.ToArray();
+            context.AddIndicator(0, kpi);
+        }
+
+        public static IOrderedEnumerable<TSource> OrderByKpi<TSource, TKey>(this IEnumerable<TSource> source,
+            Func<TSource, TKey> keySelector, KeyPerformanceIndicator indicator)
+        {
+            return indicator.ComparisonType == IndicatorValueComparison.LowerIsBetter
+                ? source.OrderBy(keySelector)
+                : source.OrderByDescending(keySelector);
+        }
+
+        public static IOrderedEnumerable<TSource> ReverseOrderByKpi<TSource, TKey>(this IEnumerable<TSource> source,
+            Func<TSource, TKey> keySelector, KeyPerformanceIndicator indicator)
+        {
+            return indicator.ComparisonType != IndicatorValueComparison.LowerIsBetter
+                ? source.OrderBy(keySelector)
+                : source.OrderByDescending(keySelector);
+        }
+
+        private static TrendLine CreateAverageTrendLine(KeyPerformanceIndicatorContext context,
+            IReadOnlyCollection<MonthDuration> incidents)
+        {
+            var values2 = new TrendLineValue[context.TrendDates.Length];
+            for (var i = 0; i < context.TrendDates.Length; i++)
+            {
+                var value = incidents
+                    .Where(x => x.When == context.TrendDates[i])
+                    .DefaultIfEmpty()
+                    .Average(x => x?.Duration.TotalDays ?? 0);
+                values2[i] = new TrendLineValue(value);
+            }
+
+            var line = new TrendLine("Company average", values2)
+            {
+                IsCompanyAverage = true
+            };
+            return line;
+        }
+
+        private static TrendLine CreateAverageTrendLine(KeyPerformanceIndicatorContext context,
+            IReadOnlyCollection<ItemWithCount> incidents)
+        {
+            var values2 = new TrendLineValue[context.TrendDates.Length];
+            for (var i = 0; i < context.TrendDates.Length; i++)
+            {
+                var value = incidents
+                    .Where(x => x.When == context.TrendDates[i])
+                    .DefaultIfEmpty()
+                    .Average(x => x.Count);
+                values2[i] = new TrendLineValue(value);
+            }
+
+            var line = new TrendLine("Company average", values2)
+            {
+                IsCompanyAverage = true
+            };
+            return line;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/IncidentProgressTrackerMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/IncidentProgressTrackerMapper.cs
new file mode 100644
index 00000000..d2119c4c
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/IncidentProgressTrackerMapper.cs
@@ -0,0 +1,15 @@
+﻿using Coderr.Server.App.IncidentInsights.Subscribers;
+using Coderr.Server.Domain.Modules.Statistics;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Insights
+{
+    public class IncidentProgressTrackerMapper : CrudEntityMapper<IncidentProgressTracker>
+    {
+        public IncidentProgressTrackerMapper() : base("CommonIncidentProgressTracking")
+        {
+            Property(x => x.IncidentId)
+                .PrimaryKey(false);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Partitions/PartitionInsight.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Partitions/PartitionInsight.cs
new file mode 100644
index 00000000..b7e4e6ce
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Partitions/PartitionInsight.cs
@@ -0,0 +1,158 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+using Coderr.Server.App.Partitions;
+using Coderr.Server.Domain.Modules.Partitions;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Partitions
+{
+    [ContainerService]
+    internal class PartitionInsight : IKeyPerformanceIndicatorGenerator
+    {
+        private IPartitionRepository _partitionRepository;
+        private IAdoNetUnitOfWork _unitOfWork;
+
+        public PartitionInsight(IAdoNetUnitOfWork unitOfWork, IPartitionRepository partitionRepository)
+        {
+            _unitOfWork = unitOfWork;
+            _partitionRepository = partitionRepository;
+        }
+
+
+        public async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+            var definitions = new Dictionary<int, IList<PartitionDefinition>>();
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var partitions = await _partitionRepository.GetDefinitions(applicationId);
+                definitions[applicationId] = partitions;
+            }
+
+            await FillKnownTotals(context, definitions);
+
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = @"select ApplicationId, PartitionId, Count(Value) Count, YearMonth
+                                    FROM ApplicationPartitionInsights
+                                    JOIN PartitionDefinitions ON (PartitionDefinitions.Id = PartitionId)
+                                    WHERE YearMonth > @from AND YearMonth <= @to
+                                    #AppIdConstraint#
+                                    GROUP BY ApplicationId, PartitionId, YearMonth";
+                cmd.AddParameter("from", context.StartDate);
+                cmd.AddParameter("to", context.EndDate);
+                ApplyApplicationIdConstraint(cmd, context.ApplicationIds);
+
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    var items = new List<ItemWithCount>();
+                    while (await reader.ReadAsync())
+                    {
+                        var item = new ItemWithCount(reader.GetInt32(0), reader.GetDateTime(3))
+                        {
+                            Count = reader.GetInt32(2),
+                            AccountId = reader.GetInt32(1)
+                        };
+                        items.Add(item);
+                    }
+
+                    var perApplication = items.GroupBy(x => x.ApplicationId);
+
+                    foreach (var appRows in perApplication)
+                    {
+                        var partitions = definitions[appRows.Key];
+
+                        var perPartition = appRows.GroupBy(x => x.AccountId);
+                        foreach (var partitionRow in perPartition)
+                        {
+                            var partition = partitions.FirstOrDefault(x => x.Id == partitionRow.Key);
+                            if (partition == null)
+                            {
+                                continue;
+                            }
+
+                            if (partition.Name.EndsWith("Id", StringComparison.OrdinalIgnoreCase))
+                            {
+                                partition.Name = "Affected " + partition.Name.Remove(partition.Name.Length - 2, 2).Pluralize();
+                            }
+
+
+                            var kpi = new KeyPerformanceIndicator("Partition" + partition.Id, partition.Name,
+                                IndicatorValueComparison.LowerIsBetter)
+                            {
+                                PeriodValue = partitionRow
+                                    .Where(x => x.When >= context.PeriodStartDate && x.When <= context.PeriodEndDate)
+                                    .Sum(x => x.Count),
+                                Value = partitionRow
+                                    .Where(x => x.When >= context.ValueStartDate && x.When <= context.ValueEndDate)
+                                    .Sum(x => x.Count),
+
+                            };
+
+                            kpi.Description = $"Amount of affected {partition.Name.ToLower()}";
+
+                            var values = new TrendLineValue[context.TrendDates.Length];
+                            for (var i = 0; i < context.TrendDates.Length; i++)
+                            {
+                                var value = partitionRow
+                                    .Where(x => x.When == context.TrendDates[i])
+                                    .DefaultIfEmpty()
+                                    .Sum(x => x?.Count ?? 0);
+                                values[i] = new TrendLineValue(value);
+                            }
+
+                            var line = new TrendLine(partition.Name, values);
+                            kpi.TrendLines = new[] { line };
+                            context.AddIndicator(appRows.Key, kpi);
+                        }
+                    }
+                }
+            }
+        }
+
+        private async Task FillKnownTotals(KeyPerformanceIndicatorContext context, Dictionary<int, IList<PartitionDefinition>> definitions)
+        {
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = @"SELECT ApplicationId, PartitionId, Count(*) 
+                                    FROM ApplicationPartitionValues 
+                                    JOIN PartitionDefinitions ON (PartitionDefinitions.Id = PartitionId)
+                                    #AppIdConstraint#
+                                    GROUP BY ApplicationId, PartitionId";
+                ApplyApplicationIdConstraint(cmd, context.ApplicationIds, " WHERE ");
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    while (await reader.ReadAsync())
+                    {
+                        var appId = reader.GetInt32(0);
+                        var definitionId = reader.GetInt32(1);
+                        var definition = definitions[appId].FirstOrDefault(x => x.Id == definitionId);
+                        if (definition != null && definition.NumberOfItems == 0)
+                            definition.NumberOfItems = reader.GetInt32(2);
+                    }
+                }
+            }
+        }
+
+        private static void ApplyApplicationIdConstraint(IDbCommand cmd, int[] applicationIds, string queryPrefix = " AND ")
+        {
+            if (applicationIds.Length == 0)
+            {
+                cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#", "");
+            }
+            else
+            {
+                var commaIds = string.Join(", ", applicationIds);
+                cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#",
+                    $" {queryPrefix} ApplicationId IN ({commaIds}) ");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/SystemCountGeneratorExtensions.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/SystemCountGeneratorExtensions.cs
new file mode 100644
index 00000000..d55fea6e
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/SystemCountGeneratorExtensions.cs
@@ -0,0 +1,102 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+
+namespace Coderr.Server.SqlServer.Insights
+{
+    public static class SystemCountGeneratorExtensions
+    {
+        public static void SystemCountInsight(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<ItemWithCount, int> groupField = null,
+            Func<IGrouping<int, ItemWithCount>, double> topListAggregation = null)
+        {
+            if (groupField == null)
+            {
+                groupField = x => x.ApplicationId;
+            }
+            if (topListAggregation == null)
+            {
+                topListAggregation = x => x.Sum(y => y.Count);
+            }
+
+            context.SystemCountKeyFigure(kpi, groupField);
+            context.SystemCountTopList(kpi, groupField, topListAggregation);
+            context.SystemCountTrend(kpi, groupField);
+            context.IndicatorContext.AddIndicator(0, kpi);
+        }
+
+        public static void SystemCountKeyFigure(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<ItemWithCount, int> groupField)
+        {
+            var periodValue = context.Incidents
+                .Where(x => x.When >= context.IndicatorContext.PeriodStartDate
+                            && x.When <= context.IndicatorContext.PeriodEndDate)
+                .GroupBy(groupField)
+                .OrderByKpi(y => y.Sum(x => x.Count), kpi)
+                .FirstOrDefault();
+            kpi.PeriodValue = periodValue?.Sum(x => x.Count).DivideWith(3);
+            kpi.PeriodValueId = periodValue?.Key;
+
+
+            var valueItem = context.Incidents
+                .Where(x => x.When >= context.IndicatorContext.ValueStartDate
+                            && x.When <= context.IndicatorContext.ValueEndDate)
+                .GroupBy(groupField)
+                .OrderByKpi(y => y.Sum(x => x.Count), kpi)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Sum(x => x.Count);
+            kpi.ValueId = valueItem?.Key;
+        }
+
+        public static void SystemCountTrend(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<ItemWithCount, int> groupField)
+        {
+            var lines = new List<TrendLine>();
+            var incidentsPerAppOrdered = context.Incidents
+                .GroupBy(groupField)
+                .OrderByKpi(x => x.Sum(y => y.Count), kpi)
+                .Take(5);
+            foreach (var valuesPerAccount in incidentsPerAppOrdered)
+            {
+                var values = new TrendLineValue[context.IndicatorContext.TrendDates.Length];
+                for (var i = 0; i < context.IndicatorContext.TrendDates.Length; i++)
+                {
+                    var value = valuesPerAccount
+                        .Where(x => x.When == context.IndicatorContext.TrendDates[i])
+                        .DefaultIfEmpty()
+                        .Sum(x => x?.Count ?? 0);
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerAccount.Key, values));
+            }
+
+            kpi.TrendLines = lines.ToArray();
+        }
+
+        public static void SystemCountTopList(this CountBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<ItemWithCount, int> groupField,
+            Func<IGrouping<int, ItemWithCount>, double> valueAggregation)
+        {
+            kpi.Toplist = context.Incidents
+                .GroupBy(groupField)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = valueAggregation(x),
+                    ValueName = kpi.ValueUnit
+                })
+                .OrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/SystemDurationGeneratorExtensions.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/SystemDurationGeneratorExtensions.cs
new file mode 100644
index 00000000..629e72ee
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/SystemDurationGeneratorExtensions.cs
@@ -0,0 +1,97 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using Coderr.Server.Api.Insights.Queries;
+using Coderr.Server.App.Insights.Keyfigures;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+
+namespace Coderr.Server.SqlServer.Insights
+{
+    public static class SystemDurationGeneratorExtensions
+    {
+        public static void SystemDurationInsight(this DurationBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<MonthDuration, int> groupField, 
+            Func<IGrouping<int, MonthDuration>, double> toplistAggregation = null)
+        {
+            if (toplistAggregation == null)
+            {
+                toplistAggregation = z => z.Average(x => x.Duration.TotalDays);
+            }
+            context.SystemDurationKpi(kpi, groupField);
+            context.SystemDurationTrend(kpi, groupField);
+            context.SystemDurationTopList(kpi, groupField, toplistAggregation);
+            context.IndicatorContext.AddIndicator(0, kpi);
+        }
+
+        public static void SystemDurationKpi(this DurationBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<MonthDuration, int> groupField)
+        {
+            var periodValue = context.Incidents
+                .Where(x => x.When >= context.IndicatorContext.PeriodStartDate
+                            && x.When <= context.IndicatorContext.PeriodEndDate)
+                .GroupBy(groupField)
+                .OrderByKpi(y => y.Average(x => x.Duration.TotalDays), kpi)
+                .FirstOrDefault();
+            kpi.PeriodValue = periodValue?.Average(x => x.Duration.TotalDays);
+            kpi.PeriodValueId = periodValue?.Key;
+
+
+            var valueItem = context.Incidents
+                .Where(x => x.When >= context.IndicatorContext.ValueStartDate
+                            && x.When <= context.IndicatorContext.ValueEndDate)
+                .GroupBy(groupField)
+                .OrderByKpi(y => y.Average(x => x.Duration.TotalDays), kpi)
+                .FirstOrDefault();
+            kpi.Value = valueItem?.Average(x => x.Duration.TotalDays);
+            kpi.ValueId = valueItem?.Key;
+        }
+
+        public static void SystemDurationTrend(this DurationBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<MonthDuration, int> groupField)
+        {
+            var lines = new List<TrendLine>();
+            var incidentsPerAppOrdered = context.Incidents
+                .GroupBy(groupField)
+                .OrderByKpi(x => x.Count(), kpi)
+                .Take(5);
+            foreach (var valuesPerAccount in incidentsPerAppOrdered)
+            {
+                var values = new TrendLineValue[context.IndicatorContext.TrendDates.Length];
+                for (var i = 0; i < context.IndicatorContext.TrendDates.Length; i++)
+                {
+                    var value = valuesPerAccount
+                        .Where(x => x.When == context.IndicatorContext.TrendDates[i])
+                        .DefaultIfEmpty()
+                        .Average(x => x?.Duration.TotalDays ?? 0);
+                    values[i] = new TrendLineValue(value);
+                }
+
+                lines.Add(new TrendLine(valuesPerAccount.Key, values));
+            }
+
+            kpi.TrendLines = lines.ToArray();
+        }
+
+        public static void SystemDurationTopList(this DurationBuilderContext context,
+            KeyPerformanceIndicator kpi,
+            Func<MonthDuration, int> groupField,
+            Func<IGrouping<int, MonthDuration>, double> valueAggregation)
+        {
+            kpi.Toplist = context.Incidents
+                .GroupBy(groupField)
+                .Where(x => x.Any())
+                .Select(x => new KeyPerformanceIndicatorTopListItem
+                {
+                    ValueId = x.Key,
+                    Value = valueAggregation(x),
+                    ValueName = kpi.ValueUnit
+                })
+                .OrderByKpi(x => x.Value, kpi)
+                .Take(10)
+                .ToArray();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/CloserIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/CloserIndicator.cs
new file mode 100644
index 00000000..1378f23f
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/CloserIndicator.cs
@@ -0,0 +1,85 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Users
+{
+    /// <summary>
+    ///     The closer indicator shows the person that closes most incidents per month.
+    /// </summary>
+    /// <remarks>
+    ///     <para>
+    ///         System
+    ///     </para>
+    ///     <para>
+    ///         The system KPI should show the best person, no matter which application.
+    ///     </para>
+    ///     <para>
+    ///         The trend should show the best person per application.
+    ///     </para>
+    ///     <para>
+    ///         The top list is the best closers no matter which application.
+    ///     </para>
+    ///     <para>
+    ///         Application
+    ///     </para>
+    ///     <para>
+    ///         The KPI should show the best person for the application.
+    ///     </para>
+    ///     <para>
+    ///         The trend should show best persons per month
+    ///     </para>
+    /// </remarks>
+    [ContainerService]
+    public class CloserIndicator : CounterIndicator
+    {
+        private const string TheCloser = "TheCloser";
+
+        public CloserIndicator(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+
+        public override async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+            var sql =
+                @"select ApplicationId, cast(FORMAT(ClosedAtUtc,'yyyy-MM-01') as date) ClosedAt, count(*), ClosedById
+                                    from CommonIncidentProgressTracking
+                                    where (ClosedAtUtc >= @startDate AND ClosedAtUtc <= @endDate)
+                                    #AppIdConstraint#
+                                    group by ApplicationId, cast(FORMAT(ClosedAtUtc,'yyyy-MM-01') as date), ClosedById";
+
+            var items = await ExecuteCountSql(context, sql, true);
+
+            var generationContext = new CountBuilderContext(context, items);
+
+            var kpi = CreateKpiBase("The Closer");
+            generationContext.SystemCountKeyFigure(kpi, x => x.AccountId);
+            generationContext.SystemCountTrend(kpi, x => x.AccountId);
+            generationContext.SystemCountTopList(kpi, x => x.AccountId, grouping => grouping.Sum(x => x.Count));
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+                kpi = CreateKpiBase("The Closer");
+                var appContext = new CountBuilderContext(context, filtered);
+                appContext.AppCountInsight(kpi, applicationId, x => x.AccountId);
+            }
+        }
+
+        private KeyPerformanceIndicator CreateKpiBase(string title)
+        {
+            return new KeyPerformanceIndicator(TheCloser, title,
+                IndicatorValueComparison.HigherIsBetter)
+            {
+                CanBeNormalized = true,
+                Comment = "Number of incidents",
+                Description = "Coders that solve most incidents",
+                ValueIdType = ValueIdType.AccountId,
+                ValueUnit = "incident(s)"
+            };
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/ProcastinatorIndicator.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/ProcastinatorIndicator.cs
new file mode 100644
index 00000000..cd64473d
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/ProcastinatorIndicator.cs
@@ -0,0 +1,64 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Users
+{
+
+    [ContainerService]
+    public class ProcastinatorIndicator : DurationIndicator
+    {
+        public ProcastinatorIndicator(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+
+        private const string IndicatorName = "Procastinator";
+
+        public override async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+
+            var sql = @"SELECT ApplicationId, 
+	                                       cast(FORMAT(AssignedAtUtc,'yyyy-MM-01') as date) AssignedAt, 
+	                                       Duration = AVG(
+                                            CASE 
+                                                WHEN ClosedAtUtc IS NULL 
+                                                THEN DATEDIFF(hour, AssignedAtUtc, GetUtcDate())
+		                                        ELSE DATEDIFF(hour, AssignedAtUtc, ClosedAtUtc)
+	                                       END / 24.0), AssignedToId
+                                    FROM CommonIncidentProgressTracking
+                                    WHERE AssignedAtUtc <= @to AND ClosedAtUtc >= @from
+                                    #AppIdConstraint#
+                                    Group BY ApplicationId, AssignedToId, cast(FORMAT(AssignedAtUtc,'yyyy-MM-01') as date)";
+            var items = await ExecuteCountSql(context, sql, true);
+
+            var kpi = CreateKpiBase("The procrastinator");
+            var durationContext = new DurationBuilderContext(context, items);
+            durationContext.SystemDurationInsight(kpi, x => x.AccountId, x => x.Average(y => y.Duration.TotalDays));
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+                kpi = CreateKpiBase("The procrastinator");
+                var appDurationContext = new DurationBuilderContext(context, filtered);
+                appDurationContext.AppDurationInsight(kpi, applicationId, x => x.AccountId);
+            }
+        }
+
+        private KeyPerformanceIndicator CreateKpiBase(string title)
+        {
+            return new KeyPerformanceIndicator(IndicatorName, title,
+                IndicatorValueComparison.HigherIsBetter)
+            {
+                CanBeNormalized = true,
+                Comment = "",
+                Description = "Person that starts working on many incidents but never finish them.",
+                ValueIdType = ValueIdType.AccountId,
+                ValueUnit = "day(s)"
+            };
+        }
+
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/TheOptimist.cs b/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/TheOptimist.cs
new file mode 100644
index 00000000..02fa5018
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Insights/Users/TheOptimist.cs
@@ -0,0 +1,54 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.App.Insights;
+using Coderr.Server.App.Insights.Keyfigures;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Insights.Users
+{
+    [ContainerService]
+    class TheOptimistIndicator : CounterIndicator
+    {
+
+        public TheOptimistIndicator(IAdoNetUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+        }
+
+        private const string IndicatorName = "TheOptimist";
+
+        public override async Task CollectAsync(KeyPerformanceIndicatorContext context)
+        {
+            var sql = @"select ApplicationId, cast(FORMAT(AssignedAtUtc,'yyyy-MM-01') as date), count(*), AssignedToId
+                                    from CommonIncidentProgressTracking
+                                    where (AssignedAtUtc >= @startDate AND AssignedAtUtc <= @endDate)
+                                    #AppIdConstraint#
+                                    group by ApplicationId, cast(FORMAT(AssignedAtUtc,'yyyy-MM-01') as date), AssignedToId";
+            var items = await ExecuteCountSql(context, sql, true);
+
+
+            foreach (var applicationId in context.ApplicationIds)
+            {
+                var filtered = items.Where(x => x.ApplicationId == applicationId).ToList();
+                var appContext = new CountBuilderContext(context, filtered);
+                var kpi = CreateKpiBase("The Optimist");
+                appContext.AppCountInsight(kpi, applicationId, x => x.AccountId);
+            }
+        }
+
+        private KeyPerformanceIndicator CreateKpiBase(string title)
+        {
+            return new KeyPerformanceIndicator(IndicatorName, title,
+                IndicatorValueComparison.HigherIsBetter)
+            {
+                CanBeNormalized = true,
+                Comment = "Lower amount is better",
+                Description = "Developers that commit to many incidents but doesn't solve them.",
+                ValueIdType = ValueIdType.AccountId,
+                ValueUnit = "incident(s)"
+            };
+        }
+    }
+
+
+}
diff --git a/src/Server/Coderr.Server.SqlServer/Logs/LogsRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Logs/LogsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Logs/LogsRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Logs/LogsRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Migrations/MigrationRunner.cs b/src/Server/Data/Coderr.Server.SqlServer/Migrations/MigrationRunner.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Migrations/MigrationRunner.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Migrations/MigrationRunner.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Migrations/MigrationScripts.cs b/src/Server/Data/Coderr.Server.SqlServer/Migrations/MigrationScripts.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Migrations/MigrationScripts.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Migrations/MigrationScripts.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginListItem.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginListItem.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginListItem.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginListItem.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Geolocation/ErrorOriginRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Geolocation/GetOriginsForIncidentHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Geolocation/GetOriginsForIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Geolocation/GetOriginsForIncidentHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Geolocation/GetOriginsForIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/History/DeleteAbandonedHistory.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/History/DeleteAbandonedHistory.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/History/DeleteAbandonedHistory.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/History/DeleteAbandonedHistory.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/History/GetIncidentsForStatesHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/History/GetIncidentsForStatesHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/History/GetIncidentsForStatesHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/History/GetIncidentsForStatesHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/History/HistoryEntryMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/History/HistoryEntryMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/History/HistoryEntryMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/History/HistoryEntryMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/History/HistoryRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/History/HistoryRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/History/HistoryRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/History/HistoryRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Mine/Incidents/IncidentWithMostReportsProvider.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Mine/Incidents/IncidentWithMostReportsProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Mine/Incidents/IncidentWithMostReportsProvider.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Mine/Incidents/IncidentWithMostReportsProvider.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsQueryHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsQueryHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsQueryHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsQueryHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsResultItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsResultItemMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsResultItemMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Mine/ListMyIncidentsResultItemMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Mine/ListMySuggestedItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Mine/ListMySuggestedItemMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Mine/ListMySuggestedItemMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Mine/ListMySuggestedItemMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/ReportSpikes/ErrorReportSpikeMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/ReportSpikes/ErrorReportSpikeMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/ReportSpikes/ErrorReportSpikeMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/ReportSpikes/ErrorReportSpikeMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyDbEntity.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyDbEntity.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyDbEntity.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyDbEntity.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyValueDbEntity.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyValueDbEntity.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyValueDbEntity.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Entities/ContextCollectionPropertyValueDbEntity.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityCollectionMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityCollectionMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityCollectionMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityCollectionMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityValueMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityValueMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityValueMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Mappers/SimilarityValueMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Similarities/Queries/GetSimilaritiesHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Queries/GetSimilaritiesHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Similarities/Queries/GetSimilaritiesHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/Queries/GetSimilaritiesHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Similarities/SimilarityRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/SimilarityRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Similarities/SimilarityRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Similarities/SimilarityRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Tagging/DoInitialRun.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Tagging/DoInitialRun.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Tagging/DoInitialRun.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Tagging/DoInitialRun.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Tagging/TagsRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Tagging/TagsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Tagging/TagsRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Tagging/TagsRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Triggers/AppTriggerRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/AppTriggerRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Triggers/AppTriggerRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/AppTriggerRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Triggers/CollectionMetadataMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/CollectionMetadataMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Triggers/CollectionMetadataMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/CollectionMetadataMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Triggers/DeleteTriggerHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/DeleteTriggerHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Triggers/DeleteTriggerHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/DeleteTriggerHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Triggers/GetContextCollectionMetadataHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/GetContextCollectionMetadataHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Triggers/GetContextCollectionMetadataHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/GetContextCollectionMetadataHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Triggers/GetTriggersForApplicationHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/GetTriggersForApplicationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Triggers/GetTriggersForApplicationHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/GetTriggersForApplicationHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Triggers/ReportAnalyzerTriggerRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/ReportAnalyzerTriggerRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Triggers/ReportAnalyzerTriggerRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/ReportAnalyzerTriggerRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Triggers/TriggerDtoMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/TriggerDtoMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Triggers/TriggerDtoMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/TriggerDtoMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Triggers/TriggerMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/TriggerMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Triggers/TriggerMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Triggers/TriggerMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfig.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfig.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfig.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfig.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfigMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfigMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfigMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionConfigMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMonthMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMonthMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMonthMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/ApplicationVersionMonthMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/DeleteAbandonedFeedback.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/DeleteAbandonedFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/DeleteAbandonedFeedback.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/DeleteAbandonedFeedback.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/Queries/GetApplicationVersionsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/Queries/GetApplicationVersionsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/Queries/GetApplicationVersionsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/Queries/GetApplicationVersionsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/Queries/GetVersionHistoryHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/Queries/GetVersionHistoryHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/Queries/GetVersionHistoryHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/Queries/GetVersionHistoryHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/Queries/VersionRange.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/Queries/VersionRange.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/Queries/VersionRange.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/Queries/VersionRange.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/Queries/Versions.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/Queries/Versions.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/Queries/Versions.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/Queries/Versions.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Versions/VersionRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/VersionRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Versions/VersionRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Versions/VersionRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/AddEntryHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/AddEntryHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/AddEntryHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/AddEntryHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/EditEntryHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/EditEntryHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/EditEntryHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/EditEntryHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/GetWhitelistEntriesHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/GetWhitelistEntriesHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/GetWhitelistEntriesHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/GetWhitelistEntriesHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/RemoveDomainHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/RemoveDomainHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/RemoveDomainHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/RemoveDomainHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplication.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplication.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplication.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplicationMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplicationMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplicationMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainApplicationMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainIpMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainIpMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainIpMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainIpMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Modules/Whitelists/WhitelistedDomainMapper.cs
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/ApplicationPartitionValuesMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/ApplicationPartitionValuesMapper.cs
new file mode 100644
index 00000000..234d3409
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/ApplicationPartitionValuesMapper.cs
@@ -0,0 +1,15 @@
+﻿using Coderr.Server.Domain.Modules.Partitions;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    public class ApplicationPartitionValuesMapper : CrudEntityMapper<ApplicationPartitionValue>
+    {
+        public ApplicationPartitionValuesMapper() : base("ApplicationPartitionValues")
+        {
+            Property(x => x.Id).PrimaryKey(true);
+            Property(x => x.PartitionId);
+            Property(x => x.Value);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/DeleteAbandonedPartitions.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/DeleteAbandonedPartitions.cs
new file mode 100644
index 00000000..f379bd3a
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/DeleteAbandonedPartitions.cs
@@ -0,0 +1,45 @@
+﻿using System;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Griffin.ApplicationServices;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    [ContainerService(RegisterAsSelf = true)]
+    internal class DeleteAbandonedPartitions : IBackgroundJobAsync
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+        private static DateTime _executionDate = DateTime.Today;
+
+        public DeleteAbandonedPartitions(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public async Task ExecuteAsync()
+        {
+            if (_executionDate == DateTime.Today)
+                return;
+
+            _executionDate = DateTime.Today;
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = @"DELETE FROM IncidentPartitionValues
+                                    FROM IncidentPartitionValues WITH(ReadUncommitted)
+                                    LEFT JOIN Incidents WITH(ReadUncommitted) ON (Incidents.Id = IncidentId)
+                                    WHERE Incidents.Id IS NULL";
+                await cmd.ExecuteNonQueryAsync();
+            }
+
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = @"DELETE FROM InboundPartitionValues
+                                    FROM InboundPartitionValues WITH(ReadUncommitted)
+                                    LEFT JOIN Incidents WITH(ReadUncommitted) ON (Incidents.Id = IncidentId)
+                                    WHERE Incidents.Id IS NULL";
+                await cmd.ExecuteNonQueryAsync();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionInsightsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionInsightsHandler.cs
new file mode 100644
index 00000000..19a5a6ad
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionInsightsHandler.cs
@@ -0,0 +1,191 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Partitions.Queries;
+using Coderr.Server.App;
+using Coderr.Server.App.Insights.Keyfigures.Application;
+using Coderr.Server.App.Partitions;
+using Coderr.Server.Domain.Modules.Partitions;
+using DotNetCqs;
+using Griffin.Data;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    public class GetPartitionInsightsHandler : IQueryHandler<GetPartitionInsights, GetPartitionInsightsResult>
+    {
+        private readonly IPartitionRepository _partitionRepository;
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public GetPartitionInsightsHandler(IAdoNetUnitOfWork unitOfWork, IPartitionRepository partitionRepository)
+        {
+            _unitOfWork = unitOfWork;
+            _partitionRepository = partitionRepository;
+        }
+
+        public async Task<GetPartitionInsightsResult> HandleAsync(IMessageContext context, GetPartitionInsights query)
+        {
+            query.StartDate = query.StartDate.ToFirstDayOfMonth();
+            query.SummarizePeriodStartDate = query.SummarizePeriodStartDate.ToFirstDayOfMonth();
+
+            var definitions = new Dictionary<int, IList<PartitionDefinition>>();
+            foreach (var applicationId in query.ApplicationIds)
+            {
+                var partitions = await _partitionRepository.GetDefinitions(applicationId);
+                definitions[applicationId] = partitions;
+            }
+
+            await FillKnownTotals(query.ApplicationIds, definitions);
+
+            var resultApplications = new List<GetPartitionInsightsResultApplication>();
+            var trendDates = CreateTrendDates(query.StartDate, query.EndDate);
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                if (query.IncidentId > 0)
+                {
+                    cmd.CommandText =
+                        @"select 1, PartitionId, Count(ValueId) Count, DATEADD(MONTH, DATEDIFF(MONTH, 0, ReceivedAtUtc), 0) AS YearMonth
+                          FROM IncidentPartitionValues
+                          WHERE IncidentId = @incidentId
+                            AND ReceivedAtUtc >= @from AND ReceivedAtUtc <= @to
+                          GROUP BY PartitionId, DATEADD(MONTH, DATEDIFF(MONTH, 0, ReceivedAtUtc), 0)";
+                    cmd.AddParameter("incidentId", query.IncidentId);
+                }
+                else
+                {
+                    cmd.CommandText = @"select ApplicationId, PartitionId, Count(Value) Count, YearMonth
+                                    FROM ApplicationPartitionInsights
+                                    JOIN PartitionDefinitions ON (PartitionDefinitions.Id = PartitionId)
+                                    WHERE YearMonth >= @from AND YearMonth <= @to
+                                    #AppIdConstraint#
+                                    GROUP BY ApplicationId, PartitionId, YearMonth";
+                    ApplyApplicationIdConstraint(cmd, query.ApplicationIds);
+                }
+                cmd.AddParameter("from", query.StartDate);
+                cmd.AddParameter("to", query.EndDate);
+
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    var items = new List<ItemWithCount>();
+                    while (await reader.ReadAsync())
+                    {
+                        var item = new ItemWithCount(reader.GetInt32(0), reader.GetDateTime(3))
+                        {
+                            Count = reader.GetInt32(2),
+                            AccountId = reader.GetInt32(1)
+                        };
+                        items.Add(item);
+                    }
+
+                    var perApplication = items.GroupBy(x => x.ApplicationId);
+
+                    foreach (var appRows in perApplication)
+                    {
+                        var partitions = definitions[appRows.Key];
+
+                        var indicators = new List<GetPartitionInsightsResultIndicator>();
+                        var perPartition = appRows.GroupBy(x => x.AccountId);
+                        foreach (var partitionRow in perPartition)
+                        {
+                            var partition = partitions.FirstOrDefault(x => x.Id == partitionRow.Key);
+                            if (partition == null) continue;
+
+                            if (partition.Name.EndsWith("Id", StringComparison.OrdinalIgnoreCase))
+                                partition.Name = "Affected " +
+                                                 partition.Name.Remove(partition.Name.Length - 2, 2).Pluralize();
+
+                            var monthStartDate = DateTime.Today.AddDays(-30);
+                            var kpi = new GetPartitionInsightsResultIndicator("Partition" + partition.Id,
+                                partition.Name)
+                            {
+                                PeriodValue = partitionRow
+                                    .Where(x => x.When >= query.SummarizePeriodStartDate &&
+                                                x.When <= query.SummarizePeriodEndDate)
+                                    .Sum(x => x.Count),
+                                Value = partitionRow
+                                    .Where(x => x.When >= monthStartDate && x.When <= DateTime.UtcNow)
+                                    .Sum(x => x.Count)
+                            };
+
+                            var values = new string[trendDates.Length];
+                            for (var i = 0; i < trendDates.Length; i++)
+                            {
+                                var value = partitionRow
+                                    .Where(x => x.When == trendDates[i])
+                                    .DefaultIfEmpty()
+                                    .Sum(x => x?.Count ?? 0);
+                                values[i] = value.ToString();
+                            }
+
+                            kpi.Values = values;
+                            kpi.Dates = trendDates;
+                            indicators.Add(kpi);
+                        }
+
+                        resultApplications.Add(new GetPartitionInsightsResultApplication(appRows.Key)
+                        {
+                            Indicators = indicators.ToArray()
+                        });
+                    }
+                }
+            }
+
+            return new GetPartitionInsightsResult { Applications = resultApplications.ToArray() };
+        }
+
+        private static void ApplyApplicationIdConstraint(IDbCommand cmd, int[] applicationIds,
+            string queryPrefix = " AND ")
+        {
+            if (applicationIds.Length == 0)
+            {
+                cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#", "");
+            }
+            else
+            {
+                var commaIds = string.Join(", ", applicationIds);
+                cmd.CommandText = cmd.CommandText.Replace("#AppIdConstraint#",
+                    $" {queryPrefix} ApplicationId IN ({commaIds}) ");
+            }
+        }
+
+        private DateTime[] CreateTrendDates(DateTime startDate, DateTime endDate)
+        {
+            var date = startDate.ToFirstDayOfMonth();
+            endDate = endDate.ToFirstDayOfMonth();
+            var dates = new List<DateTime>();
+            while (date <= endDate)
+            {
+                dates.Add(date);
+                date = date.AddMonths(1);
+            }
+
+            return dates.ToArray();
+        }
+
+        private async Task FillKnownTotals(int[] applicationIds,
+            Dictionary<int, IList<PartitionDefinition>> definitions)
+        {
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = @"SELECT ApplicationId, PartitionId, Count(*) 
+                                    FROM ApplicationPartitionValues 
+                                    JOIN PartitionDefinitions ON (PartitionDefinitions.Id = PartitionId)
+                                    #AppIdConstraint#
+                                    GROUP BY ApplicationId, PartitionId";
+                ApplyApplicationIdConstraint(cmd, applicationIds, " WHERE ");
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    while (await reader.ReadAsync())
+                    {
+                        var appId = reader.GetInt32(0);
+                        var definitionId = reader.GetInt32(1);
+                        var definition = definitions[appId].FirstOrDefault(x => x.Id == definitionId);
+                        if (definition != null && definition.NumberOfItems == 0)
+                            definition.NumberOfItems = reader.GetInt32(2);
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionValuesHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionValuesHandler.cs
new file mode 100644
index 00000000..1fb9eb29
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionValuesHandler.cs
@@ -0,0 +1,50 @@
+﻿using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Partitions.Queries;
+using DotNetCqs;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    internal class GetPartitionValuesHandler : IQueryHandler<GetPartitionValues, GetPartitionValuesResult>
+    {
+        private readonly IAdoNetUnitOfWork _adoNetUnitOfWork;
+
+        public GetPartitionValuesHandler(IAdoNetUnitOfWork adoNetUnitOfWork)
+        {
+            _adoNetUnitOfWork = adoNetUnitOfWork;
+        }
+
+        public async Task<GetPartitionValuesResult> HandleAsync(IMessageContext context, GetPartitionValues message)
+        {
+            using (var cmd = _adoNetUnitOfWork.CreateDbCommand())
+            {
+                var sql = @"SELECT ipv.Id, ipv.PartitionId, IncidentId, ReceivedAtUtc, Value
+FROM IncidentPartitionValues ipv
+JOIN ApplicationPartitionValues apv ON (apv.Id = ipv.ValueId)
+WHERE ipv.PartitionId = @partitionId";
+                cmd.AddParameter("partitionId", message.PartitionId);
+                if (message.IncidentId.HasValue)
+                {
+                    sql += " AND IncidentId = @incidentId";
+                    cmd.AddParameter("incidentId", message.IncidentId);
+                }
+
+                sql += " ORDER BY ReceivedAtUtc DESC";
+
+                if (message.PageNumber.HasValue)
+                {
+                    var offset = (message.PageNumber.Value - 1) * message.PageSize;
+                    sql += $"OFFSET {offset} ROWS FETCH NEXT {message.PageSize} ROWS ONLY";
+                }
+                else
+                    sql = sql.Insert(7, $"TOP({message.PageSize}) ");
+
+                cmd.CommandText = sql;
+                var items = await cmd.ToListAsync<GetPartitionValuesResultItem>();
+                return new GetPartitionValuesResult {Items = items.ToArray()};
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionValuesResultItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionValuesResultItemMapper.cs
new file mode 100644
index 00000000..d21e9ca8
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/GetPartitionValuesResultItemMapper.cs
@@ -0,0 +1,14 @@
+﻿using Coderr.Server.Api.Partitions.Queries;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    internal class GetPartitionValuesResultItemMapper : EntityMapper<GetPartitionValuesResultItem>
+    {
+        public GetPartitionValuesResultItemMapper()
+        {
+            Property(x => x.Id)
+                .PrimaryKey(true);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/InboundDtoMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/InboundDtoMapper.cs
new file mode 100644
index 00000000..694d71d1
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/InboundDtoMapper.cs
@@ -0,0 +1,13 @@
+﻿using Coderr.Server.ReportAnalyzer.Partitions;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    public class InboundDtoMapper : CrudEntityMapper<InboundDTO>
+    {
+        public InboundDtoMapper() : base("InboundPartitionValues")
+        {
+            
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/IncidentPartitionValuesMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/IncidentPartitionValuesMapper.cs
new file mode 100644
index 00000000..96242034
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/IncidentPartitionValuesMapper.cs
@@ -0,0 +1,16 @@
+﻿using Coderr.Server.Domain.Modules.Partitions;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    public class IncidentPartitionValuesMapper : CrudEntityMapper<IncidentPartitionValue>
+    {
+        public IncidentPartitionValuesMapper() : base("IncidentPartitionValues")
+        {
+            Property(x => x.Id).PrimaryKey(true);
+            Property(x => x.IncidentId);
+            Property(x => x.PartitionId);
+            Property(x => x.ValueId);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/PartitionDefinitionMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/PartitionDefinitionMapper.cs
new file mode 100644
index 00000000..e1dfe28e
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/PartitionDefinitionMapper.cs
@@ -0,0 +1,18 @@
+﻿using System;
+using Coderr.Server.Domain.Modules.Partitions;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    public class PartitionDefinitionMapper : CrudEntityMapper<PartitionDefinition>
+    {
+        public PartitionDefinitionMapper() : base("PartitionDefinitions")
+        {
+            Property(x => x.Id)
+                .PrimaryKey(true);
+            Property(x => x.NumberOfItems)
+                .ToColumnValue(x => x == 0 ? (object) DBNull.Value : x)
+                .ToPropertyValue(x => (int) (x == DBNull.Value ? 0 : x));
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Partitions/PartitionsRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/Partitions/PartitionsRepository.cs
new file mode 100644
index 00000000..d66d28d9
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Partitions/PartitionsRepository.cs
@@ -0,0 +1,356 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Domain.Modules.Partitions;
+using Coderr.Server.ReportAnalyzer.Partitions;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+using log4net;
+
+namespace Coderr.Server.SqlServer.Partitions
+{
+    [ContainerService]
+    public class PartitionsRepository : IPartitionRepository
+    {
+        private readonly IAdoNetUnitOfWork _uow;
+        private ILog _logger = LogManager.GetLogger(typeof(PartitionsRepository));
+
+        public PartitionsRepository(IAdoNetUnitOfWork uow)
+        {
+            _uow = uow;
+        }
+
+        public async Task CreateAsync(InboundDTO dto)
+        {
+            await _uow.InsertAsync(dto);
+        }
+
+        public async Task CreateAsync(IncidentPartitionValue incidentPartitionValues)
+        {
+            await _uow.InsertAsync(incidentPartitionValues);
+        }
+
+        public async Task CreateAsync(PartitionDefinition definition)
+        {
+            await _uow.InsertAsync(definition);
+        }
+
+        public async Task CreateAsync(ApplicationPartitionValue applicationValues)
+        {
+            await _uow.InsertAsync(applicationValues);
+        }
+
+        public async Task<IList<ApplicationPartitionValue>> FindForApplication(int applicationId)
+        {
+            return await _uow.ToListAsync<ApplicationPartitionValue>("ApplicationId = @ApplicationId",
+                new {ApplicationId = applicationId});
+        }
+
+        public async Task<IList<PartitionDefinition>> GetDefinitions(int applicationId)
+        {
+            return await _uow.ToListAsync<PartitionDefinition>("ApplicationId = @1", applicationId);
+        }
+
+        public async Task<IList<PartitionDefinition>> GetDefinitionsToTag()
+        {
+            return await _uow.ToListAsync<PartitionDefinition>("ImportantThreshold > @amount OR CriticalThreshold > @amount", new{amount = 0});
+        }
+
+        public async Task<IReadOnlyList<IncidentToTag>> GetIncidentsToTag(PartitionDefinition definition)
+        {
+            var threshold = Math.Min(definition.CriticalThreshold ?? int.MaxValue,
+                definition.ImportantThreshold ?? int.MaxValue);
+            if (threshold == int.MaxValue)
+                return new IncidentToTag[0];
+
+            var items = new List<IncidentToTag>();
+            using (var cmd = _uow.CreateDbCommand())
+            {
+                cmd.CommandText =
+                    @"select IncidentId, ApplicationId, COUNT(ipv.ValueId) ValueCount
+                        FROM IncidentPartitionValues ipv
+                        join incidents on (Incidents.Id = IncidentId)
+                        WHERE ipv.PartitionId = @partitionId
+                        GROUP BY ApplicationId, ipv.IncidentId, ipv.PartitionId
+                        HAVING count(ipv.ValueId) > @threshold";
+
+                cmd.AddParameter("partitionId", definition.Id);
+                cmd.AddParameter("threshold", threshold);
+
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    while (await reader.ReadAsync())
+                    {
+                        var entity = new IncidentToTag
+                        {
+                            PartitionId = definition.Id,
+                            IncidentId = reader.GetInt32(0),
+                            ApplicationId = reader.GetInt32(1),
+                            Count = reader.GetInt32(2),
+                        };
+
+                        items.Add(entity);
+                    }
+                }
+            }
+
+            if (items.Count == 0)
+            {
+                return new IncidentToTag[0];
+            }
+            
+            var criticalIncidentsUpdate = new List<int>();
+            var importantIncidentsUpdate = new List<int>();
+            using (var cmd = _uow.CreateDbCommand())
+            {
+                var ids = string.Join(", ", items.Select(x => x.IncidentId));
+                cmd.CommandText = $"SELECT IncidentId, IsCritical,IsImportant " +
+                                  $"FROM PartitionTaggedIncidents " +
+                                  $"WHERE IncidentId IN ({ids}) AND PartitionId = @partitionId";
+                cmd.AddParameter("partitionId", definition.Id);
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    while (await reader.ReadAsync())
+                    {
+                        var incidentId = reader.GetInt32(0);
+                        var isCritical = reader.GetBoolean(1);
+                        var isImportant = reader.GetBoolean(2);
+                        var incident = items.FirstOrDefault(x => x.IncidentId == incidentId);
+                        if (incident == null)
+                            continue;
+
+
+                        var isCurrentCritical = definition.CriticalThreshold != null && incident.Count > definition.CriticalThreshold;
+                        var isCurrentImportant = definition.ImportantThreshold != null && incident.Count > definition.ImportantThreshold;
+
+                        var updated = false;
+                        if (isImportant != isCurrentImportant)
+                        {
+                            importantIncidentsUpdate.Add(incidentId);
+                            updated = true;
+                        }
+                        if (isCritical != isCurrentCritical)
+                        {
+                            criticalIncidentsUpdate.Add(incidentId);
+                            updated = true;
+                        }
+
+                        if (!updated)
+                        {
+                            items.Remove(incident);
+                        }
+                    }
+                }
+            }
+
+            if (criticalIncidentsUpdate.Count > 0)
+            {
+                using (var cmd = _uow.CreateDbCommand())
+                {
+                    var ids = string.Join(", ", criticalIncidentsUpdate);
+                    cmd.CommandText = $"UDPATE PartitionTaggedIncidents SET IsCritical=1 WHERE IncidentId IN ({ids})";
+                    await cmd.ExecuteNonQueryAsync();
+                }
+            }
+            if (importantIncidentsUpdate.Count > 0)
+            {
+                using (var cmd = _uow.CreateDbCommand())
+                {
+                    var ids = string.Join(", ", importantIncidentsUpdate);
+                    cmd.CommandText = $"UDPATE PartitionTaggedIncidents SET IsImportant=1 WHERE IncidentId IN ({ids})";
+                    await cmd.ExecuteNonQueryAsync();
+                }
+            }
+
+            return items;
+        }
+
+        public async Task<IList<IncidentPartitionSummary>> GetIncidentSummary(int applicationId, int incidentId)
+        {
+            var defs = await GetDefinitions(applicationId);
+
+            using (var cmd = _uow.CreateDbCommand())
+            {
+                cmd.CommandText =
+                    @"SELECT PartitionId, IncidentId, Count(IncidentPartitionValues.ValueId) IncidentCount, (SELECT Count(*) FROM ApplicationPartitionValues WHERE PartitionId=PartitionId) AppCount
+                                    FROM IncidentPartitionValues
+                                    WHERE IncidentId = @incidentId
+                                    GROUP BY PartitionId, IncidentId";
+                cmd.AddParameter("incidentId", incidentId);
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    var items = new List<IncidentPartitionSummary>();
+                    while (await reader.ReadAsync())
+                    {
+                        var paritionId = (int) reader["PartitionId"];
+                        var def = defs.FirstOrDefault(x => x.Id == paritionId);
+                        if (def == null)
+                        {
+                            _logger.Warn("Failed to find definition " + paritionId);
+                            continue;
+                        }
+
+                        var totalCount = def.NumberOfItems == 0 ? (int) reader["AppCount"] : def.NumberOfItems;
+
+                        var entity = new IncidentPartitionSummary
+                        {
+                            Id = def.Id,
+                            PartitionTitle = def.Name,
+                            IncidentId = (int) reader["IncidentId"],
+                            ValueCount = (int) reader["IncidentCount"],
+                            TotalCount = totalCount
+                        };
+
+                        items.Add(entity);
+                    }
+
+                    return items;
+                }
+            }
+        }
+
+        public async Task<IEnumerable<IncidentPartitionSummary>> GetPrioritized(int[] incidentIds)
+        {
+            var defs = await GetDefinitions();
+
+            string cteConstraint = "";
+            if (incidentIds?.Length > 0)
+            {
+                cteConstraint = $" WHERE IncidentId IN ({string.Join(",", incidentIds)})";
+            }
+
+            using (var cmd = _uow.CreateDbCommand())
+            {
+                cmd.CommandText = $@"with IncidentPartitions
+                                    AS
+                                    ( 
+                                        SELECT TOP (10) PartitionId, IncidentId, Count(IncidentPartitionValues.ValueId) IncidentCount, 
+                                                (SELECT Count(*) FROM ApplicationPartitionValues WHERE PartitionId=PartitionId) AppCount
+                                        FROM IncidentPartitionValues {cteConstraint}
+                                        GROUP BY IncidentId, PartitionId
+                                        ORDER BY IncidentCount DESC
+                                    )
+                                    select pd.Id PartitionId, 
+                                            case when pd.NumberOfItems is null 
+                                                then (ip.IncidentCount*100/iif(ip.AppCount=0,1,ip.AppCount)*pd.Weight) 
+                                                else (ip.IncidentCount*100/pd.NumberOfItems*pd.Weight) 
+                                            end as Severity, 
+                                            ip.IncidentCount, 
+                                            ip.IncidentId, 
+                                            pd.Name, 
+                                            ip.AppCount
+                                    FROM IncidentPartitions ip
+                                    JOIN incidents i ON (i.id=ip.incidentId)
+                                    JOIN PartitionDefinitions pd ON (pd.Id=PartitionId)
+                                    WHERE i.state = 0
+                                    ORDER BY Severity DESC";
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    var items = new List<IncidentPartitionSummary>();
+                    while (await reader.ReadAsync())
+                    {
+                        var partitionId = (int) reader["PartitionId"];
+                        var def = defs.First(x => x.Id == partitionId);
+                        var totalCount = def.NumberOfItems == 0 ? (int) reader["AppCount"] : def.NumberOfItems;
+
+                        var entity = new IncidentPartitionSummary
+                        {
+                            Id = def.Id,
+                            PartitionTitle = def.Name,
+                            IncidentId = (int) reader["IncidentId"],
+                            ValueCount = (int) reader["IncidentCount"],
+                            TotalCount = totalCount,
+                            Severity = (int) reader["Severity"]
+                        };
+
+                        items.Add(entity);
+                    }
+
+                    return items;
+                }
+            }
+        }
+
+        public async Task<IEnumerable<IncidentPartitionSummary>> GetPrioritized(int applicationId)
+        {
+            var defs = await GetDefinitions();
+            using (var cmd = _uow.CreateDbCommand())
+            {
+                cmd.CommandText = @"with IncidentPartitions
+                                    AS
+                                    ( 
+                                        SELECT TOP (10) PartitionId, IncidentId, Count(IncidentPartitionValues.ValueId) IncidentCount, 
+                                                (SELECT Count(*) FROM ApplicationPartitionValues WHERE PartitionId=PartitionId) AppCount
+                                        FROM IncidentPartitionValues
+                                        JOIN Incidents ON (Incidents.Id = IncidentPartitionValues.IncidentId)
+                                        WHERE Incidents.ApplicationId = @appId
+                                        AND Incidents.state = 0
+                                        GROUP BY IncidentId, PartitionId
+                                        ORDER BY IncidentCount DESC
+                                    )
+                                    select pd.Id PartitionId, case when pd.NumberOfItems is null then (ip.IncidentCount*100/ip.AppCount*pd.Weight) else (ip.IncidentCount*100/pd.NumberOfItems*pd.Weight) end as Severity, ip.IncidentCount, ip.IncidentId, pd.Name, ip.AppCount
+                                    FROM IncidentPartitions ip
+                                    JOIN PartitionDefinitions pd ON (pd.Id=PartitionId)
+                                    ORDER BY Severity DESC";
+                cmd.AddParameter("appId", applicationId);
+                using (var reader = await cmd.ExecuteReaderAsync())
+                {
+                    var items = new List<IncidentPartitionSummary>();
+                    while (await reader.ReadAsync())
+                    {
+                        var def = defs.First(x => x.Id == (int) reader["PartitionId"]);
+                        var totalCount = def.NumberOfItems == 0 ? (int) reader["AppCount"] : def.NumberOfItems;
+
+                        var entity = new IncidentPartitionSummary
+                        {
+                            Id = def.Id,
+                            PartitionTitle = def.Name,
+                            IncidentId = (int) reader["IncidentId"],
+                            ValueCount = (int) reader["IncidentCount"],
+                            TotalCount = totalCount,
+                            Severity = (int) reader["Severity"]
+                        };
+
+                        items.Add(entity);
+                    }
+
+                    return items;
+                }
+            }
+        }
+
+        public async Task UpdateAsync(IncidentPartitionValue incidentPartitionValues)
+        {
+            await _uow.UpdateAsync(incidentPartitionValues);
+        }
+
+        public async Task UpdateAsync(PartitionDefinition definition)
+        {
+            await _uow.UpdateAsync(definition);
+        }
+
+        public async Task UpdateAsync(ApplicationPartitionValue applicationValues)
+        {
+            await _uow.UpdateAsync(applicationValues);
+        }
+
+        public async Task<PartitionDefinition> GetByIdAsync(int id)
+        {
+            return await _uow.FirstAsync<PartitionDefinition>(new {Id = id});
+        }
+
+        public async Task DeleteDefinitionByIdAsync(int partitionId)
+        {
+            await _uow.DeleteAsync<IncidentPartitionValue>(new { PartitionId = partitionId });
+            await _uow.DeleteAsync<ApplicationPartitionValue>(new { PartitionId = partitionId });
+            await _uow.DeleteAsync<PartitionDefinition>(new {Id = partitionId});
+        }
+
+        private async Task<IList<PartitionDefinition>> GetDefinitions()
+        {
+            return await _uow.ToListAsync<PartitionDefinition>("Id > 0");
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.SqlServer/ReadMe.md b/src/Server/Data/Coderr.Server.SqlServer/ReadMe.md
similarity index 98%
rename from src/Server/Coderr.Server.SqlServer/ReadMe.md
rename to src/Server/Data/Coderr.Server.SqlServer/ReadMe.md
index 40031f5e..a12a4551 100644
--- a/src/Server/Coderr.Server.SqlServer/ReadMe.md
+++ b/src/Server/Data/Coderr.Server.SqlServer/ReadMe.md
@@ -1,6 +1,6 @@
-SqlServer implementation of the data layer
-==========================================
-
-Currently there are only one implementation of the data layer. And it's for Microsoft Sql Server version 2012 and above.
-
-Feel free to make a copy of this project and adapt the SQL queries for your favorite database engine.
+SqlServer implementation of the data layer
+==========================================
+
+Currently there are only one implementation of the data layer. And it's for Microsoft Sql Server version 2012 and above.
+
+Feel free to make a copy of this project and adapt the SQL queries for your favorite database engine.
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/AnalyticsRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/AnalyticsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/AnalyticsRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/AnalyticsRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Environments/EnvironmentFilter.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Environments/EnvironmentFilter.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Environments/EnvironmentFilter.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Environments/EnvironmentFilter.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportEntityMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportEntityMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportEntityMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportEntityMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/ErrorReportRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Feedback/LookupReportsForFeedback.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Feedback/LookupReportsForFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Feedback/LookupReportsForFeedback.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Feedback/LookupReportsForFeedback.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Handlers/ProcessInboundCollectionsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Handlers/ProcessInboundCollectionsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Handlers/ProcessInboundCollectionsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Handlers/ProcessInboundCollectionsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/IncidentBeingAnalyzedMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/IncidentBeingAnalyzedMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/IncidentBeingAnalyzedMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/IncidentBeingAnalyzedMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionProperty.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionProperty.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionProperty.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionProperty.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionPropertyMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionPropertyMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionPropertyMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/ErrorReportContextCollectionPropertyMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/Importer.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/Importer.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/Importer.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/Importer.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollection.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollection.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollection.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollection.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollectionMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollectionMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollectionMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Jobs/InboundCollectionMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/ReportSpikeRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/ReportSpikeRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/ReportSpikeRepository.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/ReportSpikeRepository.cs
diff --git a/src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/SpikeAggregationMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/SpikeAggregationMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/SpikeAggregationMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/ReportAnalyzer/Spikes/SpikeAggregationMapper.cs
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v01.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v01.sql
new file mode 100644
index 00000000..7f1af65d
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v01.sql
@@ -0,0 +1,38 @@
+﻿IF OBJECT_ID(N'dbo.[PartitionDefinitions]', N'U') IS NULL
+BEGIN
+
+    CREATE TABLE dbo.PartitionDefinitions
+    (
+	    Id int not null identity primary key,
+	    ApplicationId int not null CONSTRAINT FK_PartitionDefinitions_Applications REFERENCES Applications (Id) ON DELETE CASCADE,
+	    Name varchar(40) not null,
+	    NumberOfItems int null,
+	    PartitionKey varchar(50) not null,
+	    Weight int not null default (1)
+    );
+
+    CREATE TABLE dbo.InboundPartitionValues
+    (
+	    Id int not null identity primary key,
+	    IncidentId int not null  CONSTRAINT FK_PartitionInboundValues_Incidents REFERENCES Incidents (Id) ON DELETE CASCADE,
+	    PartitionKey varchar(40) not null,
+	    Value varchar(40) not null,
+    );
+
+    CREATE TABLE dbo.IncidentPartitionValues
+    (
+	    Id int not null identity primary key,
+	    PartitionId int not null, --får felet multiple cascade path :( CONSTRAINT FK_IncidentPartitionValues_PartitionDefinitions REFERENCES PartitionDefinitions (Id) ON DELETE SET NULL,
+	    IncidentId int not null CONSTRAINT FK_IncidentPartitionValues_Incidents REFERENCES Incidents (Id) ON DELETE CASCADE,
+	    Value varchar(40) not null
+    );
+
+    CREATE TABLE dbo.ApplicationPartitionValues
+    (
+	    Id int not null identity primary key,
+	    PartitionId int not null CONSTRAINT FK_ApplicationPartitionValues_PartitionDefinitions REFERENCES PartitionDefinitions (Id) ON DELETE CASCADE,
+	    Value varchar(MAX) not null
+    );
+
+
+END
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v02.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v02.sql
new file mode 100644
index 00000000..da138dcf
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v02.sql
@@ -0,0 +1,19 @@
+﻿IF OBJECT_ID(N'dbo.[CommonIncidentProgressTracking]', N'U') IS NULL
+BEGIN
+
+    CREATE TABLE dbo.CommonIncidentProgressTracking
+    (
+	    IncidentId int NOT NULL primary key,
+	    ApplicationId int NOT NULL,
+	    CreatedAtUtc date NOT NULL,
+	    AssignedAtUtc date NULL,
+	    AssignedToId int NULL,
+	    ClosedById int NULL,
+	    ClosedAtUtc date NULL,
+	    ReOpenCount int NOT NULL default 0,
+	    ReOpenedAtUtc date NULL,
+	    VersionCount int default 1,
+	    Versions varchar(255) null
+    );
+
+END;
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v03.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v03.sql
new file mode 100644
index 00000000..e5050009
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v03.sql
@@ -0,0 +1,21 @@
+﻿if not exists (select * from sysobjects where name='ApplicationGroups' and xtype='U')
+begin
+
+    CREATE TABLE dbo.ApplicationGroups
+    (
+        Id int not null identity primary key,
+        Name varchar(50) not null
+    );
+
+    CREATE Table dbo.ApplicationGroupMap
+    (
+        Id int not null identity primary key,
+        ApplicationId int not null constraint FK_ApplicationGroupMap_Application foreign key references Applications(id) on delete cascade,
+        ApplicationGroupId int not null constraint FK_ApplicationGroupMap_ApplicationGroup foreign key references ApplicationGroups(id),
+    );
+
+    insert into ApplicationGroups (Name) VALUES('General');
+    insert into ApplicationGroupMap (ApplicationId, ApplicationGroupId)
+    SELECT Id, 1
+    FROM Applications;
+end
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v04.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v04.sql
new file mode 100644
index 00000000..604cc11f
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v04.sql
@@ -0,0 +1,7 @@
+﻿ALTER TABLE IncidentPartitionValues ADD ValueId int constraint FK_IncidentPartitionValues_ApplicationPartitionValues references ApplicationPartitionValues(Id);
+GO
+UPDATE IncidentPartitionValues
+SET ValueId = apv.Id
+FROM IncidentPartitionValues ipv
+JOIN ApplicationPartitionValues apv ON (apv.PartitionId = ipv.PartitionId)
+WHERE ipv.Value = apv.Value
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v05.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v05.sql
new file mode 100644
index 00000000..4cdf9422
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v05.sql
@@ -0,0 +1,7 @@
+﻿ALTER TABLE IncidentPartitionValues ADD ReceivedAtUtc datetime;
+GO
+UPDATE IncidentPartitionValues
+SET ReceivedAtUtc = i.CreatedAtUtc
+FROM IncidentPartitionValues ipv
+JOIN Incidents i ON (i.Id = ipv.IncidentId)
+
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v06.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v06.sql
new file mode 100644
index 00000000..f1e96766
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v06.sql
@@ -0,0 +1,4 @@
+﻿IF COL_LENGTH('dbo.IncidentPartitionValues', 'Value') IS NOT NULL
+BEGIN
+    ALTER TABLE IncidentPartitionValues DROP COLUMN Value;
+END
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v07.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v07.sql
new file mode 100644
index 00000000..754e829c
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v07.sql
@@ -0,0 +1,12 @@
+﻿alter table CommonIncidentProgressTracking alter column CreatedAtUtc datetime not null;
+alter table CommonIncidentProgressTracking alter column AssignedAtUtc datetime null;
+alter table CommonIncidentProgressTracking alter column ClosedAtUtc datetime null;
+alter table CommonIncidentProgressTracking alter column ReOpenedAtUtc datetime null;
+
+create table dbo.ApplicationPartitionInsights
+(
+    Id int identity primary key not null,
+	PartitionId int not null constraint FK_ApplicationPartitionInsights_PartitionDefinitions foreign key references PartitionDefinitions(Id) on delete cascade,
+	Value int not null,
+	YearMonth Date not null
+);
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v29.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v08.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v29.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v08.sql
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v09.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v09.sql
new file mode 100644
index 00000000..33bd900c
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v09.sql
@@ -0,0 +1,5 @@
+﻿ALTER TABLE IncidentPartitionValues DROP CONSTRAINT FK_IncidentPartitionValues_Incidents;
+ALTER TABLE InboundPartitionValues DROP CONSTRAINT FK_PartitionInboundValues_Incidents;
+alter table ApplicationPartitionInsights alter column Value varchar(max) not null;
+alter table ErrorReportOrigins drop constraint FK_ErrorReportOrigins_Reports;
+alter table InboundPartitionValues add ReceivedAtUtc datetime not null default GetUtcDate();
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v10.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v10.sql
new file mode 100644
index 00000000..f69497e2
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v10.sql
@@ -0,0 +1,31 @@
+﻿create table AzureDevOpsSettings
+(
+    ApplicationId int not null primary key,
+    CreatedById int not null constraint FK_AzureDevOpsSettings_Users foreign key references Users(AccountId),
+    Url varchar(60) not null,
+    PersonalAccessToken varchar(60) not null,
+    ProjectId varchar(40),
+    ProjectName varchar(40),
+    AreaPath varchar(255),
+    AreaPathId varchar(40),
+    IterationId varchar(40),
+    IterationName varchar(255)
+);
+
+create table WorkItemMapping
+(
+    IncidentId int not null primary key,
+    ApplicationId int not null,
+    WorkItemId varchar(60) not null,
+    LastSynchronizationAtUtc datetime not null,
+    Name varchar(255) not null,
+    ApiUrl varchar(255) not null,
+    UiUrl varchar(255) not null,
+    IntegrationName varchar(40) not null
+);
+
+create table WorkItemIntegrationMapping
+(
+    ApplicationId int not null primary key,
+    IntegrationName varchar(40) not null
+);
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v11.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v11.sql
new file mode 100644
index 00000000..c89fbd13
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v11.sql
@@ -0,0 +1,13 @@
+﻿alter table PartitionDefinitions add CriticalThreshold int;
+alter table PartitionDefinitions add ImportantThreshold int;
+
+create table PartitionTaggedIncidents
+(
+  IncidentId int not null,
+  PartitionId int not null,
+  IsCritical bit not null,
+  IsImportant bit not null
+);
+
+alter table UserNotificationSettings add CriticalIncident varchar(40) not null default 'Disabled';
+alter table UserNotificationSettings add ImportantIncident varchar(40) not null default 'Disabled';
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v12.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v12.sql
new file mode 100644
index 00000000..d9cd217a
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v12.sql
@@ -0,0 +1,2 @@
+﻿alter table AzureDevOpsSettings add AutoAddImportant bit not null default 0;
+alter table AzureDevOpsSettings add AutoAddCritical bit not null default 0;
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v13.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v13.sql
new file mode 100644
index 00000000..5b9cdce0
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v13.sql
@@ -0,0 +1,4 @@
+﻿alter table AzureDevOpsSettings add WorkItemTypeName varchar(100) NULL;
+alter table AzureDevOpsSettings add AssignedStateName varchar(100) NULL;
+alter table AzureDevOpsSettings add SolvedStateName varchar(100) NULL;
+alter table AzureDevOpsSettings add ClosedStateName varchar(100) NULL;
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v14.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v14.sql
new file mode 100644
index 00000000..e75cea2e
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/Common.v14.sql
@@ -0,0 +1,6 @@
+﻿create table WorkItemUserMappings
+(
+    AccountId int not null primary key,
+    ExternalId varchar(255) not null,
+    AdditionalData varchar(2000)
+);
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/CommonSchemaPointer.cs b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/CommonSchemaPointer.cs
new file mode 100644
index 00000000..d3921935
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Common/CommonSchemaPointer.cs
@@ -0,0 +1,6 @@
+﻿namespace Coderr.Server.SqlServer.Schema.Common
+{
+    public class CommonSchemaPointer
+    {
+    }
+}
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v01.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v01.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v01.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v01.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v02.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v02.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v02.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v02.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v03.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v03.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v03.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v03.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v04.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v04.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v04.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v04.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v05.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v05.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v05.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v05.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v06.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v06.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v06.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v06.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v07.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v07.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v07.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v07.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v08.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v08.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v08.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v08.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v09.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v09.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v09.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v09.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v10.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v10.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v10.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v10.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v11.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v11.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v11.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v11.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v12.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v12.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v12.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v12.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v13.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v13.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v13.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v13.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v14.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v14.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v14.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v14.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v15.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v15.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v15.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v15.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v16.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v16.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v16.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v16.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v17.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v17.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v17.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v17.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v18.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v18.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v18.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v18.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v19.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v19.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v19.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v19.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v20.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v20.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v20.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v20.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v21.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v21.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v21.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v21.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v22.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v22.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v22.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v22.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v23.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v23.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v23.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v23.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v24.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v24.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v24.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v24.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v25.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v25.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v25.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v25.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v26.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v26.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v26.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v26.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v27.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v27.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v27.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v27.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v28.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v28.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v28.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v28.sql
diff --git a/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v29.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v29.sql
new file mode 100644
index 00000000..5f282702
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v29.sql
@@ -0,0 +1 @@
+﻿
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v30.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v30.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v30.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v30.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v31.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v31.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v31.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v31.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v32.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v32.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v32.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v32.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v33.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v33.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v33.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v33.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v34.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v34.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v34.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v34.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v35.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v35.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v35.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v35.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/Coderr.v36.sql b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v36.sql
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Schema/Coderr.v36.sql
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/Coderr.v36.sql
diff --git a/src/Server/Coderr.Server.SqlServer/Schema/CoderrMigrationPointer.cs b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/CoderrMigrationPointer.cs
similarity index 73%
rename from src/Server/Coderr.Server.SqlServer/Schema/CoderrMigrationPointer.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/CoderrMigrationPointer.cs
index 0a9872fa..fd101688 100644
--- a/src/Server/Coderr.Server.SqlServer/Schema/CoderrMigrationPointer.cs
+++ b/src/Server/Data/Coderr.Server.SqlServer/Schema/Oss/CoderrMigrationPointer.cs
@@ -2,7 +2,7 @@
 using System.Collections.Generic;
 using System.Text;
 
-namespace Coderr.Server.SqlServer.Schema
+namespace Coderr.Server.SqlServer.Schema.Oss
 {
     public class CoderrMigrationPointer
     {
diff --git a/src/Server/Coderr.Server.SqlServer/SqlServerTools.cs b/src/Server/Data/Coderr.Server.SqlServer/SqlServerTools.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/SqlServerTools.cs
rename to src/Server/Data/Coderr.Server.SqlServer/SqlServerTools.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Tools/ConnectionStringHelper.cs b/src/Server/Data/Coderr.Server.SqlServer/Tools/ConnectionStringHelper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Tools/ConnectionStringHelper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Tools/ConnectionStringHelper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Tools/DbCommandExtensions.cs b/src/Server/Data/Coderr.Server.SqlServer/Tools/DbCommandExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Tools/DbCommandExtensions.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Tools/DbCommandExtensions.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Tools/EntitySerializer.cs b/src/Server/Data/Coderr.Server.SqlServer/Tools/EntitySerializer.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Tools/EntitySerializer.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Tools/EntitySerializer.cs
diff --git a/src/Server/Coderr.Server.SqlServer/UnitOfWorkWithTransaction.cs b/src/Server/Data/Coderr.Server.SqlServer/UnitOfWorkWithTransaction.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/UnitOfWorkWithTransaction.cs
rename to src/Server/Data/Coderr.Server.SqlServer/UnitOfWorkWithTransaction.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackResultItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackResultItemMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackResultItemMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetApplicationFeedbackResultItemMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetIncidentFeedbackItemsHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetIncidentFeedbackItemsHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetIncidentFeedbackItemsHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetIncidentFeedbackItemsHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackHandler.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackResultItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackResultItemMapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackResultItemMapper.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Web/Feedback/Queries/GetOverviewFeedbackResultItemMapper.cs
diff --git a/src/Server/Coderr.Server.SqlServer/Web/Overview/GetOverviewHandler.cs b/src/Server/Data/Coderr.Server.SqlServer/Web/Overview/GetOverviewHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.SqlServer/Web/Overview/GetOverviewHandler.cs
rename to src/Server/Data/Coderr.Server.SqlServer/Web/Overview/GetOverviewHandler.cs
diff --git a/src/Server/Data/Coderr.Server.SqlServer/WorkItems/UserMappingRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/UserMappingRepository.cs
new file mode 100644
index 00000000..adf00acf
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/UserMappingRepository.cs
@@ -0,0 +1,34 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.WorkItems;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.WorkItems
+{
+    [ContainerService]
+    internal class UserMappingRepository : IUserMappingRepository
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public UserMappingRepository(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public Task Create(WorkItemUserMapping mapping)
+        {
+            return _unitOfWork.InsertAsync(mapping);
+        }
+
+        public Task<WorkItemUserMapping> Get(int accountId)
+        {
+            return _unitOfWork.FirstOrDefaultAsync<WorkItemUserMapping>("accountId = @accountId", new {accountId});
+        }
+
+        public Task<WorkItemUserMapping> GetByExternalId(string externalId)
+        {
+            return _unitOfWork.FirstOrDefaultAsync<WorkItemUserMapping>("externalId = @externalId", new {externalId});
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemIntegrationMappingMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemIntegrationMappingMapper.cs
new file mode 100644
index 00000000..40a81158
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemIntegrationMappingMapper.cs
@@ -0,0 +1,13 @@
+﻿using Coderr.Server.App.WorkItems;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.WorkItems
+{
+    class WorkItemIntegrationMappingMapper : CrudEntityMapper<WorkItemIntegrationMapping>
+    {
+        public WorkItemIntegrationMappingMapper() : base("WorkItemIntegrationMapping")
+        {
+            Property(x => x.ApplicationId).PrimaryKey(false);
+        }
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemMapper.cs b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemMapper.cs
new file mode 100644
index 00000000..73a2136d
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemMapper.cs
@@ -0,0 +1,12 @@
+﻿using Coderr.Server.Abstractions.WorkItems;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.WorkItems
+{
+    class WorkItemMapper : CrudEntityMapper<WorkItemMapping>
+    {
+        public WorkItemMapper() : base("WorkItemMapping")
+        {
+        }
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemRepository.cs b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemRepository.cs
new file mode 100644
index 00000000..53745434
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemRepository.cs
@@ -0,0 +1,77 @@
+﻿using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.App.WorkItems;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.SqlServer.WorkItems
+{
+    [ContainerService]
+    public class WorkItemRepository : IWorkItemRepository
+    {
+        private IAdoNetUnitOfWork _unitOfWork;
+
+        public WorkItemRepository(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public async Task<WorkItemMapping> Find(int incidentId)
+        {
+            return await _unitOfWork.FirstOrDefaultAsync<WorkItemMapping>(new { IncidentId = incidentId });
+        }
+
+        public async Task<IReadOnlyList<WorkItemMapping>> FindAllWorkItems(string integrationName)
+        {
+            return await _unitOfWork.ToListAsync<WorkItemMapping>("IntegrationName = @integrationName", new { integrationName });
+        }
+
+        public async Task Create(WorkItemMapping item)
+        {
+            await _unitOfWork.InsertAsync(item);
+        }
+
+        public async Task MapApplication(int applicationId, string integrationName)
+        {
+            if (await _unitOfWork.FirstOrDefaultAsync<WorkItemIntegrationMapping>("ApplicationId = @id", new { id = applicationId }) == null)
+                await _unitOfWork.InsertAsync(new WorkItemIntegrationMapping
+                {
+                    IntegrationName = integrationName,
+                    ApplicationId = applicationId
+                });
+            else
+            {
+                await _unitOfWork.UpdateAsync(new WorkItemIntegrationMapping
+                {
+                    IntegrationName = integrationName,
+                    ApplicationId = applicationId
+                });
+            }
+        }
+
+        public async Task<string> GetIntegrationName(int applicationId)
+        {
+            var entity = await _unitOfWork.FirstOrDefaultAsync<WorkItemIntegrationMapping>("ApplicationId = @applicationId", new { applicationId });
+            return entity?.IntegrationName;
+        }
+
+        public async Task DeleteAbandonedWorkItems()
+        {
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText = @"DELETE FROM WorkItemMapping
+                                    FROM WorkItemMapping
+                                    LEFT JOIN Incidents ON (Incidents.Id = IncidentId)
+                                    WHERE Incidents.Id IS NULL";
+                await cmd.ExecuteNonQueryAsync();
+            }
+        }
+
+        public async Task Delete(WorkItemMapping workItem)
+        {
+            await _unitOfWork.DeleteAsync<WorkItemMapping>(new {workItem.IncidentId});
+        }
+    }
+}
diff --git a/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemUserMappingMap.cs b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemUserMappingMap.cs
new file mode 100644
index 00000000..d38dddc3
--- /dev/null
+++ b/src/Server/Data/Coderr.Server.SqlServer/WorkItems/WorkItemUserMappingMap.cs
@@ -0,0 +1,22 @@
+﻿using System;
+using System.Collections.Generic;
+using Coderr.Server.Abstractions.WorkItems;
+using Griffin.Data.Mapper;
+using Newtonsoft.Json;
+
+namespace Coderr.Server.SqlServer.WorkItems
+{
+    class WorkItemUserMappingMap : CrudEntityMapper<WorkItemUserMapping>
+    {
+        public WorkItemUserMappingMap() : base("WorkItemUserMappings")
+        {
+            Property(x => x.AccountId).PrimaryKey(false);
+            Property(x => x.AdditionalData)
+                .ToColumnValue2(x => x.Value == null ? null : JsonConvert.SerializeObject(x.Value))
+                .ToPropertyValue2(x =>
+                    x.Value is DBNull
+                        ? null
+                        : JsonConvert.DeserializeObject<IDictionary<string, string>>((string)x.Value));
+        }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Coderr.Server.Plugins.AzureDevOps.Api.csproj b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Coderr.Server.Plugins.AzureDevOps.Api.csproj
new file mode 100644
index 00000000..d3eaccc2
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Coderr.Server.Plugins.AzureDevOps.Api.csproj
@@ -0,0 +1,15 @@
+﻿<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="DotNetCqs" Version="2.1.1" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\App\Coderr.Server.Api\Coderr.Server.Api.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Commands/SaveAzureSettings.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Commands/SaveAzureSettings.cs
new file mode 100644
index 00000000..61f6598e
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Commands/SaveAzureSettings.cs
@@ -0,0 +1,46 @@
+﻿using Coderr.Server.Api;
+
+namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Commands
+{
+    [Command]
+    public class SaveAzureSettings
+    {
+        public int ApplicationId { get; set; }
+        public string AreaPath { get; set; }
+        public string AreaPathId { get; set; }
+
+        /// <summary>
+        ///     Started working on the item
+        /// </summary>
+        public string AssignedStateName { get; set; }
+
+        public bool AutoAddCritical { get; set; }
+        public bool AutoAddImportant { get; set; }
+
+        /// <summary>
+        ///     Closed can also mean that it wont be fixed.
+        /// </summary>
+        public string ClosedStateName { get; set; }
+
+        public string PersonalAccessToken { get; set; }
+        public string ProjectId { get; set; }
+        public string ProjectName { get; set; }
+
+        /// <summary>
+        ///     Name of the state that is used when the item is closed.
+        /// </summary>
+        public string SolvedStateName { get; set; }
+        
+        public string Url { get; set; }
+
+        /// <summary>
+        ///     Type of work item that we are integrating against in the project.
+        /// </summary>
+        /// <remarks>
+        ///     <para>
+        ///         Used when we create a new work item for issues.
+        ///     </para>
+        /// </remarks>
+        public string WorkItemTypeName { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPaths.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPaths.cs
new file mode 100644
index 00000000..ca64e525
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPaths.cs
@@ -0,0 +1,34 @@
+﻿using Coderr.Server.Api;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    [Message]
+    public class GetAreaPaths : Query<GetAreaPathsResult>
+    {
+        /// <summary>
+        /// Token used to authenticate.
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///Should have "Read &amp; Write" access for "Work items".
+        /// </para>
+        /// </remarks>
+        public string PersonalAccessToken { get; set; }
+
+        /// <summary>
+        /// Url to azure dev ops (including organization)
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///For Azure (cloud) the url should be <c>https://dev.azure.com/yourOrganizationName</c>
+        /// </para>
+        /// </remarks>
+        public string Url { get; set; }
+
+        /// <summary>
+        /// Name or id of the project that we should connect to.
+        /// </summary>
+        public string ProjectNameOrId { get; set; }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPathsResult.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPathsResult.cs
new file mode 100644
index 00000000..fdbcfd9d
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPathsResult.cs
@@ -0,0 +1,13 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    /// <summary>
+    /// Result for <see cref="GetAreaPaths"/>
+    /// </summary>
+    public class GetAreaPathsResult
+    {
+        /// <summary>
+        /// Found paths.
+        /// </summary>
+        public GetAreaPathsResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPathsResultItem.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPathsResultItem.cs
new file mode 100644
index 00000000..6497eb74
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAreaPathsResultItem.cs
@@ -0,0 +1,23 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    /// <summary>
+    /// Item in <see cref="GetAreaPathsResult"/>
+    /// </summary>
+    public class GetAreaPathsResultItem
+    {
+        /// <summary>
+        /// Identity
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Name 
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Path to use in work items
+        /// </summary>
+        public string Path { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAzureSettings.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAzureSettings.cs
new file mode 100644
index 00000000..1f96d1aa
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAzureSettings.cs
@@ -0,0 +1,22 @@
+﻿using System;
+using Coderr.Server.Api;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    [Message]
+    public class GetAzureSettings : Query<GetAzureSettingsResult>
+    {
+        public GetAzureSettings(int applicationId)
+        {
+            if (applicationId <= 0) throw new ArgumentOutOfRangeException(nameof(applicationId));
+            ApplicationId = applicationId;
+        }
+
+        protected GetAzureSettings()
+        {
+        }
+
+        public int ApplicationId { get; private set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAzureSettingsResult.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAzureSettingsResult.cs
new file mode 100644
index 00000000..81b47afa
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetAzureSettingsResult.cs
@@ -0,0 +1,36 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    public class GetAzureSettingsResult
+    {
+        public int ApplicationId { get; set; }
+        public string AreaPath { get; set; }
+        public string AreaPathId { get; set; }
+        public string PersonalAccessToken { get; set; }
+        public string ProjectId { get; set; }
+        public string ProjectName { get; set; }
+        public string Url { get; set; }
+        public bool AutoAddCritical { get; set; }
+        public bool AutoAddImportant { get; set; }
+
+
+        /// <summary>
+        /// Type of work item that we are integrating against in the project.
+        /// </summary>
+        public string WorkItemTypeName { get; set; }
+
+        /// <summary>
+        /// Started working on the item
+        /// </summary>
+        public string AssignedStateName { get; set; }
+
+        /// <summary>
+        /// Name of the state that is used when the item is closed.
+        /// </summary>
+        public string SolvedStateName { get; set; }
+
+        /// <summary>
+        /// Closed can also mean that it wont be fixed.
+        /// </summary>
+        public string ClosedStateName { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterations.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterations.cs
new file mode 100644
index 00000000..438527ad
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterations.cs
@@ -0,0 +1,37 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using Coderr.Server.Api;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    [Message]
+    public class GetIterations : Query<GetIterationsResult>
+    {
+        /// <summary>
+        /// Token used to authenticate.
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///Should have "Read &amp; Write" access for "Work items".
+        /// </para>
+        /// </remarks>
+        public string PersonalAccessToken { get; set; }
+
+        /// <summary>
+        /// Url to azure dev ops (including organization)
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///For Azure (cloud) the url should be <c>https://dev.azure.com/yourOrganizationName</c>
+        /// </para>
+        /// </remarks>
+        public string Url { get; set; }
+
+        /// <summary>
+        /// Name or id of the project that we should connect to.
+        /// </summary>
+        public string ProjectNameOrId { get; set; }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterationsResult.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterationsResult.cs
new file mode 100644
index 00000000..d3ed4e09
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterationsResult.cs
@@ -0,0 +1,13 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    /// <summary>
+    /// Result for <see cref="GetIterations"/>.
+    /// </summary>
+    public class GetIterationsResult
+    {
+        /// <summary>
+        /// Found paths.
+        /// </summary>
+        public GetIterationsResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterationsResultItem.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterationsResultItem.cs
new file mode 100644
index 00000000..c89311e0
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetIterationsResultItem.cs
@@ -0,0 +1,23 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    /// <summary>
+    /// Item in <see cref="GetIterationsResult"/>
+    /// </summary>
+    public class GetIterationsResultItem
+    {
+        /// <summary>
+        /// Identity
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Name 
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Path to use in work items
+        /// </summary>
+        public string Path { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjects.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjects.cs
new file mode 100644
index 00000000..eb0b1b65
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjects.cs
@@ -0,0 +1,33 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using Coderr.Server.Api;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    [Message]
+    public class GetProjects : Query<GetProjectsResult>
+    {
+        /// <summary>
+        /// Token used to authenticate.
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///Should have "Read &amp; Write" access for "Work items".
+        /// </para>
+        /// </remarks>
+        public string PersonalAccessToken { get; set; }
+
+        /// <summary>
+        /// Url to azure dev ops (including organization)
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///For Azure (cloud) the url should be <c>https://dev.azure.com/yourOrganizationName</c>
+        /// </para>
+        /// </remarks>
+        public string Url { get; set; }
+
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjectsResult.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjectsResult.cs
new file mode 100644
index 00000000..7d89950c
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjectsResult.cs
@@ -0,0 +1,13 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    /// <summary>
+    /// Result for <see cref="GetProjects"/>
+    /// </summary>
+    public class GetProjectsResult
+    {
+        /// <summary>
+        /// Found paths.
+        /// </summary>
+        public GetProjectsResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjectsResultItem.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjectsResultItem.cs
new file mode 100644
index 00000000..8a921f53
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetProjectsResultItem.cs
@@ -0,0 +1,18 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    /// <summary>
+    /// Item in <see cref="GetProjectsResult"/>
+    /// </summary>
+    public class GetProjectsResultItem
+    {
+        /// <summary>
+        /// Identity
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// Name 
+        /// </summary>
+        public string Name { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetSettingResultItem.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetSettingResultItem.cs
new file mode 100644
index 00000000..8d703b51
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetSettingResultItem.cs
@@ -0,0 +1,8 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    public class GetSettingResultItem
+    {
+        public string Id { get; set; }
+        public string Name { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStates.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStates.cs
new file mode 100644
index 00000000..6e2977eb
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStates.cs
@@ -0,0 +1,40 @@
+﻿using System.Collections.Generic;
+using Coderr.Server.Api;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    [Message]
+    public class GetWorkItemStates : Query<GetWorkItemStatesResult>
+    {
+        /// <summary>
+        /// Token used to authenticate.
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///Should have "Read &amp; Write" access for "Work items".
+        /// </para>
+        /// </remarks>
+        public string PersonalAccessToken { get; set; }
+
+        /// <summary>
+        /// Url to azure dev ops (including organization)
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///For Azure (cloud) the url should be <c>https://dev.azure.com/yourOrganizationName</c>
+        /// </para>
+        /// </remarks>
+        public string Url { get; set; }
+
+        /// <summary>
+        /// Name or id of the project that we should connect to.
+        /// </summary>
+        public string ProjectId { get; set; }
+
+        /// <summary>
+        /// Type of work item that we should create for incidents.
+        /// </summary>
+        public string WorkItemTypeName { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStatesResult.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStatesResult.cs
new file mode 100644
index 00000000..7f50394a
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStatesResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    public class GetWorkItemStatesResult
+    {
+        public GetWorkItemStatesResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStatesResultItem.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStatesResultItem.cs
new file mode 100644
index 00000000..064016fa
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemStatesResultItem.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    public class GetWorkItemStatesResultItem
+    {
+        public string Name { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypes.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypes.cs
new file mode 100644
index 00000000..3525567e
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypes.cs
@@ -0,0 +1,37 @@
+﻿using Coderr.Server.Api;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    /// <summary>
+    /// We need to get the type of work item that should be created for our incidents. Typically "Bug" or "Issue".
+    /// </summary>
+    [Message]
+    public class GetWorkItemTypes : Query<GetWorkItemTypesResult>
+    {
+        /// <summary>
+        /// Token used to authenticate.
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///Should have "Read &amp; Write" access for "Work items".
+        /// </para>
+        /// </remarks>
+        public string PersonalAccessToken { get; set; }
+
+        /// <summary>
+        /// Url to azure dev ops (including organization)
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///For Azure (cloud) the url should be <c>https://dev.azure.com/yourOrganizationName</c>
+        /// </para>
+        /// </remarks>
+        public string Url { get; set; }
+
+        /// <summary>
+        /// Name or id of the project that we should connect to.
+        /// </summary>
+        public string ProjectNameOrId { get; set; }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypesResult.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypesResult.cs
new file mode 100644
index 00000000..e0056787
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypesResult.cs
@@ -0,0 +1,7 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    public class GetWorkItemTypesResult
+    {
+        public GetWorkItemTypesResultItem[] Items { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypesResultItem.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypesResultItem.cs
new file mode 100644
index 00000000..68c07f6f
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps.Api/Connection/Queries/GetWorkItemTypesResultItem.cs
@@ -0,0 +1,8 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.Api.Connection.Queries
+{
+    public class GetWorkItemTypesResultItem
+    {
+        public string ReferenceName { get; set; }
+        public string Name { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Boot.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Boot.cs
new file mode 100644
index 00000000..00ded51e
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Boot.cs
@@ -0,0 +1,30 @@
+﻿using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Common.AzureDevOps.Api.Connection.Queries;
+using Coderr.Server.Common.AzureDevOps.App.Connections.Queries;
+using Coderr.Server.Common.AzureDevOps.App.WorkItems;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Coderr.Server.Plugins.AzureDevOps.App
+{
+    public class Boot : IAppModule
+    {
+        public void Configure(ConfigurationContext context)
+        {
+            var assembly = typeof(GetAreaPathsHandler).Assembly;
+            context.Services.RegisterContainerServices(assembly);
+            context.Services.RegisterMessageHandlers(assembly);
+            context.RegisterMessageTypes(typeof(GetProjects).Assembly);
+        }
+
+        public void Start(StartContext context)
+        {
+            context.ServiceProvider.GetService<IWorkItemServiceRegistrar>().Register<AzureDevOpsWorkItemService>(AzureDevOpsWorkItemService.NAME);
+        }
+
+        public void Stop()
+        {
+            
+        }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/AzureDevOpsClient.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/AzureDevOpsClient.cs
new file mode 100644
index 00000000..8b9f4ada
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/AzureDevOpsClient.cs
@@ -0,0 +1,50 @@
+﻿using System;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
+using Microsoft.VisualStudio.Services.Common;
+using Microsoft.VisualStudio.Services.Profile.Client;
+using Microsoft.VisualStudio.Services.WebApi;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Clients
+{
+    public class AzureDevOpsClient
+    {
+        private readonly string _personalAccessToken;
+        private readonly string _uri;
+
+        /// <summary>
+        ///     Constructor. Manually set values to match your organization.
+        /// </summary>
+        /// <param name="url">$"https://dev.azure.com/{organizationName}"</param>
+        public AzureDevOpsClient(string personalAccessToken, string url)
+        {
+            _personalAccessToken = personalAccessToken ?? throw new ArgumentNullException(nameof(personalAccessToken));
+            _uri = url ?? throw new ArgumentNullException(nameof(url));
+        }
+
+        protected WorkItemTrackingHttpClient CreateWitClient(VssConnection connection = null)
+        {
+            if (connection == null)
+                connection = CreateConnection();
+
+            var workItemTrackingHttpClient = connection.GetClient<WorkItemTrackingHttpClient>();
+            return workItemTrackingHttpClient;
+        }
+
+        public ProfileHttpClient CreateProfileClient()
+        {
+            var connection = CreateConnection();
+
+            var client = connection.GetClient<ProfileHttpClient>();
+            return client;
+        }
+
+        protected VssConnection CreateConnection()
+        {
+            var uri = new Uri(_uri);
+            var credentials = new VssBasicCredential("", _personalAccessToken);
+            var connection = new VssConnection(uri, credentials);
+            return connection;
+        }
+
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/ClassificationNode.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/ClassificationNode.cs
new file mode 100644
index 00000000..2f606e70
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/ClassificationNode.cs
@@ -0,0 +1,12 @@
+﻿using System.Collections.Generic;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Clients
+{
+    public class ClassificationNode
+    {
+        public List<ClassificationNode> Children { get; set; }
+        public int Id { get; set; }
+        public string Name { get; set; }
+        public string Path { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/Fields.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/Fields.cs
new file mode 100644
index 00000000..411fc950
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/Fields.cs
@@ -0,0 +1,64 @@
+﻿namespace Coderr.Server.Common.AzureDevOps.App.Clients
+{
+    //public class StateFields
+    //{
+    //    public const string New = "New";
+    //    public const string Active = "Active";
+    //    public const string Committed = "Committed";
+    //    public const string Done = "Done";
+    //    public const string Removed = "Removed";
+    //    public const string Approved = "Approved";
+    //    public const string Resolved = "Resolved";
+    //    public const string Closed = "Closed";
+    //}
+
+    public static class Fields
+    {
+        public const string Id = "System.Id";
+        public const string AreaPath = "System.AreaPath";
+        public const string TeamProject = "System.TeamProject";
+        public const string IterationPath = "System.IterationPath";
+        public const string WorkItemType = "System.WorkItemType";
+
+        public const string State = "System.State";
+        public const string Reason = "System.Reason";
+        public const string CreatedDate = "System.CreatedDate";
+        public const string CreatedBy = "System.CreatedBy";
+
+        /// <summary>
+        /// Used in some cases for bugs.
+        /// </summary>
+        public const string Description = "System.Description";
+        
+        public const string ChangedDate = "System.ChangedDate";
+        public const string ChangedBy = "System.ChangedBy";
+        public const string Title = "System.Title";
+        public const string StateChangeDate = "Microsoft.VSTS.Common.StateChangeDate";
+        public const string History = "System.History";
+        public const string Tags = "System.Tags";
+        public const string SystemInfo = "Microsoft.VSTS.TCM.SystemInfo";
+        public const string AssignedTo = "System.AssignedTo";
+        public const string ClosedDate = "Microsoft.VSTS.Common.ClosedDate";
+        public const string ClosedBy = "Microsoft.VSTS.Common.ClosedBy";
+        public const string ResolvedDate = "Microsoft.VSTS.Common.ResolvedDate";
+        public const string ResolvedBy = "Microsoft.VSTS.Common.ResolvedBy";
+
+        /// <summary>
+        /// The reason why the b.ug was resolved
+        /// </summary>
+        public const string ResolvedReason = "Microsoft.VSTS.Common.ResolvedReason";
+        public const string ActivatedBy = "Microsoft.VSTS.Common.ActivatedBy";
+        public const string ActivatedDate = "Microsoft.VSTS.Common.ActivatedDate";
+        
+        /// <summary>
+        /// Number, 1=must fix; 4=unimportant.
+        /// </summary>
+        public const string Priority = "Microsoft.VSTS.Common.Priority";
+        public const string ReproduceSteps = "Microsoft.VSTS.TCM.ReproSteps";
+
+        /// <summary>
+        /// "2 - High", "3 - Medium"
+        /// </summary>
+        public const string Severity = "Microsoft.VSTS.Common.Severity";
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/IWorkItemClient.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/IWorkItemClient.cs
new file mode 100644
index 00000000..4a7cdcc6
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/IWorkItemClient.cs
@@ -0,0 +1,32 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Clients
+{
+    public interface IWorkItemClient
+    {
+        /// <summary>
+        ///     Create a bug using the .NET client library
+        /// </summary>
+        /// <returns>Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
+        Task<Comment> AddComment(int workItemId, string comment);
+
+        /// <summary>
+        ///     Create a bug using the .NET client library
+        /// </summary>
+        /// <returns>Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
+        Task<WorkItem> Create(WorkItemDTO workItemDto, string areaPath);
+
+        /// <summary>
+        ///     Create a bug using the .NET client library
+        /// </summary>
+        /// <returns>Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
+        Task<WorkItem> Update(int workItemId, Abstractions.WorkItems.WorkItemMapping workItem);
+
+        Task<WorkItem> Get(int workItemId);
+        Task Assign(int workItemId, string emailAddress);
+        Task Solve(int workItemId, string emailAddress, string solution, string version);
+       
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/PatchDocumentExtensions.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/PatchDocumentExtensions.cs
new file mode 100644
index 00000000..5ffb9ba0
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/PatchDocumentExtensions.cs
@@ -0,0 +1,23 @@
+﻿using Microsoft.VisualStudio.Services.WebApi.Patch;
+using Microsoft.VisualStudio.Services.WebApi.Patch.Json;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Clients
+{
+    public static class PatchDocumentExtensions
+    {
+        public static void Add(this JsonPatchDocument document, string fieldPath, string value)
+        {
+            if (!fieldPath.StartsWith("/fields/"))
+                fieldPath = $"/fields/{fieldPath}";
+
+            document.Add(
+                new JsonPatchOperation()
+                {
+                    Operation = Operation.Add,
+                    Path = fieldPath,
+                    Value = value
+                }
+            );
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/QueryExecutor.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/QueryExecutor.cs
new file mode 100644
index 00000000..231cb327
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/QueryExecutor.cs
@@ -0,0 +1,97 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
+using Microsoft.VisualStudio.Services.Common;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Clients
+{
+    public class QueryExecutor
+    {
+        private readonly Uri uri;
+        private readonly string personalAccessToken;
+
+        /// <summary>
+        ///     Initializes a new instance of the <see cref="QueryExecutor" /> class.
+        /// </summary>
+        /// <param name="orgName">
+        ///     An organization in Azure DevOps Services. If you don't have one, you can create one for free:
+        ///     <see href="https://go.microsoft.com/fwlink/?LinkId=307137" />.
+        /// </param>
+        /// <param name="personalAccessToken">
+        ///     A Personal Access Token, find out how to create one:
+        ///     <see href="https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops" />.
+        /// </param>
+        public QueryExecutor(string orgName, string personalAccessToken)
+        {
+            this.uri = new Uri("https://dev.azure.com/" + orgName);
+            this.personalAccessToken = personalAccessToken;
+        }
+
+        /// <summary>
+        ///     Execute a WIQL (Work Item Query Language) query to return a list of open bugs.
+        /// </summary>
+        /// <param name="project">The name of your project within your organization.</param>
+        /// <returns>A list of <see cref="WorkItem"/> objects representing all the open bugs.</returns>
+        public async Task<IList<WorkItem>> QueryOpenBugs(string project)
+        {
+            var credentials = new VssBasicCredential(string.Empty, this.personalAccessToken);
+
+            // create a wiql object and build our query
+            var wiql = new Wiql()
+            {
+                // NOTE: Even if other columns are specified, only the ID & URL will be available in the WorkItemReference
+                Query = "Select [Id] " +
+                        "From WorkItems " +
+                        "Where [Work Item Type] = 'Bug' " +
+                        "And [System.TeamProject] = '" + project + "' " +
+                        "And [System.State] <> 'Closed' " +
+                        "Order By [State] Asc, [Changed Date] Desc",
+            };
+
+            // create instance of work item tracking http client
+            using (var httpClient = new WorkItemTrackingHttpClient(this.uri, credentials))
+            {
+                // execute the query to get the list of work items in the results
+                var result = await httpClient.QueryByWiqlAsync(wiql).ConfigureAwait(false);
+                var ids = result.WorkItems.Select(item => item.Id).ToArray();
+
+                // some error handling
+                if (ids.Length == 0)
+                {
+                    return Array.Empty<WorkItem>();
+                }
+
+                // build a list of the fields we want to see
+                var fields = new[] { "System.Id", "System.Title", "System.State" };
+
+                // get work items for the ids found in query
+                return await httpClient.GetWorkItemsAsync(ids, fields, result.AsOf).ConfigureAwait(false);
+            }
+        }
+
+        /// <summary>
+        ///     Execute a WIQL (Work Item Query Language) query to print a list of open bugs.
+        /// </summary>
+        /// <param name="project">The name of your project within your organization.</param>
+        /// <returns>An async task.</returns>
+        public async Task PrintOpenBugsAsync(string project)
+        {
+            var workItems = await this.QueryOpenBugs(project).ConfigureAwait(false);
+
+            Console.WriteLine("Query Results: {0} items found", workItems.Count);
+
+            // loop though work items and write to console
+            foreach (var workItem in workItems)
+            {
+                Console.WriteLine(
+                    "{0}\t{1}\t{2}",
+                    workItem.Id,
+                    workItem.Fields["System.Title"],
+                    workItem.Fields["System.State"]);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/SettingsClient.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/SettingsClient.cs
new file mode 100644
index 00000000..024da7ae
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/SettingsClient.cs
@@ -0,0 +1,148 @@
+﻿using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Client;
+using log4net;
+using Microsoft.TeamFoundation.Core.WebApi;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
+using Microsoft.VisualStudio.Services.Common;
+using Microsoft.VisualStudio.Services.Graph.Client;
+using Microsoft.VisualStudio.Services.WebApi;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Clients
+{
+    public class SettingsClient : AzureDevOpsClient
+    {
+        private ILog _logger = LogManager.GetLogger(typeof(SettingsClient));
+        private static bool IsGraphEnabled = true;
+
+        public SettingsClient(string personalAccessToken, string url) : base(personalAccessToken, url)
+        {
+        }
+
+        public async Task<ClassificationNode> GetAreas(string projectName)
+        {
+            var client = CreateWitClient();
+
+
+            var rootArea = await client.GetClassificationNodeAsync(projectName, TreeStructureGroup.Areas, null, 100);
+            return Convert(rootArea);
+        }
+
+        public async Task<ClassificationNode> GetIterationPaths(string projectName)
+        {
+            var client = CreateWitClient();
+
+            var rootArea =
+                await client.GetClassificationNodeAsync(projectName, TreeStructureGroup.Iterations, null, 100);
+            return Convert(rootArea);
+        }
+
+        public async Task<IEnumerable<TeamProjectCollectionReference>> ListCompanies()
+        {
+            var connection = CreateConnection();
+            var client = connection.GetClient<ProjectCollectionHttpClient>();
+            return await client.GetProjectCollections();
+        }
+
+        /// <summary>
+        /// List all projects.
+        /// </summary>
+        /// <returns></returns>
+        public async Task<IPagedList<TeamProjectReference>> ListProjects()
+        {
+            var connection = CreateConnection();
+            var client = connection.GetClient<ProjectHttpClient>();
+            return await client.GetProjects(ProjectState.All);
+        }
+
+        public async Task<IReadOnlyList<string>> GetTypeFields(string projectId, string workItemTypeName)
+        {
+            var connection = CreateConnection();
+
+            var id = Guid.Parse(projectId);
+            //var props = await projectClient.GetProjectPropertiesAsync(id, new[] {"System.Process Template"});
+            //var templateType = props[0].Value.ToString();
+            var witClient = CreateWitClient(connection);
+            var fields = await witClient.GetWorkItemTypeStatesAsync(id, workItemTypeName, WorkItemTypeFieldsExpandLevel.AllowedValues);
+            return fields.Select(x => x.Name).ToList();
+        }
+
+        public async Task<IDictionary<string, string>> GetWorkItemTypes(string projectId)
+        {
+            var connection = CreateConnection();
+
+            var id = Guid.Parse(projectId);
+            //var props = await projectClient.GetProjectPropertiesAsync(id, new[] {"System.Process Template"});
+            //var templateType = props[0].Value.ToString();
+            var witClient = CreateWitClient(connection);
+            var types = await witClient.GetWorkItemTypesAsync(id);
+            return types.ToDictionary(x => x.ReferenceName, x => x.Name);
+        }
+
+        //public async Task<string> GetEmailFrom(string descriptor)
+        //{
+        //    //GET https://vssps.dev.azure.com/{organization}/_apis/graph/users?
+        //    var connection = CreateConnection();
+        //    var client = connection.GetClient<GraphHttpClient>();
+        //    var user = await client.GetUserAsync(descriptor);
+        //    //user.MailAddress
+
+        //    var clietn2 = connection.GetClient<UserHttpClient>();
+        //    clietn2.GetUserAsync("").Result.Mail
+        //    clietn2.ReadIdentityAsync(Guid.Empty).Result.Properties
+        //    var user2 = await clietn2.GetDescriptorByIdAsync(Guid.Empty);
+        //    user2.
+        //}
+
+
+        private ClassificationNode Convert(WorkItemClassificationNode dtoArea)
+        {
+            var area = new ClassificationNode
+            {
+                Id = dtoArea.Id,
+                Name = dtoArea.Name,
+
+                // I don't know why MS adds "\Area" to the path, but Azure DevOps
+                // refuses to create new work items with that in the name.
+                Path = dtoArea.Path.Replace("\\Area", ""),
+
+                Children = new List<ClassificationNode>()
+            };
+
+            if (dtoArea.HasChildren != true)
+                return area;
+
+            foreach (var child in dtoArea.Children)
+            {
+                var c = Convert(child);
+                area.Children.Add(c);
+            }
+
+            return area;
+        }
+
+        public async Task<string> GetEmailAddress(SubjectDescriptor descriptor)
+        {
+            if (!IsGraphEnabled)
+                return null;
+
+            // This works in Azure Cloud, but not premise
+            try
+            {
+                var connection = CreateConnection();
+                var client = connection.GetClient<GraphHttpClient>();
+                var user = await client.GetUserAsync(descriptor.ToString());
+                return user?.MailAddress;
+            }
+            catch (VssResourceNotFoundException ex)
+            {
+                IsGraphEnabled = false;
+                Err.Report(ex, new {userDescriptor = descriptor.ToString()});
+                _logger.Error($"Graph API is not supported, cannot lookup {descriptor} [{ex.Message}]");
+                return null;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/WorkItemClient.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/WorkItemClient.cs
new file mode 100644
index 00000000..50c61d86
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Clients/WorkItemClient.cs
@@ -0,0 +1,169 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Common.AzureDevOps.App.Connections;
+using Microsoft.TeamFoundation.Core.WebApi;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
+using Microsoft.VisualStudio.Services.Common;
+using Microsoft.VisualStudio.Services.WebApi;
+using Microsoft.VisualStudio.Services.WebApi.Patch.Json;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Clients
+{
+    public class WorkItemClient : AzureDevOpsClient, IWorkItemClient
+    {
+        private readonly Settings _settings;
+
+        public WorkItemClient(Settings settings) : base(settings.PersonalAccessToken, settings.Url)
+        {
+            _settings = settings;
+        }
+
+        /// <summary>
+        ///     Create a bug using the .NET client library
+        /// </summary>
+        /// <returns>Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
+        public async Task<Comment> AddComment(int workItemId, string comment)
+        {
+            var client = CreateWitClient();
+            var k = new CommentCreate {Text = comment};
+            var result = await client.AddCommentAsync(k, _settings.ProjectName, workItemId);
+            return result;
+        }
+
+        /// <summary>
+        ///     Create a bug using the .NET client library
+        /// </summary>
+        /// <returns>Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
+        public async Task<WorkItem> Create(WorkItemDTO workItemDto, string areaPath)
+        {
+            var tags = workItemDto.Tags.Where(x => x != "important" && x != "critical").ToList();
+            tags.Add("coderr");
+            var patchDocument = new JsonPatchDocument
+            {
+                {Fields.Title, workItemDto.Title},
+                {Fields.ReproduceSteps, workItemDto.ReproduceSteps.Replace("\r\n", "  <br>\r\n")},
+                {Fields.SystemInfo, workItemDto.SystemInformation.Replace("\r\n", "  <br>\r\n")},
+                {
+                    // This field is used when repro/systeminfo is not visible (different process templates).
+                    Fields.Description, workItemDto.ReproduceSteps.Replace("\r\n", "  <br>\r\n")
+                                        + "  <br>\r\n  <br>\r\n# System information  <br>\r\n" +
+                                        workItemDto.SystemInformation.Replace("\r\n", "  <br>\r\n")
+                },
+                //{Fields.Priority, "1"},
+                //{Fields.Severity, "1 - Medium"},
+                {Fields.AreaPath, areaPath},
+                {Fields.Tags, string.Join(";", tags)}
+            };
+
+
+            var client = CreateWitClient();
+            var result =
+                await client.CreateWorkItemAsync(patchDocument, _settings.ProjectName, _settings.WorkItemTypeName);
+            return result;
+        }
+
+        /// <summary>
+        ///     Update a work item.
+        /// </summary>
+        /// <returns>Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
+        public async Task<WorkItem> Update(int workItemId, WorkItemMapping workItem)
+        {
+            var patchDocument = new JsonPatchDocument
+            {
+                {Fields.Title, "MyBug"},
+                {
+                    Fields.ReproduceSteps,
+                    "Our authorization logic needs to allow for users with Microsoft accounts (formerly Live Ids) - http:// msdn.microsoft.com/library/live/hh826547.aspx"
+                },
+                //{Fields.Priority, "1"},
+                //{Fields.Severity, "2 - High"},
+                {Fields.History, "Added by Coderr (https://coderr.io)"},
+                {Fields.Tags, "coderr;backend"}
+            };
+
+            var client = CreateWitClient();
+
+            var result =
+                await client.CreateWorkItemAsync(patchDocument, _settings.ProjectName, _settings.WorkItemTypeName);
+            return result;
+        }
+
+        /// <summary>
+        ///     Get a work item
+        /// </summary>
+        /// <returns>Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>
+        public async Task<WorkItem> Get(int workItemId)
+        {
+            //var fields = new[]
+            //{
+            //    Fields.Id, Fields.State, Fields.StateChangeDate, Fields.ClosedBy, Fields.ClosedDate,
+            //    Fields.ResolvedBy, Fields.ResolvedReason, Fields.ResolvedDate, Fields.AssignedTo,
+            //    Fields.StateChangeDate, Fields.ActivatedBy, Fields.ActivatedDate
+            //};
+
+            try
+            {
+                var client = CreateWitClient();
+                var result = await client.GetWorkItemAsync(workItemId);
+                return result;
+            }
+            catch (VssServiceException ex)
+            {
+                // do not exist.
+                if (ex.Message.Contains("TF401232"))
+                    return null;
+                throw;
+            }
+        }
+
+        public async Task Assign(int workItemId, string emailAddress)
+        {
+            var patchDocument = new JsonPatchDocument
+            {
+                {Fields.AssignedTo, emailAddress}, {Fields.State, _settings.AssignedStateName}
+            };
+
+            var client = CreateWitClient();
+            await client.UpdateWorkItemAsync(patchDocument, workItemId);
+        }
+
+        public async Task Solve(int workItemId, string emailAddress, string solution, string version)
+        {
+            var patchDocument = new JsonPatchDocument
+            {
+                {Fields.ClosedBy, emailAddress},
+                {Fields.State, _settings.SolvedStateName ?? _settings.ClosedStateName}
+            };
+
+            var client = CreateWitClient();
+            await client.UpdateWorkItemAsync(patchDocument, workItemId);
+
+            var comment = "";
+            if (!string.IsNullOrEmpty(solution))
+                comment = "Solution: " + solution + "\r\n";
+            if (!string.IsNullOrEmpty(version))
+                comment = "Corrected in: " + version + "\r\n";
+
+            if (comment != "")
+                await client.AddCommentAsync(new CommentCreate {Text = comment}, _settings.ProjectName, workItemId);
+        }
+
+        public async Task<IReadOnlyList<IdentityRef>> GetMembers()
+        {
+            var con = CreateConnection();
+            var client = con.GetClient<TeamHttpClient>();
+            var teams = await client.GetTeamsAsync(_settings.ProjectId);
+            var allMembers = new Dictionary<string, IdentityRef>();
+            foreach (var team in teams)
+            {
+                var members =
+                    await client.GetTeamMembersWithExtendedPropertiesAsync(_settings.ProjectId, team.Id.ToString());
+                foreach (var member in members) allMembers[member.Identity.Id] = member.Identity;
+            }
+
+            return allMembers.Values.ToList();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Coderr.Server.Plugins.AzureDevOps.App.csproj b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Coderr.Server.Plugins.AzureDevOps.App.csproj
new file mode 100644
index 00000000..43e46f3e
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Coderr.Server.Plugins.AzureDevOps.App.csproj
@@ -0,0 +1,21 @@
+﻿<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\App\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
+    <ProjectReference Include="..\..\Common\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" />
+    <ProjectReference Include="..\Coderr.Server.Plugins.AzureDevOps.Api\Coderr.Server.Plugins.AzureDevOps.Api.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Coderr.Client" Version="2.0.3" />
+    <PackageReference Include="Griffin.Framework" Version="2.1.1" />
+    <PackageReference Include="log4net" Version="2.0.14" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.22" />
+    <PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="16.153.0" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Commands/SaveAzureSettingsHandler.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Commands/SaveAzureSettingsHandler.cs
new file mode 100644
index 00000000..04e55b6f
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Commands/SaveAzureSettingsHandler.cs
@@ -0,0 +1,45 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Security;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Common.AzureDevOps.Api.Connection.Commands;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections.Commands
+{
+    class SaveAzureSettingsHandler: IMessageHandler<SaveAzureSettings>
+    {
+        private ISettingsRepository _settingsRepository;
+        private IWorkItemServiceProvider _workItemServiceProvider;
+
+        public SaveAzureSettingsHandler(ISettingsRepository settingsRepository, IWorkItemServiceProvider workItemServiceProvider)
+        {
+            _settingsRepository = settingsRepository;
+            _workItemServiceProvider = workItemServiceProvider;
+        }
+
+        public async Task HandleAsync(IMessageContext context, SaveAzureSettings message)
+        {
+            var dbEntity = new Settings
+            {
+                CreatedById = context.Principal.GetAccountId(),
+                ApplicationId = message.ApplicationId,
+                AreaPath = message.AreaPath,
+                AreaPathId = message.AreaPathId,
+                PersonalAccessToken = message.PersonalAccessToken,
+                ProjectId = message.ProjectId,
+                ProjectName = message.ProjectName,
+                Url = message.Url,
+                AutoAddCritical = message.AutoAddCritical,
+                AutoAddImportant = message.AutoAddImportant,
+                AssignedStateName = message.AssignedStateName,
+                ClosedStateName = message.ClosedStateName,
+                SolvedStateName = message.SolvedStateName,
+                //StateFieldName = message.StateFieldName,
+                WorkItemTypeName = message.WorkItemTypeName
+            };
+
+            await _settingsRepository.Save(dbEntity);
+            await _workItemServiceProvider.MapApplication(message.ApplicationId, "AzureDevOps");
+        }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/ISettingsRepository.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/ISettingsRepository.cs
new file mode 100644
index 00000000..a63f60f9
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/ISettingsRepository.cs
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections
+{
+    public interface ISettingsRepository
+    {
+        Task<Settings> Get(int applicationId);
+        Task<List<Settings>> GetAll();
+        Task Save(Settings settings);
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Jobs/AddEscalatedErrorsToBacklog.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Jobs/AddEscalatedErrorsToBacklog.cs
new file mode 100644
index 00000000..34706f7f
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Jobs/AddEscalatedErrorsToBacklog.cs
@@ -0,0 +1,33 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Api.Escalation.Events;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections.Jobs
+{
+    internal class AddEscalatedErrorsToBacklog : IMessageHandler<IncidentEscalated>
+    {
+        private readonly ISettingsRepository _settingsRepository;
+        private readonly IWorkItemServiceProvider _workItemServiceProvider;
+
+        public AddEscalatedErrorsToBacklog(IWorkItemServiceProvider workItemServiceProvider, ISettingsRepository settingsRepository)
+        {
+            _workItemServiceProvider = workItemServiceProvider;
+            _settingsRepository = settingsRepository;
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentEscalated message)
+        {
+            var settings = await _settingsRepository.Get(message.ApplicationId);
+            if (settings?.AutoAddCritical == true && message.IsCritical)
+                await AddIncident(message.IncidentId, message.ApplicationId);
+            if (settings?.AutoAddImportant == true && message.IsImportant)
+                await AddIncident(message.IncidentId, message.ApplicationId);
+        }
+
+        private async Task AddIncident(int incidentId, int applicationId)
+        {
+            await _workItemServiceProvider.CreateAsync(applicationId, incidentId);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetAreaPathsHandler.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetAreaPathsHandler.cs
new file mode 100644
index 00000000..2b537eee
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetAreaPathsHandler.cs
@@ -0,0 +1,29 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Common.AzureDevOps.Api.Connection.Queries;
+using Coderr.Server.Common.AzureDevOps.App.Clients;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections.Queries
+{
+    internal class GetAreaPathsHandler : IQueryHandler<GetAreaPaths, GetAreaPathsResult>
+    {
+        public async Task<GetAreaPathsResult> HandleAsync(IMessageContext context, GetAreaPaths query)
+        {
+            var client = new SettingsClient(query.PersonalAccessToken, query.Url);
+            var rootArea = await client.GetAreas(query.ProjectNameOrId);
+
+            var items = new List<GetAreaPathsResultItem>();
+            ConvertItem(rootArea, items);
+            return new GetAreaPathsResult { Items = items.OrderBy(x => x.Path).ToArray() };
+        }
+
+        private void ConvertItem(ClassificationNode area, List<GetAreaPathsResultItem> items)
+        {
+            items.Add(new GetAreaPathsResultItem { Id = area.Id, Name = area.Name, Path = area.Path });
+
+            foreach (var node in area.Children) ConvertItem(node, items);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetAzureSettingsHandler.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetAzureSettingsHandler.cs
new file mode 100644
index 00000000..877c13f4
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetAzureSettingsHandler.cs
@@ -0,0 +1,41 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Common.AzureDevOps.Api.Connection.Queries;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections.Queries
+{
+    internal class GetAzureSettingsHandler : IQueryHandler<GetAzureSettings, GetAzureSettingsResult>
+    {
+        private readonly ISettingsRepository _repository;
+
+        public GetAzureSettingsHandler(ISettingsRepository repository)
+        {
+            _repository = repository;
+        }
+
+        public async Task<GetAzureSettingsResult> HandleAsync(IMessageContext context, GetAzureSettings query)
+        {
+            var entity = await _repository.Get(query.ApplicationId);
+            if (entity == null)
+                return null;
+
+            return new GetAzureSettingsResult
+            {
+                ApplicationId = entity.ApplicationId,
+                AreaPath = entity.AreaPath,
+                AreaPathId = entity.AreaPathId,
+                PersonalAccessToken = entity.PersonalAccessToken,
+                ProjectId = entity.ProjectId,
+                ProjectName = entity.ProjectName,
+                Url = entity.Url,
+                AutoAddCritical = entity.AutoAddCritical,
+                AutoAddImportant = entity.AutoAddImportant,
+                AssignedStateName = entity.AssignedStateName,
+                ClosedStateName = entity.ClosedStateName,
+                SolvedStateName = entity.SolvedStateName,
+                //StateFieldName = entity.StateFieldName,
+                WorkItemTypeName = entity.WorkItemTypeName
+            };
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetIterationsHandler.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetIterationsHandler.cs
new file mode 100644
index 00000000..aafba00e
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetIterationsHandler.cs
@@ -0,0 +1,30 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using Coderr.Server.Common.AzureDevOps.Api.Connection.Queries;
+using Coderr.Server.Common.AzureDevOps.App.Clients;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections.Queries
+{
+    class GetIterationsHandler : IQueryHandler<GetIterations, GetIterationsResult>
+    {
+        public async Task<GetIterationsResult> HandleAsync(IMessageContext context, GetIterations query)
+        {
+            var client = new SettingsClient(query.PersonalAccessToken, query.Url);
+            var rootArea = await client.GetIterationPaths(query.ProjectNameOrId);
+
+            var items = new List<GetIterationsResultItem>();
+            ConvertItem(rootArea, items);
+            return new GetIterationsResult { Items = items.ToArray() };
+        }
+
+        private void ConvertItem(ClassificationNode area, ICollection<GetIterationsResultItem> items)
+        {
+            items.Add(new GetIterationsResultItem { Id = area.Id, Name = area.Name, Path = area.Path });
+
+            foreach (var node in area.Children) ConvertItem(node, items);
+        }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetProjectsHandler.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetProjectsHandler.cs
new file mode 100644
index 00000000..bb354f88
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetProjectsHandler.cs
@@ -0,0 +1,44 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Common.AzureDevOps.Api.Connection.Queries;
+using Coderr.Server.Common.AzureDevOps.App.Clients;
+using DotNetCqs;
+using Microsoft.TeamFoundation.Core.WebApi;
+using log4net;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections.Queries
+{
+    internal class GetProjectsHandler : IQueryHandler<GetProjects, GetProjectsResult>
+    {
+        private readonly ILog _logger = LogManager.GetLogger(typeof(GetProjectsHandler));
+
+        public async Task<GetProjectsResult> HandleAsync(IMessageContext context, GetProjects query)
+        {
+            var client = new SettingsClient(query.PersonalAccessToken, query.Url);
+            try
+            {
+                var projects = await client.ListProjects();
+                var items = new List<GetProjectsResultItem>();
+                foreach (var project in projects)
+                {
+                    if (project.State != ProjectState.New
+                        && project.State != ProjectState.Unchanged
+                        && project.State != ProjectState.WellFormed)
+                        continue;
+
+                    var item = new GetProjectsResultItem { Id = project.Id.ToString(), Name = project.Name };
+                    items.Add(item);
+                }
+    
+                return new GetProjectsResult { Items = items.OrderBy(x => x.Name).ToArray() };
+            }
+            catch (Exception ex)
+            {
+                _logger.Error("Failed to load projects", ex);
+                return new GetProjectsResult { Items = new GetProjectsResultItem[0] };
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetWorkItemStatesHandler.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetWorkItemStatesHandler.cs
new file mode 100644
index 00000000..0ead1fd9
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetWorkItemStatesHandler.cs
@@ -0,0 +1,27 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Common.AzureDevOps.Api.Connection.Queries;
+using Coderr.Server.Common.AzureDevOps.App.Clients;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections.Queries
+{
+    class GetWorkItemStatesHandler : IQueryHandler<GetWorkItemStates, GetWorkItemStatesResult>
+    {
+        public async Task<GetWorkItemStatesResult> HandleAsync(IMessageContext context, GetWorkItemStates query)
+        {
+            var client = new SettingsClient(query.PersonalAccessToken, query.Url);
+            var types = await client.GetTypeFields(query.ProjectId, query.WorkItemTypeName);
+
+            var items = new List<GetWorkItemTypesResultItem>();
+            return new GetWorkItemStatesResult
+            {
+                Items = types
+                    .OrderBy(x => x)
+                    .Select(x => new GetWorkItemStatesResultItem { Name = x })
+                    .ToArray()
+            };
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetWorkItemTypesHandler.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetWorkItemTypesHandler.cs
new file mode 100644
index 00000000..bc149ca4
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Queries/GetWorkItemTypesHandler.cs
@@ -0,0 +1,27 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Coderr.Server.Common.AzureDevOps.Api.Connection.Queries;
+using Coderr.Server.Common.AzureDevOps.App.Clients;
+using DotNetCqs;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections.Queries
+{
+    class GetWorkItemTypesHandler : IQueryHandler<GetWorkItemTypes, GetWorkItemTypesResult>
+    {
+        public async Task<GetWorkItemTypesResult> HandleAsync(IMessageContext context, GetWorkItemTypes query)
+        {
+            var client = new SettingsClient(query.PersonalAccessToken, query.Url);
+            var result = await client.GetWorkItemTypes(query.ProjectNameOrId);
+            return new GetWorkItemTypesResult
+            {
+                Items = result
+                    .OrderBy(x => x.Value)
+                    .Select(x => new GetWorkItemTypesResultItem { ReferenceName = x.Key, Name = x.Value })
+                    .ToArray()
+            };
+        }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Settings.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Settings.cs
new file mode 100644
index 00000000..c7b3c0e1
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/Connections/Settings.cs
@@ -0,0 +1,57 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Coderr.Server.Common.AzureDevOps.App.Connections
+{
+    public class Settings
+    {
+        public int ApplicationId { get; set; }
+
+        /// <summary>
+        /// Account id
+        /// </summary>
+        /// <remarks>
+        ///<para>
+        ///Used when synchronizing work items when we cant match the integrated systems user with our user (and the item have changed state)
+        /// </para>
+        /// </remarks>
+        public int CreatedById { get; set; }
+        public string Url { get; set; }
+        public string ProjectName { get; set; }
+        public string ProjectId { get; set; }
+        public string AreaPath { get; set; }
+        public string AreaPathId { get; set; }
+        public string PersonalAccessToken { get; set; }
+
+        /// <summary>
+        /// Type of work item that we are integrating against in the project.
+        /// </summary>
+        public string WorkItemTypeName { get; set; }
+        
+        /// <summary>
+        /// Started working on the item
+        /// </summary>
+        public string AssignedStateName { get; set; }
+
+        /// <summary>
+        /// Name of the state that is used when the item is closed.
+        /// </summary>
+        public string SolvedStateName { get; set; }
+
+        /// <summary>
+        /// Closed can also mean that it wont be fixed.
+        /// </summary>
+        public string ClosedStateName { get; set; }
+
+        /// <summary>
+        /// Add errors escalated to critical into the backlog.
+        /// </summary>
+        public bool AutoAddCritical { get; set; }
+        /// <summary>
+        /// Add errors escalated to important into the backlog.
+        /// </summary>
+        public bool AutoAddImportant { get; set; }
+
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/AzureDevOpsWorkItemService.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/AzureDevOpsWorkItemService.cs
new file mode 100644
index 00000000..2f31741e
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/AzureDevOpsWorkItemService.cs
@@ -0,0 +1,122 @@
+﻿using System;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Common.AzureDevOps.App.Clients;
+using Coderr.Server.Common.AzureDevOps.App.Connections;
+using Coderr.Server.Domain;
+using log4net;
+
+namespace Coderr.Server.Common.AzureDevOps.App.WorkItems
+{
+    //[ContainerService(RegisterAsSelf = true)]
+    // Registered by Common/Boot.
+    class AzureDevOpsWorkItemService : IWorkItemService
+    {
+        private readonly ISettingsRepository _configurationRepository;
+        private readonly IWorkItemClient _workItemClient;
+        public static string NAME = "AzureDevOps";
+        private readonly ILog _logger = LogManager.GetLogger(typeof(AzureDevOpsWorkItemService));
+        private readonly IUserMappingRepository _userMappingRepository;
+
+        // For runtime
+        public AzureDevOpsWorkItemService(ISettingsRepository configurationRepository, IUserMappingRepository userMappingRepository)
+        {
+            _configurationRepository = configurationRepository;
+            _userMappingRepository = userMappingRepository;
+        }
+
+        // For tests
+        public AzureDevOpsWorkItemService(ISettingsRepository configurationRepository, IWorkItemClient workItemClient, IUserMappingRepository userMappingRepository)
+        {
+            _configurationRepository = configurationRepository;
+            _workItemClient = workItemClient;
+            _userMappingRepository = userMappingRepository;
+        }
+
+        public string Name { get; } = NAME;
+        public string Title { get; } = "Azure DevOps";
+
+        public async Task Create(WorkItemDTO workItem)
+        {
+            var settings = await _configurationRepository.Get(workItem.ApplicationId);
+
+            _logger.Debug("Creating work item type " + settings.WorkItemTypeName);
+            var client = _workItemClient ?? new WorkItemClient(settings);
+            var dto = await client.Create(workItem, settings.AreaPath);
+            workItem.WorkItemId = dto.Id.Value.ToString();
+
+            // api: https://dev.azure.com/1tcompany/75570083-b1ef-4e78-88e2-5db4982f756c/_apis/wit/workItems/310
+            // api: https://dev.azure.com/fabrikam/Phone%20Saver/_workitems/edit/390
+            // ui: https://(organizationname).visualstudio.com/(project)/_workitems/edit/(id)/
+            // ui: https://OrganizationName.visualstudio.com/DefaultCollection/ProjectName/_workitems/edit/WorkItemNumber
+            // ui: https://fabrikam/DefaultCollection/Phone%20Saver/_workitems/edit/390
+            // ui: https://1tcompany.visualstudio.com/codeRR%20OSS%20Builds/_workitems/edit/311/
+
+            //TODO: Premise support
+
+            var apiPos = dto.Url.IndexOf("_apis/", 0, StringComparison.OrdinalIgnoreCase);
+            var basePath = dto.Url.Substring(0, apiPos)+1;
+            var uiUrl = $"{basePath}/_workitems/edit/{workItem.WorkItemId}/";
+
+            workItem.ApiUrl = dto.Url;
+            workItem.UiUrl = uiUrl;
+            workItem.IntegrationName = NAME;
+        }
+
+
+        public async Task Assign(int applicationId, string workItemId, int accountId)
+        {
+            var settings = await _configurationRepository.Get(applicationId);
+            var client = _workItemClient ?? new WorkItemClient(settings);
+
+            var userMapping = await _userMappingRepository.Get(accountId);
+            if (userMapping == null)
+            {
+                _logger.Error($"Failed to find account {accountId} which is linked to work item {workItemId}.");
+                return;
+            }
+
+            var workItemIdValue = int.Parse(workItemId);
+            var item = await client.Get(workItemIdValue);
+            if (item == null)
+            {
+                throw new EntityNotFoundException("Failed to find Azure DevOps work item  " + workItemId);
+            }
+
+            var field = (string)item.Fields[Fields.State];
+            if (field == settings.AssignedStateName)
+                return;
+
+            var name = userMapping.AdditionalData["UniqueName"];
+            await client.Assign(workItemIdValue, name);
+        }
+
+        public async Task Solve(int applicationId, string workItemId, int accountId, string solution, string version)
+        {
+            var settings = await _configurationRepository.Get(applicationId);
+            var client = _workItemClient ?? new WorkItemClient(settings);
+            var userMapping = await _userMappingRepository.Get(accountId);
+            if (userMapping == null)
+            {
+                _logger.Error($"Failed to find account {accountId} which is linked to work item {workItemId}.");
+                return;
+            }
+
+            var workItemIdValue = int.Parse(workItemId);
+            var item = await client.Get(workItemIdValue);
+            if (item == null)
+            {
+                throw new EntityNotFoundException("Failed to find Azure DevOps work item  " + workItemId);
+            }
+
+            var field = (string)item.Fields[Fields.State];
+            if (field == settings.SolvedStateName && field == settings.ClosedStateName)
+            {
+                return;
+            }
+
+            var name = userMapping.AdditionalData["UniqueName"];
+            await client.Solve(int.Parse(workItemId), name, solution, version);
+        }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/Jobs/MapUsersJob.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/Jobs/MapUsersJob.cs
new file mode 100644
index 00000000..107489ad
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/Jobs/MapUsersJob.cs
@@ -0,0 +1,101 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.Directory;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Common.AzureDevOps.App.Clients;
+using Coderr.Server.Domain.Core.User;
+using Griffin.ApplicationServices;
+using log4net;
+using ISettingsRepository = Coderr.Server.Common.AzureDevOps.App.Connections.ISettingsRepository;
+
+namespace Coderr.Server.Common.AzureDevOps.App.WorkItems.Jobs
+{
+    /// <summary>
+    /// Map active directory users
+    /// </summary>
+    [ContainerService(RegisterAsSelf = true)]
+    class MapUsersJob : IBackgroundJobAsync
+    {
+        private readonly ILog _logger = LogManager.GetLogger(typeof(SynchronizeWorkItemsJob));
+        private readonly ISettingsRepository _settingsRepository;
+        private readonly IUserRepository _userRepository;
+        private readonly IDirectoryService _directoryService;
+        private readonly IUserMappingRepository _userMappingRepository;
+        private static List<string> _missingEmail = new List<string>();
+        private static List<string> _missingAccount = new List<string>();
+
+        public MapUsersJob(IUserMappingRepository userMappingRepository, ISettingsRepository settingsRepository, IUserRepository userRepository, IDirectoryService directoryService)
+        {
+            _userMappingRepository = userMappingRepository;
+            _settingsRepository = settingsRepository;
+            _userRepository = userRepository;
+            _directoryService = directoryService;
+        }
+
+        public async Task ExecuteAsync()
+        {
+            // Complain every new day
+            if (DateTime.UtcNow.Hour == 0 && DateTime.UtcNow.Minute < 10)
+            {
+                _missingAccount.Clear();
+                _missingEmail.Clear();
+            }
+
+            //TODO: Merge list from all applications and then lookup.
+            var settings = await _settingsRepository.GetAll();
+            foreach (var setting in settings)
+            {
+                var settingsClient = new SettingsClient(setting.PersonalAccessToken, setting.Url);
+                var client = new WorkItemClient(setting);
+                var members = await client.GetMembers();
+                foreach (var member in members)
+                {
+                    var mapping = await _userMappingRepository.GetByExternalId(member.Id);
+                    if (mapping != null)
+                    {
+                        continue;
+                    }
+
+                    var email = await settingsClient.GetEmailAddress(member.Descriptor) ??
+                                _directoryService.FindEmail(member.UniqueName);
+                    if (email == null)
+                    {
+                        if (!_missingEmail.Contains(member.UniqueName))
+                        {
+                            _logger.Debug("Could not find email for " + member.Descriptor + "/" + member.UniqueName);
+                            _missingEmail.Add(member.UniqueName);
+                        }
+                        
+                        continue;
+                    }
+
+                    var account = await _userRepository.FindByEmailAsync(email);
+                    if (account == null)
+                    {
+                        if (!_missingAccount.Contains(email))
+                        {
+                            _logger.Warn("Email is not registered: " + email + " for any user.");
+                            _missingAccount.Add(email);
+                        }
+                        
+                        continue;
+                    }
+
+                    var map = new WorkItemUserMapping
+                    {
+                        AccountId = account.AccountId,
+                        ExternalId = member.Id,
+                        AdditionalData = new Dictionary<string, string>()
+                        {
+                            {"UniqueName", member.UniqueName}, {"Descriptor", member.Descriptor}
+                        }
+                    };
+                    await _userMappingRepository.Create(map);
+                }
+            }
+            
+        }
+    }
+}
diff --git a/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/Jobs/SynchronizeWorkItemsJob.cs b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/Jobs/SynchronizeWorkItemsJob.cs
new file mode 100644
index 00000000..828575d0
--- /dev/null
+++ b/src/Server/Plugins/Coderr.Server.Plugins.AzureDevOps/WorkItems/Jobs/SynchronizeWorkItemsJob.cs
@@ -0,0 +1,160 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Abstractions.WorkItems;
+using Coderr.Server.Api.Core.Incidents.Commands;
+using Coderr.Server.Common.AzureDevOps.App.Clients;
+using Coderr.Server.Common.AzureDevOps.App.Connections;
+using Coderr.Server.Domain.Core.Incidents;
+using DotNetCqs;
+using Griffin.ApplicationServices;
+using log4net;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
+using Microsoft.VisualStudio.Services.WebApi;
+using ISettingsRepository = Coderr.Server.Common.AzureDevOps.App.Connections.ISettingsRepository;
+
+namespace Coderr.Server.Common.AzureDevOps.App.WorkItems.Jobs
+{
+    [ContainerService(RegisterAsSelf = true)]
+    internal class SynchronizeWorkItemsJob : IBackgroundJobAsync
+    {
+        private readonly IIncidentRepository _incidentRepository;
+        private readonly ILog _logger = LogManager.GetLogger(typeof(SynchronizeWorkItemsJob));
+        private readonly IMessageBus _messageBus;
+        private readonly Dictionary<int, Settings> _settingsCache = new Dictionary<int, Settings>();
+        private readonly ISettingsRepository _settingsRepository;
+        private readonly IWorkItemRepository _workItemRepository;
+        private readonly IUserMappingRepository _userMappingRepository;
+
+        public SynchronizeWorkItemsJob(
+            IWorkItemRepository workItemRepository,
+            ISettingsRepository settingsRepository,
+            IIncidentRepository incidentRepository,
+            IMessageBus messageBus,
+            IUserMappingRepository userMappingRepository)
+        {
+            _workItemRepository = workItemRepository;
+            _settingsRepository = settingsRepository;
+            _incidentRepository = incidentRepository;
+            _messageBus = messageBus;
+            _userMappingRepository = userMappingRepository;
+        }
+
+        public async Task ExecuteAsync()
+        {
+            await _workItemRepository.DeleteAbandonedWorkItems();
+            var items = await _workItemRepository.FindAllWorkItems(AzureDevOpsWorkItemService.NAME);
+            foreach (var item in items)
+            {
+                var timeSinceLastSynchronization = DateTime.UtcNow.Subtract(item.LastSynchronizationAtUtc);
+                if (timeSinceLastSynchronization.TotalMinutes < 1) continue;
+                var incident = await _incidentRepository.GetAsync(item.IncidentId);
+                if (incident.State == IncidentState.Closed || incident.State == IncidentState.Ignored) continue;
+
+                var settings = await GetSettings(item.ApplicationId);
+
+                var workItemClient =
+                    new WorkItemClient(settings);
+                var workItem = await workItemClient.Get(int.Parse(item.WorkItemId));
+                if (workItem == null)
+                {
+                    _logger.Warn(
+                        $"Failed to find linked work item for incident {incident.Id}, deleting link for work item {item.WorkItemId}.");
+                    await _workItemRepository.Delete(item);
+                    continue;
+                }
+
+                var workItemState = workItem.Fields[Fields.State].ToString();
+
+                //if (workItemState == settings.AssignedStateName && incident.State == IncidentState.Active)
+                //{
+                //    continue;
+                //}
+                if (workItemState == settings.ClosedStateName && incident.State == IncidentState.Closed) continue;
+                if (workItemState == settings.SolvedStateName && incident.State == IncidentState.Closed) continue;
+
+                // Don't care about external state for assigned. If it's for a person, then change it.
+                if (incident.State == IncidentState.New || incident.State == IncidentState.Active)
+                    await AssignIncident(workItem, incident, settings);
+
+                if (workItemState == settings.SolvedStateName || workItemState == settings.ClosedStateName)
+                    await CloseIncident(workItem, item, incident);
+            }
+        }
+
+        private async Task<Settings> GetSettings(int applicationId)
+        {
+            if (!_settingsCache.TryGetValue(applicationId, out var settings))
+            {
+                settings = await _settingsRepository.Get(applicationId);
+                _settingsCache[applicationId] = settings;
+            }
+
+            return settings;
+        }
+
+        private async Task AssignIncident(WorkItem workItem, Incident incident, Settings settings)
+        {
+            var assignedToId = await FindAccountId(workItem, Fields.AssignedTo, Fields.CreatedBy, Fields.ChangedBy,
+                Fields.ClosedBy);
+            if (assignedToId == null)
+                return;
+
+
+            if (incident.AssignedToId != assignedToId)
+            {
+                var cmd = new AssignIncident(incident.Id, assignedToId.Value, settings.CreatedById);
+                _logger.Info($"Assigning incident {incident.Id} as requested by work item {workItem.Id}.");
+                await _messageBus.SendAsync(cmd);
+            }
+        }
+
+        private async Task CloseIncident(WorkItem workItem, WorkItemMapping item,
+            Incident incident)
+        {
+            var closedById = await FindAccountId(workItem, Fields.ClosedBy, Fields.ResolvedBy, Fields.ChangedBy,
+                Fields.AssignedTo);
+            if (closedById == null)
+                return;
+
+
+            workItem.Fields.TryGetValue(Fields.ResolvedReason, out var resolvedReason);
+
+            _logger.Info(
+                $"Closing incident {item.IncidentId} as requested by work item {item.WorkItemId} (resolved state).");
+            var cmd = new CloseIncident(resolvedReason?.ToString() ?? "", incident.Id) { UserId = closedById.Value };
+            await _messageBus.SendAsync(cmd);
+        }
+
+        private async Task<int?> FindAccountId(WorkItem workItem, params string[] fieldNames)
+        {
+            var accountRef = GetIdentityRef(workItem, fieldNames);
+            var map = await _userMappingRepository.GetByExternalId(accountRef.Id);
+            if (map != null)
+            {
+                return map.AccountId;
+            }
+
+            _logger.Warn($"Did not find one of {string.Join(",", fieldNames)} for work item {workItem}.");
+            return null;
+
+        }
+
+        private static IdentityRef GetIdentityRef(WorkItem workItem, string[] fieldNames)
+        {
+            IdentityRef accountRef = null;
+            foreach (var fieldName in fieldNames)
+            {
+                if (!workItem.Fields.TryGetValue(fieldName, out var fieldValue))
+                    continue;
+
+                accountRef = (IdentityRef)fieldValue;
+                if (accountRef != null)
+                    break;
+            }
+
+            return accountRef;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/ConfigurationContext.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/ConfigurationContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/ConfigurationContext.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/ConfigurationContext.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfiguration.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfiguration.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfiguration.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfiguration.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfigurationSection.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfigurationSection.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfigurationSection.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IConfigurationSection.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IReportAnalyzerModule.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IReportAnalyzerModule.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IReportAnalyzerModule.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/IReportAnalyzerModule.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/StartContext.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/StartContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Boot/StartContext.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Boot/StartContext.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Coderr.Server.ReportAnalyzer.Abstractions.csproj b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Coderr.Server.ReportAnalyzer.Abstractions.csproj
similarity index 79%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Coderr.Server.ReportAnalyzer.Abstractions.csproj
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Coderr.Server.ReportAnalyzer.Abstractions.csproj
index d8c75adc..415dd7ed 100644
--- a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Coderr.Server.ReportAnalyzer.Abstractions.csproj
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Coderr.Server.ReportAnalyzer.Abstractions.csproj
@@ -10,11 +10,11 @@
 
   <PropertyGroup>
     <PackageId>Coderr.Server.ReportAnalyzer.Abstractions</PackageId>
-    <Authors>1TCompany AB</Authors>
+    <Authors>Coderr AB</Authors>
     <Description>API client for Coderr Server.</Description>
     <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
     <PackageReleaseNotes>Converted to vstudio 2017 csproj format</PackageReleaseNotes>
-    <Copyright>Copyright 2017 © 1TCompany AB. All rights reserved.</Copyright>
+    <Copyright>Copyright 2023 © Coderr AB. All rights reserved.</Copyright>
     <PackageTags>logger exceptions analysis .net-core netstandard</PackageTags>
     <PackageIconUrl>https://coderr.io/images/nuget_icon.png</PackageIconUrl>
     <RepositoryUrl>https://github.com/coderrio/coderr.server</RepositoryUrl>
@@ -26,14 +26,14 @@
   <ItemGroup>
     <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.22" />
   </ItemGroup>
-  <ItemGroup>
+  <!--<ItemGroup>
     <_PackageFiles Include="$(OutputPath)\Coderr.Server.Abstractions.*">
       <BuildAction>None</BuildAction>
       <PackagePath>lib\netstandard2.0\</PackagePath>
     </_PackageFiles>
-  </ItemGroup>
+  </ItemGroup>-->
   <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" PrivateAssets="All" />
-    <ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
+    <ProjectReference Include="..\..\Common\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" PrivateAssets="All" />
+    <!--<ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />-->
   </ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntries.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntries.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntries.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntries.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesEntry.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesEntry.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesEntry.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesLogLevel.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesLogLevel.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesLogLevel.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Commands/StoreLogEntriesLogLevel.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/CollectionExtensions.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/CollectionExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/CollectionExtensions.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/CollectionExtensions.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ContextCollectionDTO.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ContextCollectionDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ContextCollectionDTO.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ContextCollectionDTO.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/IReportConfig.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/IReportConfig.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/IReportConfig.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/IReportConfig.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportDTO.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportDTO.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportDTO.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportExeptionDTO.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportExeptionDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportExeptionDTO.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ErrorReports/ReportExeptionDTO.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Feedback/FeedbackAttachedToIncident.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Feedback/FeedbackAttachedToIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Feedback/FeedbackAttachedToIncident.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Feedback/FeedbackAttachedToIncident.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/IDomainQueue.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/IDomainQueue.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/IDomainQueue.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/IDomainQueue.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ISaveable.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ISaveable.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/ISaveable.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/ISaveable.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/InvalidReport.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/InvalidReport.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/InvalidReport.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/InvalidReport.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/NamespaceDoc.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/NamespaceDoc.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessFeedback.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessFeedback.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessFeedback.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReport.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReport.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReport.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReport.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportContextInfoDto.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportContextInfoDto.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportContextInfoDto.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportContextInfoDto.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportExceptionDto.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportExceptionDto.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportExceptionDto.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportExceptionDto.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportLogEntry.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportLogEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportLogEntry.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ProcessReportLogEntry.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ReadMe.md b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ReadMe.md
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ReadMe.md
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Commands/ReadMe.md
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NamespaceDoc.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NamespaceDoc.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportContextInfo.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportContextInfo.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportContextInfo.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportContextInfo.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportDTO.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportDTO.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportDTO.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportException.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportException.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportException.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportException.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportLogEntry.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportLogEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportLogEntry.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Inbound/Models/NewReportLogEntry.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/IncidentSummaryDTO.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/IncidentSummaryDTO.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/IncidentSummaryDTO.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/IncidentSummaryDTO.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ProcessContextCollections.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ProcessContextCollections.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ProcessContextCollections.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ProcessContextCollections.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ReportAddedToIncident.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ReportAddedToIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ReportAddedToIncident.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Incidents/ReportAddedToIncident.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotification.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotification.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotification.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotification.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotificationAction.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotificationAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotificationAction.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Abstractions/Notifications/Commands/SendBrowserNotificationAction.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/ApplicationVersions/Handlers/GetVersionFromReportTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ApplicationVersions/Handlers/GetVersionFromReportTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/ApplicationVersions/Handlers/GetVersionFromReportTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ApplicationVersions/Handlers/GetVersionFromReportTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/Coderr.Server.ReportAnalyzer.Tests.csproj b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Coderr.Server.ReportAnalyzer.Tests.csproj
similarity index 91%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/Coderr.Server.ReportAnalyzer.Tests.csproj
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Coderr.Server.ReportAnalyzer.Tests.csproj
index abcb060d..f64c3539 100644
--- a/src/Server/Coderr.Server.ReportAnalyzer.Tests/Coderr.Server.ReportAnalyzer.Tests.csproj
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Coderr.Server.ReportAnalyzer.Tests.csproj
@@ -17,7 +17,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
+    <!--<ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />-->
     <ProjectReference Include="..\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
   </ItemGroup>
 
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/Domain/Reports/HashCodeGeneratorTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Domain/Reports/HashCodeGeneratorTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/Domain/Reports/HashCodeGeneratorTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Domain/Reports/HashCodeGeneratorTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorOrigins/Handlers/StoreLocationFromNewReportTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorOrigins/Handlers/StoreLocationFromNewReportTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorOrigins/Handlers/StoreLocationFromNewReportTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorOrigins/Handlers/StoreLocationFromNewReportTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HashCodeGeneratorTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HashCodeGeneratorTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HashCodeGeneratorTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HashCodeGeneratorTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HttpErrorGeneratorTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HttpErrorGeneratorTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HttpErrorGeneratorTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorReports/HashCodeGenerators/HttpErrorGeneratorTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HashCodeGeneratorTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HashCodeGeneratorTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HashCodeGeneratorTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HashCodeGeneratorTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HttpErrorGeneratorTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HttpErrorGeneratorTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HttpErrorGeneratorTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/ErrorsReports/HashCodeGenerators/HttpErrorGeneratorTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/Similarities/Handlers/Processing/WmiDateConverterTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Similarities/Handlers/Processing/WmiDateConverterTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/Similarities/Handlers/Processing/WmiDateConverterTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Similarities/Handlers/Processing/WmiDateConverterTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/Tagging/IdentifyTagsFromIncidentTests.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Tagging/IdentifyTagsFromIncidentTests.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer.Tests/Tagging/IdentifyTagsFromIncidentTests.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer.Tests/Tagging/IdentifyTagsFromIncidentTests.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/AnalysisUnitOfWork.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/AnalysisUnitOfWork.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/AnalysisUnitOfWork.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/AnalysisUnitOfWork.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ApplicationVersions/Handlers/GetVersionFromReport.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ApplicationVersions/Handlers/GetVersionFromReport.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ApplicationVersions/Handlers/GetVersionFromReport.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ApplicationVersions/Handlers/GetVersionFromReport.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/ConfigWrapper.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/ConfigWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/ConfigWrapper.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/ConfigWrapper.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/DomainQueueWrapper.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/DomainQueueWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/DomainQueueWrapper.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/DomainQueueWrapper.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/MessagingPrincipalWrapper.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/MessagingPrincipalWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/MessagingPrincipalWrapper.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/MessagingPrincipalWrapper.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/ScopeWrapper.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/ScopeWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/ScopeWrapper.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/ScopeWrapper.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigSectionWrapper.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigSectionWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigSectionWrapper.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigSectionWrapper.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigWrapper.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigWrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigWrapper.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Adapters/ServerConfigWrapper.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/IAnalysisModule.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/IAnalysisModule.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/IAnalysisModule.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/IAnalysisModule.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/RegisterExtensions.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/RegisterExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/RegisterExtensions.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/RegisterExtensions.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerBootstrapper.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerBootstrapper.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerBootstrapper.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerBootstrapper.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerModuleStarter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerModuleStarter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerModuleStarter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/ReportAnalyzerModuleStarter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Starters/RegisterContainerServices.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Starters/RegisterContainerServices.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/Starters/RegisterContainerServices.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Starters/RegisterContainerServices.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Starters/ReportQueueModule.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Starters/ReportQueueModule.cs
similarity index 96%
rename from src/Server/Coderr.Server.ReportAnalyzer/Boot/Starters/ReportQueueModule.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Starters/ReportQueueModule.cs
index 414871bc..3df0e946 100644
--- a/src/Server/Coderr.Server.ReportAnalyzer/Boot/Starters/ReportQueueModule.cs
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Boot/Starters/ReportQueueModule.cs
@@ -5,6 +5,7 @@
 using System.Threading.Tasks;
 using Coderr.Client;
 using Coderr.Server.Abstractions;
+using Coderr.Server.Abstractions.Boot;
 using Coderr.Server.Abstractions.Security;
 using Coderr.Server.Domain.Core.Incidents.Events;
 using Coderr.Server.Infrastructure.Messaging;
@@ -20,6 +21,8 @@
 using Griffin.Data;
 using log4net;
 using Microsoft.Extensions.DependencyInjection;
+using ConfigurationContext = Coderr.Server.ReportAnalyzer.Abstractions.Boot.ConfigurationContext;
+using StartContext = Coderr.Server.ReportAnalyzer.Abstractions.Boot.StartContext;
 
 namespace Coderr.Server.ReportAnalyzer.Boot.Starters
 {
@@ -92,8 +95,7 @@ private void ConfigureListeners(ConfigurationContext context)
             var reportEventQueue = ServerConfig.Instance.Queues.ReportEventQueue;
             var appQueue = ServerConfig.Instance.Queues.AppQueue;
 
-            var typeName = ServerConfig.Instance.IsLive ? "LIVE" : "PREMISE";
-            _logger.Info($"Running AS  {typeName} with queues {reportQueueName}, {appQueue} and {reportEventQueue}");
+            _logger.Info($"Running with queues {reportQueueName}, {appQueue} and {reportEventQueue}");
             _reportListener = ConfigureQueueListener(context, reportQueueName, reportEventQueue, appQueue);
             _eventProcessor = ConfigureQueueListener(context, reportEventQueue, reportEventQueue, appQueue);
         }
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Coderr.ReportAnalyzer.csproj.DotSettings b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Coderr.ReportAnalyzer.csproj.DotSettings
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Coderr.ReportAnalyzer.csproj.DotSettings
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Coderr.ReportAnalyzer.csproj.DotSettings
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Coderr.Server.ReportAnalyzer.csproj b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Coderr.Server.ReportAnalyzer.csproj
similarity index 77%
rename from src/Server/Coderr.Server.ReportAnalyzer/Coderr.Server.ReportAnalyzer.csproj
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Coderr.Server.ReportAnalyzer.csproj
index 9919d7bb..4b0d6e19 100644
--- a/src/Server/Coderr.Server.ReportAnalyzer/Coderr.Server.ReportAnalyzer.csproj
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Coderr.Server.ReportAnalyzer.csproj
@@ -1,10 +1,8 @@
 ﻿<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
-    <RootNamespace>Coderr.Server.ReportAnalyzer</RootNamespace>
-    <AssemblyName>Coderr.Server.ReportAnalyzer</AssemblyName>
     <DefaultItemExcludes>$(DefaultItemExcludes);**\*.DotSettings;</DefaultItemExcludes>
-    <Configurations>Debug;Release;Premise</Configurations>
+    <Configurations>Debug;Release</Configurations>
   </PropertyGroup>
   <ItemGroup>
     <Compile Remove="Environments\**" />
@@ -25,8 +23,10 @@
     <PackageReference Include="UAParser" Version="3.1.47" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
-    <ProjectReference Include="..\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
+    <!--<ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />-->
+    <ProjectReference Include="..\..\App\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
+    <ProjectReference Include="..\..\Common\Coderr.Server.Abstractions\Coderr.Server.Abstractions.csproj" />
+    <ProjectReference Include="..\..\Common\Coderr.Server.Infrastructure\Coderr.Server.Infrastructure.csproj" />
     <ProjectReference Include="..\Coderr.Server.ReportAnalyzer.Abstractions\Coderr.Server.ReportAnalyzer.Abstractions.csproj" />
   </ItemGroup>
   <!--<ItemGroup>
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/OriginsConfiguration.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/OriginsConfiguration.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/OriginsConfiguration.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/OriginsConfiguration.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/StoreLocationFromNewReport.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/StoreLocationFromNewReport.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/StoreLocationFromNewReport.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorOrigins/Handlers/StoreLocationFromNewReport.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorOrigins/IErrorOriginRepository.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorOrigins/IErrorOriginRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorOrigins/IErrorOriginRepository.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorOrigins/IErrorOriginRepository.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorOrigins/LookupInboundOrigins.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorOrigins/LookupInboundOrigins.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorOrigins/LookupInboundOrigins.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorOrigins/LookupInboundOrigins.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/ErrorHashCode.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/ErrorHashCode.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/ErrorHashCode.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/ErrorHashCode.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashCodeGenerator.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashCodeGenerator.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashCodeGenerator.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashCodeGenerator.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HashCodeUtility.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HashCodeUtility.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HashCodeUtility.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HashCodeUtility.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HttpErrorGenerator.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HttpErrorGenerator.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HttpErrorGenerator.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/HttpErrorGenerator.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/LiveWriterGenerator.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/LiveWriterGenerator.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/LiveWriterGenerator.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/LiveWriterGenerator.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/TransactionLogFull.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/TransactionLogFull.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/TransactionLogFull.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/HashcodeGenerators/TransactionLogFull.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeGenerator.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeGenerator.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeGenerator.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeGenerator.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeSubGenerator.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeSubGenerator.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeSubGenerator.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/IHashCodeSubGenerator.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/ReportDecompressor.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/ReportDecompressor.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ErrorReports/ReportDecompressor.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ErrorReports/ReportDecompressor.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Feedback/Handlers/AttachFeedbackToIncident.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Feedback/Handlers/AttachFeedbackToIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Feedback/Handlers/AttachFeedbackToIncident.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Feedback/Handlers/AttachFeedbackToIncident.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Feedback/Handlers/StoreFeedbackFromNewReports.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Feedback/Handlers/StoreFeedbackFromNewReports.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Feedback/Handlers/StoreFeedbackFromNewReports.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Feedback/Handlers/StoreFeedbackFromNewReports.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Feedback/IUserFeedbackRepository.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Feedback/IUserFeedbackRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Feedback/IUserFeedbackRepository.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Feedback/IUserFeedbackRepository.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Feedback/NewFeedback.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Feedback/NewFeedback.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Feedback/NewFeedback.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Feedback/NewFeedback.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/IAnalyticsRepository.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/IAnalyticsRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/IAnalyticsRepository.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/IAnalyticsRepository.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/DuplicateChecker.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/DuplicateChecker.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/DuplicateChecker.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/DuplicateChecker.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/FilterResult.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/FilterResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/FilterResult.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/FilterResult.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/FilterService.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/FilterService.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/FilterService.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/FilterService.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessFeedbackHandler.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessFeedbackHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessFeedbackHandler.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessFeedbackHandler.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessReportHandler.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessReportHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessReportHandler.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ProcessReportHandler.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ReOpenIncidentHandler.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ReOpenIncidentHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ReOpenIncidentHandler.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/ReOpenIncidentHandler.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/IReportAnalyzer.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/IReportAnalyzer.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/IReportAnalyzer.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/IReportAnalyzer.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportAnalyzer.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportAnalyzer.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportAnalyzer.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportAnalyzer.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportDtoConverter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportDtoConverter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportDtoConverter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/Handlers/Reports/ReportDtoConverter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/IFilterService.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/IFilterService.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/IFilterService.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/IFilterService.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/IncludeNonPublicMembersContractResolver.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/IncludeNonPublicMembersContractResolver.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/IncludeNonPublicMembersContractResolver.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/IncludeNonPublicMembersContractResolver.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReadMe.md b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReadMe.md
similarity index 98%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReadMe.md
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReadMe.md
index 8cfeb186..7c0f51a5 100644
--- a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReadMe.md
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReadMe.md
@@ -1,5 +1,5 @@
-﻿Inbound DTO handling
-====================
-
-These classes are used to recieve, deserialize and validate reports from the client libraries.
+﻿Inbound DTO handling
+====================
+
+These classes are used to recieve, deserialize and validate reports from the client libraries.
 Once done they are saved into a queue for further processing and analysis.
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReportDecompressor.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReportDecompressor.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReportDecompressor.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReportDecompressor.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReportFilter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReportFilter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReportFilter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReportFilter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReportValidator.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReportValidator.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/ReportValidator.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/ReportValidator.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Inbound/SaveReportHandler.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/SaveReportHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Inbound/SaveReportHandler.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Inbound/SaveReportHandler.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Incidents/IncidentBeingAnalyzed.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Incidents/IncidentBeingAnalyzed.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Incidents/IncidentBeingAnalyzed.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Incidents/IncidentBeingAnalyzed.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Incidents/IncidentCreatedHandler.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Incidents/IncidentCreatedHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Incidents/IncidentCreatedHandler.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Incidents/IncidentCreatedHandler.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Incidents/IncidentHashMapEntry.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Incidents/IncidentHashMapEntry.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Incidents/IncidentHashMapEntry.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Incidents/IncidentHashMapEntry.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Incidents/IncidentState.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Incidents/IncidentState.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Incidents/IncidentState.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Incidents/IncidentState.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/IncludeNonPublicMembersContractResolver.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/IncludeNonPublicMembersContractResolver.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/IncludeNonPublicMembersContractResolver.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/IncludeNonPublicMembersContractResolver.cs
diff --git a/src/Server/Reporting/Coderr.Server.ReportAnalyzer/InsidentInsights/AggregateIncidentEventsSubscriber.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/InsidentInsights/AggregateIncidentEventsSubscriber.cs
new file mode 100644
index 00000000..cbf09ceb
--- /dev/null
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/InsidentInsights/AggregateIncidentEventsSubscriber.cs
@@ -0,0 +1,110 @@
+﻿using System;
+using System.Threading.Tasks;
+using Coderr.Server.Api.Core.Incidents.Events;
+using Coderr.Server.Domain.Core.Incidents.Events;
+using Coderr.Server.Domain.Modules.Statistics;
+using Coderr.Server.ReportAnalyzer.Abstractions.Incidents;
+using DotNetCqs;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+
+namespace Coderr.Server.ReportAnalyzer.InsidentInsights
+{
+    internal class AggregateIncidentEventsSubscriber
+            : IMessageHandler<ReportAddedToIncident>
+    {
+        private readonly IAdoNetUnitOfWork _unitOfWork;
+
+        public AggregateIncidentEventsSubscriber(IAdoNetUnitOfWork unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentAssigned message)
+        {
+            var entity =
+                await _unitOfWork.FirstOrDefaultAsync<IncidentProgressTracker>("IncidentId = @incidentId", new { incidentId = message.IncidentId });
+            if (entity == null) return;
+
+            // är en bugg ngnstans där assignedAt kommer med som MinValue
+            entity.AssignedAtUtc = message.AssignedAtUtc != DateTime.MinValue
+                ? message.AssignedAtUtc
+                : DateTime.UtcNow;
+            entity.AssignedToId = message.AssignedToId;
+            await _unitOfWork.UpdateAsync(entity);
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentClosed message)
+        {
+            var entity =
+                await _unitOfWork.FirstOrDefaultAsync<IncidentProgressTracker>("IncidentId = @incidentId", new { incidentId = message.IncidentId });
+            if (entity == null) return;
+
+            entity.ClosedAtUtc = message.ClosedAtUtc == DateTime.MinValue
+                ? DateTime.UtcNow
+                : message.ClosedAtUtc;
+            entity.ClosedById = message.ClosedById;
+            await _unitOfWork.UpdateAsync(entity);
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentCreated message)
+        {
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText =
+                    @"BEGIN TRY
+                            INSERT INTO CommonIncidentProgressTracking (IncidentId, ApplicationId, CreatedAtUtc, Versions, VersionCount)
+                            VALUES (@IncidentId, @applicationId, @CreatedAtUtc, @versions, 1)
+                        END TRY
+                        BEGIN CATCH
+                            IF ERROR_NUMBER() <> 2627
+                              THROW
+                        END CATCH";
+                cmd.AddParameter("CreatedAtUtc", message.CreatedAtUtc);
+                cmd.AddParameter("IncidentId", message.IncidentId);
+                cmd.AddParameter("ApplicationId", message.ApplicationId);
+                cmd.AddParameter("Versions", $";{message.ApplicationVersion};");
+                await cmd.ExecuteNonQueryAsync();
+            }
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentReOpened message)
+        {
+            var entity =
+                await _unitOfWork.FirstOrDefaultAsync<IncidentProgressTracker>("IncidentId = @incidentId", new { incidentId = message.IncidentId });
+            if (entity == null) return;
+
+            entity.ReOpenedAtUtc = message.CreatedAtUtc.Date;
+            entity.ReOpenCount += 1;
+            await _unitOfWork.UpdateAsync(entity);
+        }
+
+        public async Task HandleAsync(IMessageContext context, ReportAddedToIncident message)
+        {
+            var entity =
+                await _unitOfWork.FirstOrDefaultAsync<IncidentProgressTracker>("IncidentId = @incidentId", new { incidentId = message.Incident.Id });
+            if (entity == null) return;
+
+            if (entity.Versions?.Contains(message.Report.ApplicationVersion) == true)
+                return;
+
+            if (string.IsNullOrEmpty(entity.Versions))
+                entity.Versions = ";";
+            entity.Versions += $";{message.Report.ApplicationVersion};";
+            entity.VersionCount++;
+
+            await _unitOfWork.UpdateAsync(entity);
+        }
+
+        public async Task HandleAsync(IMessageContext context, IncidentDeleted message)
+        {
+            using (var cmd = _unitOfWork.CreateDbCommand())
+            {
+                cmd.CommandText =
+                    @"DELETE FROM CommonIncidentProgressTracking WHERE IncidentId = @id";
+                cmd.AddParameter("id", message.IncidentId);
+                await cmd.ExecuteNonQueryAsync();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Logs/StoreLogEntriesHandler.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Logs/StoreLogEntriesHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Logs/StoreLogEntriesHandler.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Logs/StoreLogEntriesHandler.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Old/Scanners/TryToAnalyzeInvalidReports.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Old/Scanners/TryToAnalyzeInvalidReports.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Old/Scanners/TryToAnalyzeInvalidReports.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Old/Scanners/TryToAnalyzeInvalidReports.cs
diff --git a/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Events/FindPartitionsInNewReports.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Events/FindPartitionsInNewReports.cs
new file mode 100644
index 00000000..19620be0
--- /dev/null
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Events/FindPartitionsInNewReports.cs
@@ -0,0 +1,99 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Coderr.Server.Abstractions;
+using Coderr.Server.Infrastructure.Messaging;
+using Coderr.Server.ReportAnalyzer.Abstractions.Incidents;
+using DotNetCqs;
+using DotNetCqs.Queues;
+
+namespace Coderr.Server.ReportAnalyzer.Partitions.Events
+{
+    public class FindPartitionsInNewReports : IMessageHandler<ReportAddedToIncident>
+    {
+        private readonly IMessageQueue _queue;
+
+        public FindPartitionsInNewReports()
+        {
+            _queue = QueueManager.Instance.GetQueue(ServerConfig.Instance.Queues.InboundPartitions);
+        }
+
+        public async Task HandleAsync(IMessageContext context, ReportAddedToIncident message)
+        {
+            var collection =
+                message.Report.ContextCollections.FirstOrDefault(x =>
+                    x.Name == InboundDTO.ContextCollectionName);
+            var partitionKeys = collection != null
+                ? new Dictionary<string, string>(collection.Properties, StringComparer.OrdinalIgnoreCase)
+                : new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+
+            string userValue = null;
+            foreach (var col in message.Report.ContextCollections)
+            {
+                foreach (var prop in col.Properties)
+                {
+                    // Misconfigured client library.
+                    if (string.IsNullOrEmpty(prop.Value))
+                        continue;
+
+                    var value = prop.Value.Length > 40
+                        ? prop.Value.Substring(0, 40)
+                        : prop.Value;
+
+                    switch (prop.Key)
+                    {
+                        case "InstallationId":
+                            partitionKeys[prop.Key] = value;
+                            break;
+                        case "UserToken":
+                        case "UserId":
+                        case "UserName":
+                            userValue = value;
+                            break;
+                    }
+
+                    if (col.Name == "ErrPartitions")
+                        partitionKeys[prop.Key] = value;
+                    else if (prop.Key.StartsWith(InboundDTO.ContextCollectionPropertyPrefix))
+                    {
+                        //+1 to remove the dot/underscore.
+                        var key = prop.Key.Remove(0,
+                            InboundDTO.ContextCollectionPropertyPrefix.Length + 1);
+                        partitionKeys[key] = value;
+                    }
+                }
+            }
+
+            if (userValue != null
+                    && !partitionKeys.ContainsKey("UserName")
+                    && !partitionKeys.ContainsKey("UserId")
+                    && !partitionKeys.ContainsKey("UserToken"))
+            {
+                partitionKeys["User"] = userValue;
+            }
+
+            if (partitionKeys.Count == 0)
+                return;
+
+            using (var session = _queue.BeginSession())
+            {
+                var messages = new List<Message>();
+                foreach (var partitionKey in partitionKeys)
+                {
+                    var dto = new InboundDTO
+                    {
+                        IncidentId = message.Incident.Id,
+                        Value = partitionKey.Value,
+                        PartitionKey = partitionKey.Key,
+                        ReceivedAtUtc = message.Report.CreatedAtUtc
+                    };
+                    var msg = new Message(dto);
+                    messages.Add(msg);
+                }
+
+                await session.EnqueueAsync(context.Principal, messages);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/InboundDTO.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/InboundDTO.cs
new file mode 100644
index 00000000..a2277c82
--- /dev/null
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/InboundDTO.cs
@@ -0,0 +1,18 @@
+﻿using System;
+
+namespace Coderr.Server.ReportAnalyzer.Partitions
+{
+    /// <summary>
+    /// Value received from the client library
+    /// </summary>
+    public class InboundDTO
+    {
+        public const string ContextCollectionName = "Partition";
+        public const string ContextCollectionPropertyPrefix = "ErrPartition";
+
+        public int IncidentId { get; set; }
+        public string Value { get; set; }
+        public string PartitionKey { get; set; }
+        public DateTime ReceivedAtUtc { get; set; }
+    }
+}
diff --git a/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Jobs/FindIncidentsToTagJob.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Jobs/FindIncidentsToTagJob.cs
new file mode 100644
index 00000000..c08a5975
--- /dev/null
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Jobs/FindIncidentsToTagJob.cs
@@ -0,0 +1,47 @@
+﻿using System.Threading.Tasks;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Api.Modules.Tagging.Events;
+using Coderr.Server.Domain.Modules.Partitions;
+using Coderr.Server.Domain.Modules.Tags;
+using DotNetCqs;
+using Griffin.ApplicationServices;
+
+namespace Coderr.Server.ReportAnalyzer.Partitions.Jobs
+{
+    [ContainerService(RegisterAsSelf = true)]
+    internal class FindIncidentsToTagJob : IBackgroundJobAsync
+    {
+        private readonly IPartitionRepository _repository;
+        private readonly ITagsRepository _tagsRepository;
+        private IMessageBus _messageBus;
+
+        public FindIncidentsToTagJob(IPartitionRepository repository, ITagsRepository tagsRepository, IMessageBus messageBus)
+        {
+            _repository = repository;
+            _tagsRepository = tagsRepository;
+            _messageBus = messageBus;
+        }
+
+        public async Task ExecuteAsync()
+        {
+            var definitions = await _repository.GetDefinitionsToTag();
+            foreach (var definition in definitions)
+            {
+                var incidents = await _repository.GetIncidentsToTag(definition);
+                foreach (var incident in incidents)
+                {
+                    if (incident.MarkAsCritical)
+                    {
+                        await _tagsRepository.UpdateTags(incident.IncidentId, new[] {"critical"}, new[] {"important"});
+                        await _messageBus.SendAsync(new TagAttachedToIncident(incident.ApplicationId, incident.IncidentId, new[] {"critical"}));
+                    }
+                    else if (incident.MarkAsImportant)
+                    {
+                        await _tagsRepository.AddTag(incident.IncidentId, "important");
+                        await _messageBus.SendAsync(new TagAttachedToIncident(incident.ApplicationId, incident.IncidentId, new[] {"important"}));
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Jobs/ProcessInboundPartitionValuesJob.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Jobs/ProcessInboundPartitionValuesJob.cs
new file mode 100644
index 00000000..53abd57b
--- /dev/null
+++ b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Partitions/Jobs/ProcessInboundPartitionValuesJob.cs
@@ -0,0 +1,163 @@
+﻿using System;
+using System.Data;
+using System.Threading.Tasks;
+using Coderr.Client;
+using Coderr.Server.Abstractions;
+using Coderr.Server.Abstractions.Boot;
+using Coderr.Server.Infrastructure.Messaging;
+using DotNetCqs.Queues;
+using Griffin.ApplicationServices;
+using Griffin.Data;
+using Griffin.Data.Mapper;
+using log4net;
+
+namespace Coderr.Server.ReportAnalyzer.Partitions.Jobs
+{
+    /// <summary>
+    ///     Take inbound values and add them if they are unique. Otherwise just toss the values away.
+    /// </summary>
+    /// <remarks>
+    ///     <para>
+    ///         To improve performance we insert all inbound values directly to a table without any queries or checks. Then we
+    ///         use this job
+    ///         to find new unique values which can be inserted.
+    ///     </para>
+    ///     <para>
+    ///         A new instance are created of this class on every execution, hence we can safely use member fields.
+    ///     </para>
+    /// </remarks>
+    [ContainerService(RegisterAsSelf = true)]
+    public class ProcessInboundPartitionValuesJob : IBackgroundJobAsync
+    {
+        private static bool _running;
+        private readonly IConnectionFactory _connectionFactory;
+        private readonly IMessageQueue _queue;
+        private readonly ILog _logger = LogManager.GetLogger(typeof(ProcessInboundPartitionValuesJob));
+
+        public ProcessInboundPartitionValuesJob(IConnectionFactory connectionFactory)
+        {
+            _queue = QueueManager.Instance.GetQueue(ServerConfig.Instance.Queues.InboundPartitions);
+            _connectionFactory = connectionFactory;
+        }
+
+        public async Task ExecuteAsync()
+        {
+            if (_running) return;
+
+            _running = true;
+            try
+            {
+                await ProcessValues();
+            }
+            catch (Exception ex)
+            {
+                Err.Report(ex);
+                _logger.Error("Failed to process values", ex);
+            }
+
+            _running = false;
+        }
+
+        private async Task ProcessValues()
+        {
+            IDbConnection connection = null;
+            var reportsLeft = 1000;
+            while (reportsLeft-- > 0)
+            {
+                var lastOrgId = -1;
+                using (var session = _queue.BeginSession())
+                {
+                    var entry = await session.DequeueWithCredentials(TimeSpan.FromSeconds(1));
+                    if (entry == null) break;
+
+                    var organizationIdStr = entry.Principal
+                        ?.FindFirst(x => x.Type == "http://coderr/claims/organization/id")?.Value;
+                    if (organizationIdStr != null)
+                    {
+                        var orgId = int.Parse(organizationIdStr);
+                        if (orgId != lastOrgId)
+                        {
+                            connection?.Close();
+                            connection = null;
+                        }
+                    }
+
+                    if (connection == null)
+                    {
+                        connection = _connectionFactory.OpenConnection(entry.Principal);
+                    }
+
+                    var dto = (InboundDTO)entry.Message.Body;
+                    using (var cmd = connection.CreateDbCommand())
+                    {
+                        cmd.CommandText =
+                            @"declare @partitionId int;
+    declare @valueId int;
+    declare @appId int;
+    declare @insightId int;
+
+    select @appId = applicationId FROM Incidents WHERE id = @incidentId;
+	if @appId IS NOT NULL -- NULL if incident have been deleted.
+	begin
+
+        set @partitionId = null;
+	    SELECT @partitionId = Id FROM PartitionDefinitions WITH (ReadUncommitted) WHERE PartitionKey = @key AND applicationId=@appId;
+	    IF @partitionId IS NULL
+	    BEGIN
+		      declare @name varchar(40);
+		      set @name = CASE @key
+			      WHEN 'UserId' THEN 'User'
+			      WHEN 'UserToken' THEN 'User'
+			      WHEN 'UserName' THEN 'User'
+			      WHEn 'ApplicationId' THEN 'Application'
+			      ELSE @key
+		      END
+		      INSERT PartitionDefinitions ( ApplicationId, Name, PartitionKey, Weight)
+		      VALUES ( @appId, @key, @key, 2);
+		      SELECT @partitionId = SCOPE_IDENTITY();
+	    END
+
+        set @valueId = null;
+	    SELECT @valueId = Id FROM ApplicationPartitionValues WITH (ReadUncommitted) WHERE PartitionId = @partitionId AND [value]=@value
+	    IF @valueId IS NULL
+	    BEGIN
+		      INSERT ApplicationPartitionValues ( PartitionId, Value ) VALUES ( @partitionId, @value);
+		      SELECT @valueId = SCOPE_IDENTITY();
+		      INSERT IncidentPartitionValues ( IncidentId, PartitionId, ReceivedAtUtc, ValueId ) VALUES ( @incidentId, @partitionId, GetUtcDate(), @valueId);
+	    END --if valueId
+	    ELSE
+	    BEGIN
+            declare @incidentPartitionId int;
+            SELECT @incidentPartitionId=Id FROM IncidentPartitionValues WITH (ReadUncommitted) WHERE IncidentId = @incidentId AND PartitionId = @partitionId AND ValueId = @valueId
+		    IF @incidentPartitionId IS NULL 
+		    BEGIN
+		      INSERT IncidentPartitionValues ( IncidentId, PartitionId, ReceivedAtUtc, ValueId) VALUES ( @incidentId, @partitionId,GetUtcDate(), @valueId);
+            END
+            ELSE
+            BEGIN
+                UPDATE IncidentPartitionValues SET ReceivedAtUtc=GetUtcDate() WHERE Id = @incidentPartitionId;
+		    END
+	    END --else IF @valueId IS NULL
+
+
+        set @insightId = null;
+	    SELECT @insightId = Id FROM ApplicationPartitionInsights WITH (ReadUncommitted) WHERE PartitionId = @partitionId AND [value]=@value AND YearMonth = @receivedMonth;
+	    IF @insightId IS NULL
+	    BEGIN
+		      INSERT ApplicationPartitionInsights ( PartitionId, Value, YearMonth) VALUES ( @partitionId, @value, @receivedMonth);
+	    END --if insightId
+    END --if appId
+";
+                        cmd.AddParameter("key", dto.PartitionKey);
+                        cmd.AddParameter("value", dto.Value);
+                        cmd.AddParameter("incidentId", dto.IncidentId);
+                        cmd.AddParameter("receivedMonth", dto.ReceivedAtUtc.ToString("yyyy-MM-01"));
+                        await cmd.ExecuteNonQueryAsync();
+                    }
+                }
+            }
+
+            connection?.Close();
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/Entities/SpikeAggregation.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/Entities/SpikeAggregation.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/Entities/SpikeAggregation.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/Entities/SpikeAggregation.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/Handlers/IncreaseSpikeCountOnReportAdded.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/Handlers/IncreaseSpikeCountOnReportAdded.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/Handlers/IncreaseSpikeCountOnReportAdded.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/Handlers/IncreaseSpikeCountOnReportAdded.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/IReportSpikeRepository.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/IReportSpikeRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/IReportSpikeRepository.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/IReportSpikeRepository.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/Jobs/FindSpikesToNotifyOn.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/Jobs/FindSpikesToNotifyOn.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/Jobs/FindSpikesToNotifyOn.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/Jobs/FindSpikesToNotifyOn.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/NewSpike.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/NewSpike.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ReportSpikes/NewSpike.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportSpikes/NewSpike.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/ReportsExtensions.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportsExtensions.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/ReportsExtensions.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/ReportsExtensions.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ApplicationInfoAdapter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ApplicationInfoAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ApplicationInfoAdapter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ApplicationInfoAdapter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/CustomField.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/CustomField.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/CustomField.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/CustomField.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ExceptionPropertiesAdapter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ExceptionPropertiesAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ExceptionPropertiesAdapter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ExceptionPropertiesAdapter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IAdapterRepository.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IAdapterRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IAdapterRepository.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IAdapterRepository.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IValueAdapter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IValueAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IValueAdapter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/IValueAdapter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/NamespaceDoc.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/NamespaceDoc.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/MemoryNormalizer.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/MemoryNormalizer.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/MemoryNormalizer.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/MemoryNormalizer.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/NumberNormalizer.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/NumberNormalizer.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/NumberNormalizer.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Normalizers/NumberNormalizer.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Old/ProcessorTimeAdapter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Old/ProcessorTimeAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Old/ProcessorTimeAdapter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Old/ProcessorTimeAdapter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystemAdapter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystemAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystemAdapter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystemAdapter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OperatingSystemSku.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OperatingSystemSku.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OperatingSystemSku.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OperatingSystemSku.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OsProductSuite.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OsProductSuite.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OsProductSuite.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/OperatingSystems/OsProductSuite.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Runner/AdapterRepository.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Runner/AdapterRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Runner/AdapterRepository.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/Runner/AdapterRepository.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/UserAgentAdapter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/UserAgentAdapter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/UserAgentAdapter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/UserAgentAdapter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ValueAdapterContext.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ValueAdapterContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ValueAdapterContext.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Adapters/ValueAdapterContext.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/DeleteAbandonedSimilarities.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/DeleteAbandonedSimilarities.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/DeleteAbandonedSimilarities.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/DeleteAbandonedSimilarities.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/ISimilarityRepository.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/ISimilarityRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/ISimilarityRepository.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/ISimilarityRepository.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/NamespaceDoc.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/NamespaceDoc.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/WmiDateConverter.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/WmiDateConverter.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/WmiDateConverter.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Handlers/Processing/WmiDateConverter.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/Handlers/UpdateSimilaritiesFromNewReport.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Handlers/UpdateSimilaritiesFromNewReport.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/Handlers/UpdateSimilaritiesFromNewReport.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/Handlers/UpdateSimilaritiesFromNewReport.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Similarities/SimilarityAnalyzer.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/SimilarityAnalyzer.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Similarities/SimilarityAnalyzer.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Similarities/SimilarityAnalyzer.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/AssemblyScanningTagIdentifierProvider.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/AssemblyScanningTagIdentifierProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/AssemblyScanningTagIdentifierProvider.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/AssemblyScanningTagIdentifierProvider.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IdentifyTagsFromIncident.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IdentifyTagsFromIncident.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IdentifyTagsFromIncident.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IdentifyTagsFromIncident.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IncidentReopenedHandler.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IncidentReopenedHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IncidentReopenedHandler.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Handlers/IncidentReopenedHandler.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifierProvider.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifierProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifierProvider.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/ITagIdentifierProvider.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AdoNetIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AdoNetIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AdoNetIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AdoNetIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AspNetMvcAndWebApiIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AspNetMvcAndWebApiIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AspNetMvcAndWebApiIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/AspNetMvcAndWebApiIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/CSharpIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/CSharpIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/CSharpIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/CSharpIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/ConsoleApplication.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/ConsoleApplication.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/ConsoleApplication.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/ConsoleApplication.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/Datacontract.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/Datacontract.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/Datacontract.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/Datacontract.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/EntityFrameworkIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/EntityFrameworkIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/EntityFrameworkIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/EntityFrameworkIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/JsonNetIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/JsonNetIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/JsonNetIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/JsonNetIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/LinqIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/LinqIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/LinqIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/LinqIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/MarkdownSharp.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/MarkdownSharp.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/MarkdownSharp.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/MarkdownSharp.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/NHibernate.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/NHibernate.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/NHibernate.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/NHibernate.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/RazorIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/RazorIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/RazorIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/RazorIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/SqlServerIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/SqlServerIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/SqlServerIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/SqlServerIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WcfIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WcfIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WcfIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WcfIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WinFormsIdentifier.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WinFormsIdentifier.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WinFormsIdentifier.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/Identifiers/WinFormsIdentifier.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/IocIdentifierProvider.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/IocIdentifierProvider.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/IocIdentifierProvider.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/IocIdentifierProvider.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Tagging/TagIdentifierContext.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/TagIdentifierContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Tagging/TagIdentifierContext.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Tagging/TagIdentifierContext.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/ActionConfigurationData.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ActionConfigurationData.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/ActionConfigurationData.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ActionConfigurationData.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/ActionExecutionContext.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ActionExecutionContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/ActionExecutionContext.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ActionExecutionContext.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/HttpPostAction.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/HttpPostAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/HttpPostAction.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/HttpPostAction.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/ITriggerAction.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/ITriggerAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/ITriggerAction.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/ITriggerAction.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyActionType.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyActionType.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyActionType.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyActionType.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyUsersActionSettings.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyUsersActionSettings.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyUsersActionSettings.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/NotifyUsersActionSettings.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendEmail.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendEmail.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendEmail.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendEmail.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendSmsAction.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendSmsAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendSmsAction.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/SendSmsAction.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/Tools/GSMEncoding.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/Tools/GSMEncoding.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Actions/Tools/GSMEncoding.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Actions/Tools/GSMEncoding.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/CollectionMetadata.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/CollectionMetadata.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/CollectionMetadata.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/CollectionMetadata.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/FilterCondition.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/FilterCondition.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/FilterCondition.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/FilterCondition.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/FilterContext.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/FilterContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/FilterContext.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/FilterContext.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/FilterResult.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/FilterResult.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/FilterResult.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/FilterResult.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Filters/NamespaceDoc.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Filters/NamespaceDoc.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Filters/NamespaceDoc.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Filters/NamespaceDoc.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Handlers/Actions/ITriggerActionFactory.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Handlers/Actions/ITriggerActionFactory.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Handlers/Actions/ITriggerActionFactory.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Handlers/Actions/ITriggerActionFactory.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Handlers/TriggerFiltersOnReportAdded.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Handlers/TriggerFiltersOnReportAdded.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Handlers/TriggerFiltersOnReportAdded.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Handlers/TriggerFiltersOnReportAdded.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Handlers/UpdateCollectionsOnReportAdded.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Handlers/UpdateCollectionsOnReportAdded.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Handlers/UpdateCollectionsOnReportAdded.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Handlers/UpdateCollectionsOnReportAdded.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRepository.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRepository.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRepository.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRepository.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRule.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRule.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRule.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ITriggerRule.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/LastTriggerAction.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/LastTriggerAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/LastTriggerAction.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/LastTriggerAction.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Rules/ContextCollectionRule.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Rules/ContextCollectionRule.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Rules/ContextCollectionRule.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Rules/ContextCollectionRule.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Rules/ExceptionRule.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Rules/ExceptionRule.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Rules/ExceptionRule.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Rules/ExceptionRule.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Rules/RuleBase.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Rules/RuleBase.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Rules/RuleBase.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Rules/RuleBase.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/ServiceLocatorTriggerActionFactory.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ServiceLocatorTriggerActionFactory.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/ServiceLocatorTriggerActionFactory.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/ServiceLocatorTriggerActionFactory.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/Trigger.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Trigger.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/Trigger.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/Trigger.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/TriggerActionNameAttribute.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/TriggerActionNameAttribute.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/TriggerActionNameAttribute.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/TriggerActionNameAttribute.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/Triggers/TriggerExecutionContext.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/TriggerExecutionContext.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/Triggers/TriggerExecutionContext.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/Triggers/TriggerExecutionContext.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/BrowserNotificationConfig.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/BrowserNotificationConfig.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/BrowserNotificationConfig.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/BrowserNotificationConfig.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/Notification.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/Notification.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/Notification.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/Notification.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/NotificationAction.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/NotificationAction.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/NotificationAction.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Dtos/NotificationAction.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportReceived.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportReceived.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportReceived.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportReceived.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportRecevied.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportRecevied.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportRecevied.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/CheckForNotificationsToSendOnReportRecevied.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/SendBrowserNotificationHandler.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/SendBrowserNotificationHandler.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/SendBrowserNotificationHandler.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/SendBrowserNotificationHandler.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentEmail.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentEmail.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentEmail.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentEmail.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentSms.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentSms.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentSms.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/Handlers/Tasks/SendIncidentSms.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/INotificationService.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/INotificationService.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/INotificationService.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/INotificationService.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/IWebPushClient.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/IWebPushClient.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/IWebPushClient.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/IWebPushClient.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/InvalidSubscriptionException.cs b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/InvalidSubscriptionException.cs
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/UserNotifications/InvalidSubscriptionException.cs
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/UserNotifications/InvalidSubscriptionException.cs
diff --git a/src/Server/Coderr.Server.ReportAnalyzer/codeRR.Server.ReportAnalyzer.csproj.DotSettings b/src/Server/Reporting/Coderr.Server.ReportAnalyzer/codeRR.Server.ReportAnalyzer.csproj.DotSettings
similarity index 100%
rename from src/Server/Coderr.Server.ReportAnalyzer/codeRR.Server.ReportAnalyzer.csproj.DotSettings
rename to src/Server/Reporting/Coderr.Server.ReportAnalyzer/codeRR.Server.ReportAnalyzer.csproj.DotSettings

From 848684121d9cb0ed37bbadd4ae853808b4e110ca Mon Sep 17 00:00:00 2001
From: Jonas Gauffin <jonas.gauffin@coderr.io>
Date: Fri, 29 Sep 2023 07:39:36 +0200
Subject: [PATCH 2/2] xc

---
 .../codeRR.Server.ReportAnalyzer.Tests.csproj | 28 -------------------
 1 file changed, 28 deletions(-)
 delete mode 100644 src/Server/Coderr.Server.ReportAnalyzer.Tests/codeRR.Server.ReportAnalyzer.Tests.csproj

diff --git a/src/Server/Coderr.Server.ReportAnalyzer.Tests/codeRR.Server.ReportAnalyzer.Tests.csproj b/src/Server/Coderr.Server.ReportAnalyzer.Tests/codeRR.Server.ReportAnalyzer.Tests.csproj
deleted file mode 100644
index abcb060d..00000000
--- a/src/Server/Coderr.Server.ReportAnalyzer.Tests/codeRR.Server.ReportAnalyzer.Tests.csproj
+++ /dev/null
@@ -1,28 +0,0 @@
-﻿<Project Sdk="Microsoft.NET.Sdk">
-  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
-    <PackageReference Include="xunit" Version="2.4.1" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
-      <PrivateAssets>all</PrivateAssets>
-      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
-    </PackageReference>
-    <PackageReference Include="FluentAssertions" Version="6.4.0" />
-    <PackageReference Include="NSubstitute" Version="4.3.0" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\Coderr.Server.Domain\Coderr.Server.Domain.csproj" />
-    <ProjectReference Include="..\Coderr.Server.ReportAnalyzer\Coderr.Server.ReportAnalyzer.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}"></Service>
-  </ItemGroup>
-
-</Project>
\ No newline at end of file
