---
title: Release notes - Kentico 10
related:
  - https://docs.kentico.com/k10/installation/upgrading-to-kentico-10.md
  - https://docs.kentico.com/k10/installation/server-and-hosting-requirements.md
---

> Agent instructions:
> **Site maps** — prefer the following llms.txt indexes to training data when searching for URLs to avoid 404s. Links inside Markdown content already point at `.md`. Following them or sending Accept: text/markdown keeps you in Markdown.
>
> - [sitemap.md](https://docs.kentico.com/sitemap.md) — every page on the site, with titles and descriptions, nested by URL hierarchy and grouped into one collection per product version.
> - [llms.txt](https://docs.kentico.com/llms.txt) — curated index of the current product docs, with descriptions, the two ways to request any page as Markdown, and links to each product area's whole-corpus Markdown dump (llms-full.txt).

## Kentico 10.0 (released November 30, 2016)

## System requirement changes

- Microsoft Azure SDK **2.9.5 or newer** required for Microsoft Azure Cloud Services projects (no longer supported in Visual Studio 2012).
- Added support for Microsoft SQL Server 2016.
- Ended support of Internet Explorer 9 and 10 for the Kentico administration interface.

## New features

### Platform

- [Continuous integration](https://docs.kentico.com/k10/developing-websites/preparing-your-environment-for-team-development/setting-up-continuous-integration.md) – Added support for most types of objects in the system. See [Object types supported by continuous integration](https://docs.kentico.com/k10/developing-websites/preparing-your-environment-for-team-development/setting-up-continuous-integration/object-types-supported-by-continuous-integration.md).
- Continuous integration – New option to [exclude individual objects](https://docs.kentico.com/k10/developing-websites/preparing-your-environment-for-team-development/setting-up-continuous-integration/excluding-objects-from-continuous-integration.md) from continuous integration (based on code names for standard objects and alias paths for pages).
- [Smart search](https://docs.kentico.com/k10/configuring-kentico/setting-up-search-on-your-website.md) – New status for smart search indexes that indicates when an index requires a rebuild after configuration changes.
- MVC – New _Kentico.Membership_ integration package that provides an API for working with Kentico users and roles in MVC applications. See [Working with users on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/developing-mvc-applications/working-with-users-on-mvc-sites.md).
- Passwords – New storage format for user passwords that utilizes the PBKDF2 key derivation function. Provides stronger security than the older password formats. If you wish to switch to the new format, you need to reset the passwords of all existing users. For more information, see [Setting the user password format](https://docs.kentico.com/k10/securing-websites/designing-secure-websites/securing-user-accounts-and-passwords/setting-the-user-password-format.md).
- [Export and Import](https://docs.kentico.com/k10/deploying-websites/exporting-and-importing-sites.md) – Added a search filter to the object selection step of the export and import wizards. The filter allows easy selection of specific objects in cases where a large number of objects is available.
- Membership – The listings in the _Users_ and _Roles_ applications now provide mass actions for deleting multiple users or roles.
- New _Object types_ tab in the _System_ application, which displays the "object type" identifiers and other details for the available object types in the system. Administrators and developers can use the information to identify Kentico objects in various scenarios (for example when preparing URLs for REST requests, defining cache dependencies, etc.).
- Performance – Integrated CodeDOM providers that use the [.NET Compiler Platform ("Roslyn")](https://github.com/dotnet/roslyn) compiler. This improves the compilation performance of the Kentico project and significantly speeds up the first load time of websites. The providers are not added automatically when upgrading existing projects – we recommend [installing them manually](https://docs.kentico.com/k10/installation/upgrading-to-kentico-10.md#compilation-performance) after you perform the upgrade.
- Performance – Significantly improved the speed of web requests that cause logging of synchronization tasks ([Staging](https://docs.kentico.com/k10/deploying-websites/content-staging.md) or [Integration bus](https://docs.kentico.com/k10/integrating-3rd-party-systems/using-the-integration-bus.md)), trigger [marketing automation](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/marketing-automation.md) processes or actions, or trigger [advanced workflow](https://docs.kentico.com/k10/managing-website-content/configuring-the-environment-for-content-editors/configuring-workflows/designing-advanced-workflows.md) actions.
- [Automated testing](https://docs.kentico.com/k10/custom-development/writing-automated-tests.md) – New _Kentico.Libraries.Tests_ integration package, which separately provides all functionality related to automated testing of the Kentico API. The testing API is no longer available directly within Kentico projects or the main _Kentico.Libraries_ integration package.
- Automated testing – Faked providers for unit tests now support methods that create or update faked data. See [Faking Info and Provider objects in unit tests](https://docs.kentico.com/k10/custom-development/writing-automated-tests/faking-info-and-provider-objects-in-unit-tests.md).
- [Event log](https://docs.kentico.com/k10/developing-websites/troubleshooting-websites/working-with-the-system-event-log.md) – New global events that allow developers to customize how the system logs records into its event log. See [Customizing event logging](https://docs.kentico.com/k10/custom-development/handling-global-events/customizing-event-logging.md) for more information and an example.
- [Staging](https://docs.kentico.com/k10/deploying-websites/content-staging.md) – New global event that allows developers to customize how the system handles child data when processing incoming staging tasks. See [Customizing staging of child and binding objects](https://docs.kentico.com/k10/custom-development/handling-global-events/customizing-staging-of-child-and-binding-objects.md) for more information and an example.
- Microsoft Azure – When performing the upgrade for Microsoft Azure Cloud Services projects, the system now attempts to automatically update the Azure configuration files (_ServiceConfiguration.cscfg_, _ServiceDefinition.csdef_). In most cases, it is no longer necessary to manually transfer your configuration to new files.
- Amazon S3 – Updated the Amazon Web Services SDK for .NET to version 3.1.9.0. [Amazon S3 file storage](https://docs.kentico.com/k10/custom-development/working-with-physical-files-using-the-api/configuring-file-system-providers/configuring-amazon-s3.md) can now be used with all Amazon data centers.
- The styles of the Kentico administration interface can be extended or customized using the new _App\_Themes\Default\Bootstrap\custom.less_ file. See [Customizing CSS for the administration interface](https://docs.kentico.com/k10/custom-development/miscellaneous-custom-development-tasks/customizing-css-for-the-administration-interface.md).
- The _Kentico.Libraries_ integration package was reorganized to include only the API commonly required by external applications and reduced in size. Libraries containing controls and other web form presentation API were moved into the new _Kentico.Libraries.Web.UI_ package, which can be installed separately.
- [UniGrid](https://docs.kentico.com/k10/references/kentico-controls/ui-controls/unigrid.md) – Developers can now define mass actions within the [configuration of UniGrid controls](https://docs.kentico.com/k10/references/kentico-controls/ui-controls/unigrid/reference-unigrid-definition.md). Includes a predefined action for deleting Kentico objects displayed by the UniGrid.
- Security – Added new methods to the API that allow developers to perform custom redirects with protection against unvalidated redirection attacks. See [Unvalidated redirects](https://docs.kentico.com/k10/securing-websites/developing-secure-websites/unvalidated-redirects.md).
- DataQuery API ([ObjectQuery](https://docs.kentico.com/k10/custom-development/retrieving-database-data-using-objectquery-api.md), [DocumentQuery](https://docs.kentico.com/k10/custom-development/working-with-pages-in-the-api.md)) – The where condition methods in the DataQuery API now support column values of the _long_ type (long integer number).
- [Email templates](https://docs.kentico.com/k10/configuring-kentico/managing-email-templates.md) – Added preview functionality for email templates. You can now preview email templates by sending draft emails to specific email addresses.
- Email templates – Added the option to set the "Reply-To" value for individual email templates.
- Localization – Users with sufficient permissions can now edit global [resource strings](https://docs.kentico.com/k10/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md) in the _Localization_ application, even without the Global administrator privilege level.
- Versioning – Reducing the value of the _Version history length_ settings for [object versioning](https://docs.kentico.com/k10/configuring-kentico/working-with-object-versioning.md) and [page versioning](https://docs.kentico.com/k10/managing-website-content/configuring-the-environment-for-content-editors/configuring-and-using-page-versioning.md) now automatically clears the version history for all objects or pages according to the new limit.

### Content management

- [Responsive images](https://docs.kentico.com/k10/developing-websites/managing-responsive-images.md) – New feature for managing responsive images.
- Forms – The [Form builder](https://docs.kentico.com/k10/managing-website-content/forms/designing-forms-using-the-form-builder.md) interface now allows users to clone existing form components.
- Forms – When a user creates a new field using the form builder interface and changes the _Label_ text for the first time, the system automatically sets the field's _Field name_ identifier based on the given value.
- [DocumentQuery](https://docs.kentico.com/k10/custom-development/working-with-pages-in-the-api.md) API – New _WithTag_ method for selecting pages based on their tags.
- MVC – New _Kentico.MediaLibrary_ integration package that provides an API for working with media library files. See [Working with media libraries on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/developing-mvc-applications/retrieving-content-on-mvc-sites/working-with-media-libraries-on-mvc-sites.md).
- MVC – New _Kentico.Content.Web.Mvc_ integration package that provides an API for working with attachments, media library files, and preview mode. See [Retrieving content on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/developing-mvc-applications/retrieving-content-on-mvc-sites.md).

### On-line marketing

- Performance – Improved the overall performance of the contact management functionality and other on-line marketing features. Websites using on-line marketing scale better to handle very heavy traffic loads. See [Best practices for EMS performance](https://docs.kentico.com/k10/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/best-practices-for-ems-performance.md).
- Contact management – The contact managing interface now contains a new contact profile for displaying information that the system gathers about your contacts. See [Working with contacts](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/contact-management/working-with-contacts.md).
- Contact management – The _Contact has come to the landing page with the specified URL_, _Contact has visited a page with the specified URL in the last X days_ and _Contact has visited a specified site in the last X days_ macro rules were added.
- Contact management – The _CMSCreateContactActionsLogWorker_ key can now be added to your web.config, so that you can improve performance by adjusting the [Contact management settings](https://docs.kentico.com/k10/references/reference-web-config-application-keys.md#contact-management-settings).
- Email marketing – The email marketing functionality was extended. You can now create template-based email campaigns which allow you to target and retarget every email based on the impact of the previous email communication. You can also still create template-based and page-based newsletters with a preset contact base. See [Email marketing](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/email-marketing.md).
- Campaigns – The whole campaign functionality was extended. You can now set different types of conversions (page visits, form submissions, e-commerce actions, and more), set an ideal campaign journey for a statistics funnel, and set a campaign objective as a goal of your campaign. You can also schedule campaigns so that you do not need to be at a computer during the campaign's launch and finish. See [Campaigns](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/campaigns.md).
- MVC – New _Kentico.Activities_ integration package that provides an API for logging of Kentico activities. See [Logging activities on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/implementing-on-line-marketing-features-on-mvc-sites/logging-activities-on-mvc-sites.md).
- MVC – New _Kentico.Activities.Web.Mvc_ integration package that provides an API for logging of the external search and page related activities. See [Enabling tracking of activities on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/implementing-on-line-marketing-features-on-mvc-sites/logging-activities-on-mvc-sites/enabling-tracking-of-activities-on-mvc-sites.md).
- MVC – New _Kentico.ContactManagement_ integration package that provides an API for tracking [contacts](https://docs.kentico.com/display/K10/Contact+management) on MVC websites. See [Tracking contacts on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/implementing-on-line-marketing-features-on-mvc-sites/tracking-contacts-on-mvc-sites.md).
- MVC – New _Kentico.CampaignLogging.WebMvc_ integration package that allows tracking of campaign conversions for pages hosted on external MVC sites. See [Tracking campaigns on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/implementing-on-line-marketing-features-on-mvc-sites/tracking-campaigns-on-mvc-sites.md).
- MVC – The _Kentico.Newsletters_ integration package now contains improvements to the subscription management API. See [Email marketing on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/implementing-on-line-marketing-features-on-mvc-sites/email-marketing-on-mvc-sites.md).
- MVC – New _Kentico.Newsletters.Web.Mvc_ integration package that provides tracking of marketing emails on MVC sites. See [Tracking marketing emails on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/implementing-on-line-marketing-features-on-mvc-sites/email-marketing-on-mvc-sites/tracking-marketing-emails-on-mvc-sites.md).
- MVC – Improved the API for creating content personalization conditions within MVC code. See [Content personalization on MVC sites](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/implementing-on-line-marketing-features-on-mvc-sites/content-personalization-on-mvc-sites.md).

### E-commerce

- MVC – New _Kentico.Ecommerce_ integration package that provides an API for developing and running on-line stores. See [Developing on-line stores in MVC](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/developing-on-line-stores-in-mvc.md).

## Fixed issues (major)

- WYSIWYG editor – UI personalization can now be applied to custom buttons added onto the editor toolbar. See [Personalizing the editor toolbars and buttons](https://docs.kentico.com/k10/managing-website-content/configuring-the-environment-for-content-editors/configuring-the-editor/personalizing-the-editor-toolbars-and-buttons.md).
- Staging – Staging tasks representing resource strings no longer include translations for individual cultures (the text values of strings). The translation data is only included when synchronizing separate staging tasks of the "resource translation" type. This change prevents problems with resource string updates overwriting translations on the target instance.
- Staging – The on-line marketing objects such as A/B tested marketing emails and A/B tested page variants can be staged now. The status of the staged A/B tested marketing emails changes to _Draft_.
- Fields – The maximum size of all data fields (columns) used to store email address values was standardized to 254 characters for single addresses and 998 characters for fields expecting multiple addresses. The change represents a size increase for most email fields and a reduction for several fields that originally had a very large size.
- Macros – The macro collections _GlobalObjects.Scores, GlobalObjects.Classes, GlobalObjects.ScheduledTasks, SiteObjects.SKUs_ are now correctly accessible through the macro engine. A name conflict caused other identically named macro collections to take priority during evaluation. This made macros from these collections behave in a non-deterministic way.
- Users – The system now performs validation of user names on the API level, in addition to input validation in registration web parts and the administration interface. As a result, user name validation applies when creating or updating users programatically, for example in custom code or through REST requests.

> **Info:** Additionally, all bugs fixed within the Kentico 9 hotfixes are included in version 10. See the [Bugtracker on DevNet](http://devnet.kentico.com/download/hotfixes) for a full list (click **Fixed Bugs**).

## &#x20;Breaking changes (functionality, data structure, API)

### Platform

- The [forgotten password functionality](https://docs.kentico.com/k10/securing-websites/designing-secure-websites/securing-user-accounts-and-passwords/forgotten-password.md) of the administration interface sign-in page and the _Logon form_ web part now always requires users to submit their email address. It is no longer possible to reset passwords by entering a user name. The _Reset password requires email approval_ option in _Settings -> Security & Membership -> Passwords_ has been removed. Password reset now always requires email approval. The _Send email with reset password_ option in _Settings -> Security & Membership -> Passwords_ has been removed.
- The _Submit support issue_ application was removed. Instead, you can use the _Submit a question or bug_ link available on the help toolbar, which can be opened by clicking the question mark icon in the header of the administration interface.
- Many of the default [extender classes](https://docs.kentico.com/k10/custom-development/creating-custom-modules/creating-extenders-for-module-interface-pages.md) that adjust administration interface pages were moved from public files in the Kentico project's _App\_Code_ (or _Old\_App\_Code)_ folder into compiled libraries. If you have modified one of the moved extender files, your customizations will no longer apply after the upgrade. See the [upgrade instructions](https://docs.kentico.com/k10/installation/upgrading-to-kentico-10.md#customized-extender-files) to learn how to re-apply extender customizations in such scenarios.
- The _CMSApp\_AppCode_ project was removed from web application installations. All files are moved into the main _CMSApp_ project. For customizations, use the _CMSApp_ project or custom Class Library projects instead. See the [upgrade instructions](https://docs.kentico.com/k10/installation/upgrading-to-kentico-10.md#customizations-in-the-cmsapp_appcode-project) for more information.
- The AD import utility is no longer part of the default Kentico installation. The utility is now managed as an open source community project and can be downloaded from the [Kentico ADImport GitHub page](https://github.com/Kentico/ADImport).
- All AngularJS libraries used by the Kentico administration interface were updated to version 1.5.5.
- Web farm server objects are no longer supported by the cloning, [export/import](https://docs.kentico.com/k10/deploying-websites/exporting-and-importing-sites.md) and [staging](https://docs.kentico.com/k10/deploying-websites/content-staging.md) features.
- The _CMSModuleLoader_ partial class and the _CMSLoaderAttribute_ class are now obsolete. The recommended approach for scenarios where you need to run custom code during the application's initialization is to create and register [custom module classes](https://docs.kentico.com/k10/custom-development/creating-custom-modules/initializing-modules-to-run-custom-code.md).
- The system no longer evaluates macros recursively by default (if the result of a macro contains further macro expressions, they are not resolved).
  - If the result of a macro contains localization expressions in the _{$ResourceStringKey$}_ format, these are automatically resolved recursively.
  - You can explicitly control recursive resolving for individual macro expressions by adding the _recursive_ parameter.

    - Set the parameter to _true_ to force recursive resolving: _{% macroName|(recursive)true %}_
    - If you have a custom macro resolver, you can configure recursion in the code: _MacroResolver.Settings.AllowRecursion = true_
  - The _(notrecursive)_ macro parameter is now obsolete.
- The _Cache_ macro method now always adds the _macrocachekey|_ prefix to the name of the cache key that stores the result of the specified macro expression. The prefix prevents conflicts with other cache keys used by the system.
- The display name of forms can no longer be localized.
- Kentico API executed within the body of [automated tests](https://docs.kentico.com/k10/custom-development/writing-automated-tests.md) that inherit from the _CMS.Tests_ base classes now automatically has additional logging operations disabled by default. For example, this includes logging of [staging tasks](https://docs.kentico.com/k10/deploying-websites/content-staging.md), [web farm synchronization tasks](https://docs.kentico.com/k10/configuring-kentico/optimizing-website-performance/setting-up-web-farms.md), etc. To run these additional operations within tests, you need to explicitly enable them for blocks of code using the corresponding properties of _CMSActionContext._
- Th&#x65;_&#x41;pp\_Data/mimetypes.txt_ file used to register custom media types was removed. To register custom media types in Kentico 10, use the _MimeTypeHelper.AddRule(string mimetype, string extension)_ API functionality.
- The backward compatibility redirection to the administration interface from the _/cmssitemanager_ and _/cmsdesk_ URL paths was removed.
- The _Kentico.Web.Mvc_ MVC [integration package](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/starting-with-mvc-development/installing-kentico-integration-packages.md)'s logic for generating preview URLs, working with attachments, and managing media library files was transferred to a new _Kentico.Content.Web.Mvc_ integration package. To continue using this functionality, you have to install the _Kentico.Content.Web.Mvc_ integration package into your MVC solution.
- The _DB object schema_ setting was removed (originally in _Settings -> System_). Any problems with database object schemas need to be fixed manually on the database level, for example using SQL Server Management Studio.
- The _Report selector_ form control was removed. If necessary, the _Report selector with parameters_ control can be used instead.
- It is no longer possible to directly [impersonate](https://docs.kentico.com/k10/managing-users/user-management/impersonating-a-different-user.md) a different user while impersonating another user. You first need to cancel the first impersonation.

### Content management

- Favicons can now be set per site. If you used a custom _favicon.ico_ file for your project, it will be renamed to _favicon.ico.deleted_ and you need to [set the favicon file](https://docs.kentico.com/k10/configuring-kentico/managing-sites/setting-a-site-favicon.md) manually in the _Settings_ application.
- Processing of page staging tasks now raises [events](https://docs.kentico.com/k10/custom-development/handling-global-events.md) from the [DocumentEvents](https://docs.kentico.com/k10/custom-development/handling-global-events/reference-global-system-events.md#documentevents) class by default. If you need to disable raising of the _DocumentEvents_ when page tasks are processed, set the _CMSStagingUseTreeCustomHandlers_ web.config key to _false._
- [Events](https://docs.kentico.com/k10/custom-development/handling-global-events.md) from the [DocumentEvents](https://docs.kentico.com/k10/custom-development/handling-global-events/reference-global-system-events.md#documentevents) class are now raised during a site import.
- The system no longer converts URLs to absolute format in content sent for translation using the [translation services](https://docs.kentico.com/k10/multilingual-websites/configuring-translation-services.md). This prevents possible issues when, for example, synchronizing the translated content to a different domain by staging. If you need to use absolute URLs in translated content, set the _CMSTranslationsUseAbsoluteLinks_ web.config key to _true._
- The _AbstractHumanTranslationService_ base class definition was changed. If you have any custom human translation services inheriting from _AbstractHumanTranslationService_ base class, you need to update the code of the service.

  - The _IsLanguageSupported_ method used for setting up supported directions of translation was replaced by the _IsSourceLanguageSupported_ and _IsTargetLanguageSupported_ methods.
  - The _DownloadCompletedTranslations_ method now has a required string parameter that provides the site name.
- Namespace of page type and custom table objects is now included in the namespace names of [generated classes](https://docs.kentico.com/k10/developing-websites/developing-sites-using-asp-net-mvc/developing-mvc-applications/generating-classes-for-kentico-objects.md) to avoid ambiguity when referencing the classes in your projects. Classes generated for page types and custom tables are now in the _CMS.DocumentEngine.Types._ and _CMS.CustomTables.Types._ format respectively. If you used a generated class and re-generate the class code, you need to update the using statements in your projects manually.
- The _InCategory_ method used for filtering page data in custom code was removed. To retrieve pages in specific categories, you need to use the _InCategories_ and _InEnabledCategories_ methods.
- The _AttachmentInfo_ class used for accessing page attachment data was replaced by the new _DocumentAttachment_ class.

  - The _Attachment_ parameter of page attachment event handlers was changed. The _Attachment_ parameter is now of the _DocumentAttachment_ object type for all page attachment event handlers, i.e., _SaveAttachment_, _DeleteAttachment_, _SaveAttachmentVersion_, and _RemoveAttachmentVersion_.
  - The DocumentHelper methods for working with page attachments (for example, _AddAttachment_, _GetAttachment_, _MoveAttachment_, etc.) no longer require the parameter to specify a _TreeProvider_ object. The information is now taken from the page instance.
- The _CSS.WebPartLayouts_ and _GlobalObjects.WebPartLayouts_ macros were removed. To access web part layouts and their CSS stylesheets via macro engine, you need to use the _GlobalObjects.WebParts\[""].WebPartLayouts\[""]_ and _GlobalObjects.WebParts\[""].WebPartLayouts\[""].WebPartLayoutCSS_ macros respectively.
- The _CSS styling applied to calendar web parts (Calendar, Event calendar)_ and controls _(BasicCalendar, CMSCalendar)_ was changed. These web parts and controls inherit from the [ASP.NET Calendar](https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.calendar%28v=vs.110%29.aspx) class and now render a default inline CSS style for the selected day. If you need to override the inline styling, use the _!important_ keyword in your CSS stylesheets.
- The _HTML editor CSS stylesheet_ property was removed from the _Editable text_ web part. The web part now uses the stylesheet set via the _Editor CSS stylesheet_ site property to style the HTML (WYSIWYG) editor.
- The _Show pan control_ property was removed from Google Maps web parts _(Basic Google maps, Google maps,_ and _Static Google maps)._ Google deprecated its _panControl_ and _panControlOptions_ settings in Google Maps API.
- The _Upload file_ form control can no longer be used for page type fields. If you used the _Upload file_ form control in page type fields, it will be replaced by the _Direct uploader_ form control.
- The _cms.blog_ object type was removed. If you used a custom UniSelector for selecting blogs, you have to manually change its object type to _cms.document.cms.blog_ or use the _BlogHelper.BLOG\_OBJECT\_TYPE_ constant in the code.
- The _BizForm_ server control that displays [on-line forms](https://docs.kentico.com/k10/managing-website-content/forms.md) was moved from the _CMS.OnlineForms_ library to _CMS.OnlineForms.Web.UI_. If you have any custom pages or components that use the control, we recommend checking that they work correctly after upgrading.
- The _CMSContent_ server control, which was used for placing multiple placeholders in a page, was marked as obsolete without replacement.
- The _LanguageDataSource_ server control now replaces all query string parameters from the returned URLs with the _lang_ query string parameter.
- The code name of the _Device profiles_ module was changed from _CMS.DeviceProfile_ to _CMS.DeviceProfiles._ The change also affects related module folders within the project, such as _CMS\CMSModules\DeviceProfiles_.
- The data of [smart search](https://docs.kentico.com/k10/configuring-kentico/setting-up-search-on-your-website.md) results for pages no longer contains the _imageClass_ field. If you need to display MIME type icons for file pages in your search transformations, use the _GetFileIconClass(Eval("documentExtensions"))_ method instead. See [Displaying search results using transformations](https://docs.kentico.com/k10/configuring-kentico/setting-up-search-on-your-website/displaying-search-results-using-transformations.md).
- The _Parent_ property of message board, blog comment, blog post subscription, personalization variant, MVT variant, and MVT combination objects in macros and the API no longer returns full data of the TreeNode class. Such _Parent_ properties now return a partial set of data, typically only the data of a specific language version of the parent page.

### REST service

- The [Kentico REST service](https://docs.kentico.com/k10/integrating-3rd-party-systems/kentico-rest-service.md) no longer supports Forms authentication. All REST requests must now be authenticated using Basic authentication (HTTP header) or Hash parameter authentication. For manual testing of REST requests in a browser, most browsers provide a dialog where you can type in the credentials for Basic authentication.
- The REST service no longer allows retrieval of TypeInfo data (describing the general behavior and properties of specific object types). The _/typeinfo/_ resource path is no longer available.

### On-line marketing

- The functionality for logging bots as Kentico contacts is no longer supported. The _CMSEnableContactBots_ web.config key was removed.
- On-line marketing macros were moved from the _OnlineMarketingContext_ namespace to the _ContactManagementContext_ namespace. For example, the following macro expression: _OnlineMarketingContext.CurrentContact.Orders.Exists(OrderTotalPrice > 500)_ should now be called as: _ContactManagementContext.CurrentContact.Orders.Exists(OrderTotalPrice > 500)_
- The system now recalculates contact scores, contact groups, personas and marketing automation triggers with a slightly larger delay after logging activities (10 seconds by default). You can adjust the recalculation interval using the _CMSProcessContactActionsInterval_ web.config key.
- The new _CMSLandingPageLoaded_ cookie is now used to determine when the _Landing page_ activity should be logged for the current visitor. The cookie key expires after 20 minutes.
- The _Subscription to a newsletter_ activity now contains the ID of a subscribed recipient in the _ActivityItemDetailID_ field.
- The _Abuse report_, _Accept initiated chat request_, _Accept automatically initiated chat request_, _Chat request support_, _Chat request support using offline form_, _Customer registration_, _Joining a group_, _Leaving a group_ and _User contribution_ activity types were deleted. If you need to track these activities, it is possible to [create them as custom activity types](https://docs.kentico.com/k10/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-activities/logging-custom-activities-through-the-api.md). They will still remain in your database and the corresponding activity type will be marked as a custom activity type.
- The _Activity 'Leaving a group' performed for group_ and _Activity 'Joining a group' performed for group_ macro rules were deleted.
- The _Activity UR&#x4C;_&#x66;ield in activities now uses absolute paths including the protocol and domain name. Relative paths are no longer accepted. This change modifies creating rules for [scoring](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/contact-management/scoring-contacts.md) and [personas](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/personas.md).
- Notifications sent at specific scores now use a global email template with the _scoring.notification_ code name.
- Sender email address for notifications sent at specific scores is now set globally in the _Settings -> System -> Send email notifications from_ setting.
- When defining scoring or persona rules based on activities, the following fields are no longer available in the configuration of the activity details:
  - _Query string – for Page visit_ and _Landing page_ activities.
  - _Search provider_ – for _External search_ and _Internal search_ activities. Can be replaced by adding conditions for the _URL referrer_ field.
  - _Search keyword_ – for _External search_ and _Internal search_ activities. Can be replaced by changing the _Rule type_ to _Macro_ and using the _Contact has searched for specified keywords_ macro rule in the condition.

#### Campaigns

- Conversions used by campaigns and personalization (A/B and MVT tests) are now used only for personalization. Campaigns use a new type of conversions based on activities.

  - If upgraded from Kentico 9, campaign reports from older Kentico versions are completely removed due to major changes in the campaign architecture. The upgrade procedure also stops all running campaigns and removes their reports.
  - Related database columns and tables were modified to reflect this change, see the [Database](#database) section below.
  - You can find more information about conversions used by A/B tests and MVT tests under the name _custom conversions_. For example, [Logging custom conversions on your website](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/web-analytics/logging-custom-conversions-on-your-website.md).
- Campaign reports were removed from the _Reporting_ application. Reports from campaigns are available directly only in the _Campaigns_ application.

  - The upgrade procedure does not remove the reports in the _Reporting_ application but only marks them as obsolete. You can delete them if wanted.
- The _Campaign hits_ widget for the _Marketing overview_ dashboard was removed along with the _campaign.dayreport.graph_ chart that was displayed by the widget without any replacement.
- When a visitor comes to a page through a running campaign with two different UTM sources, the second visit is no longer logged to the first UTM source. In Kentico 10, if multiple visits use different sets of UTM parameters, each visit with a different set of UTM parameters is logged separately.

#### Contact management

- The _Account status_, _Contact status_ and _Contact role_ tabs under the _Configuration_ tab in the _Contact management_ application now use a page-template based UI. If you have customized the related ASPX files, the changes will no longer apply to the new UI.
- Contacts, accounts, account statuses, contact statuses, contact roles and contact groups are global objects now, which caused the following changes:

  - The _Global data_ setting category with the following settings was removed from _Settings_ -> _On-line marketing_ -> _Contact management_ -> _Global data & merging_: 

    - _Allow global contacts_; _Automatically create global contact for user;_ \*Automatically create unique global contacts from site contacts;\*_When merging global contacts, select; Allow global accounts_; _Allow global contact groups_ and _Allow global configuration._
  - The following settings are global only now:

    - All _Inactive contacts_ settings under _Settings_ -> _On-line marketing_ -> _Contact management_ -> _Inactive contacts_.
    - All _Salesforce.com_ settings under _Settings_ -> _Integration -> Salesforce.com_.
  - The _SalesForce replication_ scheduled task is no longer site-specific, but global only.
  - The _DisplaySiteOrGlobal_ property was removed from the _Contact status selector_ and _Account status selector_ form controls.
  - It is only possible to create a global email template of the _Automation_ email type.
  - It is no longer possible to import account statuses, contact statuses and contact roles from the old import packages.
  - The _Contact has opened specified email campaign in the last X days_, _Contact has visited the specified page in the last X days_, _Contact has voted in the specified poll_, _Contact is in community group_, _Contact is in role_ and _Contact is subscribed to a specified email campaign_ macro rules no longer use code name parameters, but GUIDs.

    - The _Contact has opened specified email campaign in the last X days_ macro rule was renamed to _Contact has opened the specified email feed in the last X days._
    - The _Contact is subscribed to a specified email campaign_ macro rule was renamed to _Contact is subscribed to the specified newsletter._
  - The _Opt-out_ _list_ setting was removed from the _General_ category under _Settings_ -> _On-line marketing_ -> _Email marketing_. Unsubscriptions from all email campaigns and newsletters now remove recipients from all marketing emails on all sites.
- The _Contact management_ module is now a part of the Kentico system and can no longer be separated by removing the _On-line marketing_ module. As a result, [contacts](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/contact-management/working-with-contacts.md) and static [contact groups](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/contact-management/segmenting-contacts-into-contact-groups.md) are available in the Kentico CMS edition.
- The _Log IP addresses_ setting was removed from the _General_ category under _Settings_ -> _On-line marketing_ -> _Contact management_. After applying [hotfix 9.0.13](http://devnet.kentico.com/download/hotfixes) or newer, the setting's name changed to _Log IP addresses and user agents_.

  - The contact's IP address can still be found on the _Activities_ tab when editing a contact in the _Contact management_ application.
  - The information on browsers used by all visitors can still be found in _Browser capabilities -> Browser types_ in the _Web analytics_ application.
  - It is no longer possible to clone IP addresses and user agents in _Clone contact_ dialog in the _Contact management_ application.
- By default, the system only merges contacts automatically, which caused the following changes:

  - It is no longer possible to merge accounts and split the merged accounts in the _Contact management_ application.
  - It is no longer possible to manually merge contacts and split the merged contacts in the _Contact management_ application.
  - It is no longer possible to clone the merged accounts in the _Clone account_ dialog and the merged contacts in the _Clone contact_ dialog.
  - The _Automatic merging of contacts_ setting category with the following settings was removed from _Settings_ -> _On-line marketing_ -> _Contact management_ -> _Global data & merging_:

    - _Merge contacts for identical E-commerce customers_; _Merge contacts for identical Email campaign subscribers_; _Merge contacts with identical email addresses_ and _When a visitor has more contacts, use_.
- The permission model for the _Contact Management_ module was simplified. Permissions for contacts, contact groups, and accounts are now merged into new _Read_ and _Modify_ permissions.

#### Email marketing

- The display name of email campaigns and newsletters can no longer be localized.
- The obsolete _Unsubscription request_ web part was removed. To allow users to cancel their subscription, place the _UnsubscribeLink_ macro {%UnsubscribeLink|(resolver)subscriber%} on the source page of the marketing email.
- It is no longer possible to add personas, roles, subscribers, and users as recipients to a newsletter. You can now only add contacts and contact groups as newsletter recipients. Newsletter recipients other than contacts and contact groups are removed from the system during [upgrade](https://docs.kentico.com/k10/installation/upgrading-to-kentico-10.md#upgradingtokentico10-keepingoriginalsubscribers).
- It is no longer possible to enable resending of email campaigns and newsletters in the _Email marketing_ application. We recommend that you clone the marketing email that you want to send again.

### E-commerce

- Customers' preferred currency, payment method and shipping option are no longer saved into the database but are set based on their last order.
  - Related database columns were modified to reflect this change, see the [Database](#database) section below.
  - For customizing these preferred objects, see [Customizing customers' preferred currency, payment method and shipping option](https://docs.kentico.com/k10/e-commerce-features/customizing-and-developing-your-store/customer-related-customizing/customizing-customers-preferred-currency-payment-method-and-shipping-option.md).
- The relationship between shipping options and payment methods was removed.

  - Since version 10, you cannot decide which shipping options are offered for specific payment methods out of the box.
  - The _GetPaymentOptionsForShippin&#x67;_&#x6D;ethod from the _PaymentOptionInfoProvide&#x72;_&#x63;lass was therefore also removed.
  - To achieve the same functionality, see [Making payment methods dependent on shipping options](https://docs.kentico.com/k10/e-commerce-features/customizing-and-developing-your-store/payment-related-customizing/making-payment-methods-dependent-on-shipping-options.md).
- Flagging addresses as shipping, billing or company addresses was removed. Also, disabling addresses was removed.
  - Since version 10, all addresses are enabled and can be used for all purposes.
  - The _Customer address_ web part now displays all addresses.
  - Related database columns and API methods were modified to reflect this change, see the [Database](#database) and API sections below.
- The _Customers_ application now displays all customers (both global and site customers from all sites).
- Store managers can no longer manage only specific [departments](https://docs.kentico.com/k10/e-commerce-features/managing-your-store/products/categorizing-products/departments.md) because the functionality was not generally used. The related _Access all departments_ e-commerce permission was also removed without any replacement.
- The _EcommerceTransformationFunctions_ class was moved to the _CMS.Ecommerce.Web.UI_ library/namespace. If your website uses ASCX [transformations](https://docs.kentico.com/k10/developing-websites/loading-and-displaying-data-on-websites/writing-transformations.md) that call methods from this class, you need to update the namespace in the transformation code.
- Attachments of site invoices were removed. You can use files, for example, from the [media library](https://docs.kentico.com/k10/managing-website-content/working-with-files/media-library-files.md).
- The _Copy from global_ action that copied global settings to site settings is no longer available. The action was removed from [currencies](https://docs.kentico.com/k10/e-commerce-features/configuring-your-store/configuring-currencies.md), [tax classes](https://docs.kentico.com/k10/e-commerce-features/configuring-your-store/configuring-taxes.md), [exchange rates](https://docs.kentico.com/k10/e-commerce-features/configuring-your-store/configuring-currencies/configuring-exchange-rates.md), [product internal and public statuses](https://docs.kentico.com/k10/e-commerce-features/managing-your-store/products/product-statuses.md), and [order statuses](https://docs.kentico.com/k10/e-commerce-features/managing-your-store/orders/order-statuses.md).
- It is no longer possible to recalculate prices when changing the main currency.
- The _Address selector_ form control was removed without any replacement. The form control was not used by default since version 8.
- [Customers](https://docs.kentico.com/k10/e-commerce-features/managing-your-store/customers.md) can no longer be subscribed to [newsletters ](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/email-marketing.md)from the _Customers_ application. Customers can be subscribed by [adding their contacts](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/email-marketing/managing-marketing-email-recipients.md) when editing a newsletter in the _Email marketing_ application.

### Social & Community

- The approach for creating custom forum layouts in the _\~/CMSModules/Forums/Controls/Layouts_ folder was changed. See [Customizing forum design](https://docs.kentico.com/k10/community-features/forums/customizing-forum-design.md) for more information.
- Custom content rating appearance modes defined through controls in the _\~/CMSAdminControls/ContentRating/Controls/_ folder are no longer supported. To create content rating components with a modified appearance, you now need to develop a custom copy of the _Content rating_ web part.

### Database

#### General

- The default [database collation](http://technet.microsoft.com/en-us/library/ms143726.aspx) of new Kentico databases is now **Latin1\_General\_CI\_AS**. You may need to change the collation when migrating databases to [Microsoft Azure SQL](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-technical-overview), which requires the _SQL\_Latin1\_General\_CP1\_CI\_AS_ collation. The collation is not changed when upgrading existing databases.
- The _UserIsEditor, UserIsGlobalAdministrator_ and _UserSiteManagerDisabled_ columns were removed from the _CMS\_User_ database table. The privilege level of users is now stored as an integer value in the new _UserPrivilegeLevel_ column.
- The _PageTemplateIsPortal_ column was removed from the _CMS\_PageTemplate_ database table. Instead, you can identify portal templates by checking the _PageTemplateType_ column for the value _'portal'_.
- The _Staging\_SyncLog_ database table was removed. Staging task error messages can instead be loaded from the _SynchronizationErrorMessage_ column of the _Staging\_Synchronization_ table.
- The _TagCodeName_ column was removed from the _CMS\_Tag_ database table.

#### E-commerce

- The _CustomerEnabled_ column was removed from the _COM\_Customer_ database table without any replacement. The column has not been used by default since version 8.
- The _CustomerPreferredCurrencyID_, _CustomerPreferredPaymentOptionI&#x44;_&#x61;nd _CustomerPreferredShippingOptionID_ columns were removed from the _COM\_Customer_ database table without any replacement because customers' preferred currency, payment method and shipping option are no longer saved in the database.
- The _AddressIsShipping_, _AddressIsBilling_ and _AddressIsCompany_ columns were removed from the _COM\_Address_ database table without any replacement because flagging addresses as shipping, billing and company addresses is no longer supported.
- The _AddressEnabled_ column was removed from the _COM\_Address_ database table without any replacement because enabling and disabling addresses is no longer supported.
- The length of the following database columns was reduced to _26_:
  - _COM\_Customer.CustomerPhone_
  - _COM\_OrderAddress.AddressPhone_
  - _COM\_Address.AddressPhone_
- The _UserPreferredCurrencyID_, _UserPreferredPaymentOptionID_ and _UserPreferredShippingOptionID_ columns were removed from the _CMS\_UserSite_ database table without any replacement because users' preferred currency, payment method and shipping option are no longer saved in the database.
- The _COM\_UserDepartment_ database table was removed without any replacement as the user–department relationship is no longer available.
- The _CategoryAllowEmpty_ column was removed from the _COM\_OptionCategory_ database table without any replacement. The column was not used by default.
- The _COM\_PaymentShipping_ database table was removed without any replacement. The table was used for binding of payment methods and shipping options, which was removed in version 10.
- The _ShippingOptionCharge_ column was removed from the _COM\_ShippingOption_ database table without any replacement. The column was not used by default since version 9.
- The _CategoryOrder_ column was removed from the _Reporting\_ReportCategory_ database table, and the following category object views: \*View\_CMS\_PageTemplateCategoryPageTemplate\_Joined,\*_View\_CMS\_WebPartCategoryWebpart\_Joined, View\_CMS\_WidgetCategoryWidget\_Joined, View\_Reporting\_CategoryReport\_Joined._ The column was not used by the default functionality.

#### On-line marketing

- The _RuleSiteID_ column was removed from the _OM\_Rule_ database table without any replacement because the objects presented in the table are no longer site-specific, but global only.
- The _ScoreSiteID_ column was removed from the _OM\_Score_ database table without any replacement because the objects presented in the table are no longer site-specific, but global only.
- The _PersonaSiteID_ column was removed from the _Personas\_Persona_ database table without any replacement because the objects presented in the table are no longer site-specific, but global only.
- The _TriggerSiteID_ column was removed from the _CMS\_ObjectWorkflowTrigger_ database table without any replacement because the objects presented in the table are no longer site-specific, but global only.
- The _AccountStatusSiteID_ column was removed from the _OM\_AccountStatus_ database table without any replacement because the objects presented in the table are no longer site-specific, but global only.
- The _ContactStatusSiteID_ column was removed from the _OM\_ContactStatus_ database table without any replacement because the objects presented in the table are no longer site-specific, but global only.
- The _ContactRoleSiteID_ column was removed from the _OM\_ContactRole_ database table without any replacement because the objects presented in the table are no longer site-specific, but global only.
- The _ContactGroupSiteID_ column was removed from the _OM\_ContactGroup_ database table without any replacement because the objects presented in the table are no longer site-specific, but global only.
- The _Analytics\_ConversionCampaignSource_ database table was removed. Conversions for campaigns are now different from the original conversions.
- The _OM\_IP_ and _OM\_UserAgent_ database tables were removed without any replacement.
- The _OM\_PageVisit_ and _OM\_Search_ database tables were removed. The records are now stored as standard activities in the main _OM\_Activity_ table.
  - The _OM\_PageVisit_ table's _PageVisitABVariantName_ and _PageVisitMVTCombinationName_ columns are replaced by the new _ActivityABVariantName_ and _ActivityMVTCombinationName_ columns in _OM\_Activity_.
  - The values originally stored in the _OM\_Search.SearchKeywords_ column are saved in the _OM\_Activity.ActivityValue_ column.
  - The values originally stored in the _OM\_Search.SearchProvider_ column can be determined based on the value of the _OM\_Activity.ActivityURLReferrer_ column.
- The following columns were removed from the _OM\_Contact_ database table without any replacement:

  - _ContactIsAnonymous_ – It is possible to find out whether a contact is anonymous by checking that there is no user assigned to the contact in the _OM\_Membership_ table.
  - _ContactSiteID –_ Contacts are no longer site-specific, but global only.
  - _ContactGlobalContactID _–__ Contacts are no longer site-specific, but global only.
  - _ContactMergedWithContactID_ – Manual contact merging and splitting are no longer supported.
  - _ContactMergedWhen_– Manual contact merging and splitting are no longer supported.
  - _ContactTitleAfter_ – The contact editing interface no longer contains the field for collecting the _Title after_ data.
  - _ContactTitleBefore_ – The contact editing interface no longer contains the field for collecting the _Title before_ data.
  - _ContactHomePhone_ – The contact editing interface no longer contains the field for collecting the _Home phone_ data.
  - _ContactSalutation_ – The contact editing interface no longer contains the field for collecting the _Salutation_ data.
  - _ContactWebSite_ – The contact editing interface no longer contains the field for collecting the _Web URL_ data.
  - _ContactLastLogon_ – The system no longer displays the contact's last logon in the contact editing interface.
  - _ContactAddress2_ – The contact editing interface no longer contains the field for collecting the _Address 2_ data.
- The following columns were removed from the _OM\_Account_ database table without any replacement:

  - _AccountSiteID_ – Accounts are no longer site-specific, but global only.
  - _AccountGlobalAccountID_ – Accounts are no longer site-specific, but global only.
  - _AccountMergedWithAccountID_ – Account merging and splitting are no longer supported.
- The following columns were removed or renamed in the _OM\_Activity_ database table:
  - _ActivityGUID_ – removed
  - _ActivityOriginalContactID_ – removed
  - _ActivityActiveContactID_ – renamed to _ActivityContactID_
- The _OriginalContactID_ column was removed, and the _ActiveContactID_ column was renamed to _ContactID_ in the _OM\_Membership_ database table.
- The _EmailUserID_ column was removed from the _Newsletter\_Emails_ database table without any replacement. The column was used for identifying users that were added to newsletters as recipients, which is no longer supported.
- The _UnsubscriptionSiteID_ column was removed from the _Newsletter\_Unsubscription_ database table without any replacement because unsubscriptions from all email campaigns and newsletters now remove recipients from all email feeds on all sites.
- The following columns were removed or renamed in the _Newsletter\_Newsletter_ database table:
  - The _NewsletterType_ column was renamed to _NewsletterSource_ because the column distinguishes between template-based and page-based newsletters.
  - The _NewsletterEnableResending_ column was removed without any replacement because it is no longer possible to enable resending of newsletters and email campaigns.

## &#x20;API

- The following table summarizes _**the most significant**_ changes made to public API namespaces/libraries in Kentico 10:

  | Old namespace            | New namespace                         | Change          | Comment                                                                                                                                                                                                                                                                                                                                                                                         |
  | ------------------------ | ------------------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | CMS.ApplicationDashboard | CMS.ApplicationDashboard.Web.UI       | Renamed         | You need to update your code if you use the API to [Display data on application dashboard tiles](https://docs.kentico.com/k10/custom-development/miscellaneous-custom-development-tasks/displaying-data-on-application-tiles.md).                                                                                                                                                               |
  | CMS.CKEditor             | CMS.CKEditor.Web.UI                   | Renamed         | Contains components and API related to the [WYSIWYG editor](https://docs.kentico.com/k10/managing-website-content/configuring-the-environment-for-content-editors/configuring-the-editor.md).                                                                                                                                                                                                   |
  | CMS.Controls             | CMS.DocumentEngine.Web.UI             | Fully moved     | Includes the [Kentico controls](https://docs.kentico.com/k10/references/kentico-controls.md) used to display content and related web form API.                                                                                                                                                                                                                                                  |
  | CMS.EcommerceProvider    | CMS.Ecommerce.Web.UI<br>CMS.Ecommerce | Separated       | Most of the _CMS.EcommerceProvider_ classes can now be found in the new _CMS.Ecommerce.Web.UI_ library and namespace. Some were moved to _CMS.Ecommerce._                                                                                                                                                                                                                                       |
  | CMS.ExtendedControls     | CMS.Base.Web.UI                       | Fully moved     | Includes extended versions of standard controls used within the Kentico interface and related API.                                                                                                                                                                                                                                                                                              |
  | CMS.FormControls         | CMS.FormEngine.Web.UI                 | Fully moved     | Includes web form components used by the Kentico form engine (for example the [form control](https://docs.kentico.com/k10/custom-development/developing-form-controls.md) base class).                                                                                                                                                                                                          |
  | CMS.Notifications        | CMS.Notifications.Web.UI              | Renamed         | Provides the API for [notifications](https://docs.kentico.com/k10/managing-website-content/configuring-the-environment-for-content-editors/setting-up-content-notifications.md) and [notification gateways.](https://docs.kentico.com/k10/custom-development/miscellaneous-custom-development-tasks/notifications-api/developing-custom-notification-gateways.md)                               |
  | CMS.OnlineMarketing      | CMS.ContactManagement                 | Partially moved | The API for [Contact management](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/contact-management.md) was moved from the _CMS.OnlineMarketing_ library and namespace into the new _CMS.ContactManagement_ library and namespace (for example, the move includes the _ContactInfo_ and _ContactInfoProvider_ classes).                        |
  | CMS.PortalControls       | CMS.PortalEngine.Web.UI               | Fully moved     | Includes web form components used by the Kentico portal engine ([web part](https://docs.kentico.com/k10/custom-development/developing-web-parts.md) base classes etc.).                                                                                                                                                                                                                         |
  | CMS.PortalEngine         | CMS.DeviceProfiles                    | Partially moved | The API for managing [Device profiles](https://docs.kentico.com/k10/developing-websites/developing-websites-for-mobile-devices/creating-device-profiles.md) was moved from the _CMS.PortalEngine_ library and namespace into the new _CMS.DeviceProfiles_ library/namespace (for example, the move includes the _DeviceProfileInfo_ and _DeviceProfileInfoProvider_ classes).                   |
  | CMS.Tests                | CMS.Tests                             | Moved to NuGet  | The _CMS.Tests_ library is no longer available within Kentico 10 projects and corresponding versions of the _Kentico.Libraries_ NuGet package. To access the API for creating automated tests, you now need to separately install the _Kentico.Libraries.Tests_ NuGet package.                                                                                                                  |
  | CMS.WebAnalytics         | CMS.Activities                        | Partially moved | The API for [logging of activities](https://docs.kentico.com/k10/on-line-marketing-features/managing-your-on-line-marketing-features/contact-management/tracking-contact-activities.md) was moved from the _CMS.WebAnalytics_ library and namespace into the new _CMS.Activities_ library and namespace (for example, the move includes the _ActivityInfo_ and _ActivityInfoProvider_ classes). |
- In general, API related to web form presentation logic was moved from the original libraries into new libraries with the _Web.UI_ suffix.
- Libraries containing controls and other web form presentation API were removed from the _Kentico.Libraries_ integration package. If you use any of the moved API in an external application, you need to install the new _Kentico.Libraries.Web.UI_ package.
- The __MediaHelper_, ScriptHelper_ and _UIHelper_ classes were moved from the _CMS.Helpers_ library into the new _CMS.Base.Web.UI_ library/namespace.
- The _CMS.Helpers.CSSHelper_ class was separated into the following classes:

  - _CMS.Helpers.CssHelper_
  - _CMS.Helpers.CssLinkHelper_
  - _CMS.Base.Web.UI.CssRegistration_
  - _CMS.Base.Web.UI.ModuleCssRegistration_
- The Stream and MemoryStream classes from the _CMS.IO_ namespace are now obsolete. All Kentico API that worked with these types now accepts the standard [Stream](https://msdn.microsoft.com/en-us/library/system.io.stream\(v=vs.110\).aspx) and [MemoryStream](https://msdn.microsoft.com/en-us/library/system.io.memorystream\(v=vs.110\).aspx) types from _System.IO_.
- The _URLHelper.ResolveUrl_ method no longer works for URLs that are relative to a specific control or page. To resolve these types of URLs, call the .NET [ResolveUrl](https://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl\(v=vs.110\).aspx) method of the given _Control_ or _Page_ class.
- The _URLHelper.Redirect_ and _RedirectPermanent_ methods no longer work for URLs that are relative to a specific control or page. To redirect to these types of URLs, you first need to resolve the URL by calling the .NET [ResolveUrl](https://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl\(v=vs.110\).aspx) method of the given _Control_ or _Page_ class.
- _CSSHelper_ methods that were moved to the _CssLinkHelper_ class and accept a URL parameter (for example _GetPhysicalCssUrl)_ no longer work for URLs that are relative to a specific page\*.\* You first need to resolve the URL by calling the .NET [ResolveUrl](https://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl\(v=vs.110\).aspx) method of the given _Control_ or _Page_ class.
- The _UIForm_ server control (class) was moved from the _CMS.FormControls_ library to _CMS.PortalEngine.Web.UI._
- The _CMSCheckoutWebPart_ class was moved from the Kentico web project to the _CMS.Ecommerce.Web.UI_ library and is no longer customizable.
- The _UserInfo.SetPrivilegeLevel_ method was removed. To assign a privilege level to user objects, set the new _SiteIndependentPrivilegeLevel_ property instead.
- The _URLRewritingEvents.PageNotFound_ [global event](https://docs.kentico.com/k10/custom-development/handling-global-events/reference-global-system-events.md) no longer supports the _Before_ and _After_ event types, only _Execute_. Additionally, the parameter type of the event's handler methods was changed to _URLRewriterPageNotFoundEventArgs._
- Code executed within handlers of the _ApplicationEvents.PostStart, RequestEvents.RunEndRequestTasks_ and _RequestEvents.Finalize_ [global events](https://docs.kentico.com/k10/custom-development/handling-global-events/reference-global-system-events.md) can now affect the response sent to clients (the system no longer calls the [HttpResponse.Flush](https://msdn.microsoft.com/en-us/library/system.web.httpresponse.flush%28v=vs.110%29.aspx) method before the events). If you use custom handlers for these events, verify that they work correctly and do not seriously affect the response times of requests (after you perform the upgrade).
- The _AutomationEvents.ProcessTrigger_ [global event](https://docs.kentico.com/k10/custom-development/handling-global-events/reference-global-system-events.md) no longer occurs separately for each processed contact, but instead periodically when bulk processing multiple contacts. The _Options_ property of the _AutomationProcessTriggerEventArgs_ event handler parameter is now a collection.
- The _RegExExcludeLogSource, RegExExcludeLogCode_ and _RegExExcludeLogDescription_ properties were removed from the _EventLogProvider_ class. To disable logging of specific types of events, prepare a custom handler for the new _EventLogEvents.LogEvent.Before_ event. See [Customizing event logging](https://docs.kentico.com/k10/custom-development/handling-global-events/customizing-event-logging.md).
- The _UnitAverageDiscountInMainCurrency_, _UnitAverageDiscount_ and _DiscountedUnits_ columns were removed from the _DiscountsTable_ property in the _ShoppingCartItemInfo_ class. The columns were intended for customization scenarios of discounts. Such scenarios were replaced with [Buy X Get Y discounts](https://docs.kentico.com/k10/e-commerce-features/managing-your-store/discounts/working-with-buy-x-get-y-discounts.md) introduced in Kentico 8.1.

  - _UnitAverageDiscountInMainCurrency_ – its value equals to _UnitDiscountInMainCurrency_
  - _UnitAverageDiscount_ – its value equals to _UnitDiscount_
  - _DiscountedUnits_ – its value equals to _Units_
- The _AddressInfoProvider.GetAddresses_ method's parameters were changed to _int customerId, bool onlyEnabled_ because flagging addresses as shipping, billing and company addresses is no longer supported.
- The _OnlineMarketingFunctions_ class was removed from the Kentico web project. You can replace the removed class by implementing a custom class that uses the functionality of the _ISubscriptionService_, _IUnsubscriptionProvider_ and _ActivityInfoProvider_ classes.
- The _SynchronizedColumns_ property of the _SynchronizationSettings_ class was removed. If you have a [custom module class](https://docs.kentico.com/k10/custom-development/creating-custom-modules.md) that used the _SynchronizedColumns_ property in its [type information](https://docs.kentico.com/k10/custom-development/creating-custom-modules/setting-the-type-information-for-module-classes.md), set the new _ExcludedStagingColumns_ property instead. The new property has the same general purpose, but the field names in the value have the opposite meaning (blacklist instead of a whitelist).
- Connection string name prefixes set by the _CMSConnectionContext_ class now apply when using the _CMSConnectionScope_ class to assign a connection string to blocks of code.
- When assigning a connection string to a block of code using the _CMSConnectionScope_ class, the system no longer switches the entire context of the application's static data (hash tables, cached data, etc.) for the given database.
- The following public static methods were removed from the _ShoppingCartInfoProvider_ class. If you used these methods, you can still customize the info provider class using their protected virtual methods (named as _Internal_).
  - _SetContentTaxRow_
  - _FilterContentTable_
  - _CreateShippingTaxRow_
  - _CreateShippingTaxesTable_
  - _CreateContentTaxRow_
  - _CreateContentTaxesTable_
  - _CreateContentTable_
  - _CreateContentRow_
- The following public static methods were removed from the _ShoppingCartItemInfoProvider_ class. If you used these methods, you can still customize the info provider class using their protected virtual methods (named as _Internal_).
  - _CreateDiscountsTable_
  - _CreateTaxesTable_
  - _CreateDiscountRow_
  - _CreateTaxRow_

> **Note:** Search the [API changes](http://devnet.kentico.com/documentation/api-changes/kentico-10) page on DevNet to find all possible breaking changes in the API.
