diff --git a/Avalonia.sln b/Avalonia.sln
index d6472503fe..484d7a4cde 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -202,6 +202,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlatformSanityChecks", "sam
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.ReactiveUI.UnitTests", "tests\Avalonia.ReactiveUI.UnitTests\Avalonia.ReactiveUI.UnitTests.csproj", "{AF915D5C-AB00-4EA0-B5E6-001F4AE84E68}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Controls.DataGrid", "src\Avalonia.Controls.DataGrid\Avalonia.Controls.DataGrid.csproj", "{3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
@@ -1845,6 +1847,30 @@ Global
{AF915D5C-AB00-4EA0-B5E6-001F4AE84E68}.Release|iPhone.Build.0 = Release|Any CPU
{AF915D5C-AB00-4EA0-B5E6-001F4AE84E68}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{AF915D5C-AB00-4EA0-B5E6-001F4AE84E68}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Release|iPhone.Build.0 = Release|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {3278F3A9-9509-4A3F-A15B-BDC8B5BFF632}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/build/CoreLibraries.props b/build/CoreLibraries.props
index d989e643b8..3efef8df80 100644
--- a/build/CoreLibraries.props
+++ b/build/CoreLibraries.props
@@ -3,6 +3,7 @@
+
diff --git a/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj b/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj
new file mode 100644
index 0000000000..6810463b7f
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Avalonia.Controls.DataGrid.csproj
@@ -0,0 +1,19 @@
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia.Controls/DataGrid/Collections/AvaloniaGroupDescription.cs b/src/Avalonia.Controls.DataGrid/Collections/AvaloniaGroupDescription.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/Collections/AvaloniaGroupDescription.cs
rename to src/Avalonia.Controls.DataGrid/Collections/AvaloniaGroupDescription.cs
diff --git a/src/Avalonia.Controls/DataGrid/Collections/AvaloniaSortDescription.cs b/src/Avalonia.Controls.DataGrid/Collections/AvaloniaSortDescription.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/Collections/AvaloniaSortDescription.cs
rename to src/Avalonia.Controls.DataGrid/Collections/AvaloniaSortDescription.cs
diff --git a/src/Avalonia.Controls/DataGrid/Collections/CollectionView.cs b/src/Avalonia.Controls.DataGrid/Collections/CollectionView.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/Collections/CollectionView.cs
rename to src/Avalonia.Controls.DataGrid/Collections/CollectionView.cs
diff --git a/src/Avalonia.Controls/DataGrid/Collections/ICollectionView.cs b/src/Avalonia.Controls.DataGrid/Collections/ICollectionView.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/Collections/ICollectionView.cs
rename to src/Avalonia.Controls.DataGrid/Collections/ICollectionView.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGrid.cs b/src/Avalonia.Controls.DataGrid/DataGrid.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGrid.cs
rename to src/Avalonia.Controls.DataGrid/DataGrid.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridBoundColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridBoundColumn.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridBoundColumn.cs
rename to src/Avalonia.Controls.DataGrid/DataGridBoundColumn.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridCell.cs b/src/Avalonia.Controls.DataGrid/DataGridCell.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridCell.cs
rename to src/Avalonia.Controls.DataGrid/DataGridCell.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridCellCollection.cs b/src/Avalonia.Controls.DataGrid/DataGridCellCollection.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridCellCollection.cs
rename to src/Avalonia.Controls.DataGrid/DataGridCellCollection.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridCellCoordinates.cs b/src/Avalonia.Controls.DataGrid/DataGridCellCoordinates.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridCellCoordinates.cs
rename to src/Avalonia.Controls.DataGrid/DataGridCellCoordinates.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridCheckBoxColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridCheckBoxColumn.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridCheckBoxColumn.cs
rename to src/Avalonia.Controls.DataGrid/DataGridCheckBoxColumn.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridClipboard.cs b/src/Avalonia.Controls.DataGrid/DataGridClipboard.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridClipboard.cs
rename to src/Avalonia.Controls.DataGrid/DataGridClipboard.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridColumn.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridColumn.cs
rename to src/Avalonia.Controls.DataGrid/DataGridColumn.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridColumnCollection.cs b/src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridColumnCollection.cs
rename to src/Avalonia.Controls.DataGrid/DataGridColumnCollection.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridColumnHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridColumnHeader.cs
rename to src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridColumns.cs b/src/Avalonia.Controls.DataGrid/DataGridColumns.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridColumns.cs
rename to src/Avalonia.Controls.DataGrid/DataGridColumns.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridDataConnection.cs b/src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridDataConnection.cs
rename to src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridDisplayData.cs b/src/Avalonia.Controls.DataGrid/DataGridDisplayData.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridDisplayData.cs
rename to src/Avalonia.Controls.DataGrid/DataGridDisplayData.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridEnumerations.cs b/src/Avalonia.Controls.DataGrid/DataGridEnumerations.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridEnumerations.cs
rename to src/Avalonia.Controls.DataGrid/DataGridEnumerations.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridError.cs b/src/Avalonia.Controls.DataGrid/DataGridError.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridError.cs
rename to src/Avalonia.Controls.DataGrid/DataGridError.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridFillerColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridFillerColumn.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridFillerColumn.cs
rename to src/Avalonia.Controls.DataGrid/DataGridFillerColumn.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridLength.cs b/src/Avalonia.Controls.DataGrid/DataGridLength.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridLength.cs
rename to src/Avalonia.Controls.DataGrid/DataGridLength.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridRow.cs b/src/Avalonia.Controls.DataGrid/DataGridRow.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridRow.cs
rename to src/Avalonia.Controls.DataGrid/DataGridRow.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridRowGroupHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridRowGroupHeader.cs
rename to src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridRowGroupInfo.cs b/src/Avalonia.Controls.DataGrid/DataGridRowGroupInfo.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridRowGroupInfo.cs
rename to src/Avalonia.Controls.DataGrid/DataGridRowGroupInfo.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridRowHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridRowHeader.cs
rename to src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridRows.cs b/src/Avalonia.Controls.DataGrid/DataGridRows.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridRows.cs
rename to src/Avalonia.Controls.DataGrid/DataGridRows.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridSelectedItemsCollection.cs b/src/Avalonia.Controls.DataGrid/DataGridSelectedItemsCollection.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridSelectedItemsCollection.cs
rename to src/Avalonia.Controls.DataGrid/DataGridSelectedItemsCollection.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridTemplateColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridTemplateColumn.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridTemplateColumn.cs
rename to src/Avalonia.Controls.DataGrid/DataGridTemplateColumn.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridTextColumn.cs b/src/Avalonia.Controls.DataGrid/DataGridTextColumn.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridTextColumn.cs
rename to src/Avalonia.Controls.DataGrid/DataGridTextColumn.cs
diff --git a/src/Avalonia.Controls/DataGrid/DataGridValueConverter.cs b/src/Avalonia.Controls.DataGrid/DataGridValueConverter.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/DataGridValueConverter.cs
rename to src/Avalonia.Controls.DataGrid/DataGridValueConverter.cs
diff --git a/src/Avalonia.Controls/DataGrid/EventArgs.cs b/src/Avalonia.Controls.DataGrid/EventArgs.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/EventArgs.cs
rename to src/Avalonia.Controls.DataGrid/EventArgs.cs
diff --git a/src/Avalonia.Controls/DataGrid/Extensions.cs b/src/Avalonia.Controls.DataGrid/Extensions.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/Extensions.cs
rename to src/Avalonia.Controls.DataGrid/Extensions.cs
diff --git a/src/Avalonia.Controls/DataGrid/IndexToValueTable.cs b/src/Avalonia.Controls.DataGrid/IndexToValueTable.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/IndexToValueTable.cs
rename to src/Avalonia.Controls.DataGrid/IndexToValueTable.cs
diff --git a/src/Avalonia.Controls/Primitives/DataGridCellsPresenter.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridCellsPresenter.cs
similarity index 100%
rename from src/Avalonia.Controls/Primitives/DataGridCellsPresenter.cs
rename to src/Avalonia.Controls.DataGrid/Primitives/DataGridCellsPresenter.cs
diff --git a/src/Avalonia.Controls/Primitives/DataGridColumnHeadersPresenter.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridColumnHeadersPresenter.cs
similarity index 100%
rename from src/Avalonia.Controls/Primitives/DataGridColumnHeadersPresenter.cs
rename to src/Avalonia.Controls.DataGrid/Primitives/DataGridColumnHeadersPresenter.cs
diff --git a/src/Avalonia.Controls/Primitives/DataGridDetailsPresenter.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridDetailsPresenter.cs
similarity index 100%
rename from src/Avalonia.Controls/Primitives/DataGridDetailsPresenter.cs
rename to src/Avalonia.Controls.DataGrid/Primitives/DataGridDetailsPresenter.cs
diff --git a/src/Avalonia.Controls/Primitives/DataGridFrozenGrid.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridFrozenGrid.cs
similarity index 100%
rename from src/Avalonia.Controls/Primitives/DataGridFrozenGrid.cs
rename to src/Avalonia.Controls.DataGrid/Primitives/DataGridFrozenGrid.cs
diff --git a/src/Avalonia.Controls/Primitives/DataGridRowsPresenter.cs b/src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs
similarity index 100%
rename from src/Avalonia.Controls/Primitives/DataGridRowsPresenter.cs
rename to src/Avalonia.Controls.DataGrid/Primitives/DataGridRowsPresenter.cs
diff --git a/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs b/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..ba2ad0ae4a
--- /dev/null
+++ b/src/Avalonia.Controls.DataGrid/Properties/AssemblyInfo.cs
@@ -0,0 +1,12 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using Avalonia.Metadata;
+
+[assembly: InternalsVisibleTo("Avalonia.Controls.UnitTests")]
+[assembly: InternalsVisibleTo("Avalonia.DesignerSupport")]
+
+[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia")]
+[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Controls.DataGrid")]
diff --git a/src/Avalonia.Controls/DataGrid/Range.cs b/src/Avalonia.Controls.DataGrid/Range.cs
similarity index 100%
rename from src/Avalonia.Controls/DataGrid/Range.cs
rename to src/Avalonia.Controls.DataGrid/Range.cs
diff --git a/src/Avalonia.Controls/Utils/CellEditBinding.cs b/src/Avalonia.Controls.DataGrid/Utils/CellEditBinding.cs
similarity index 100%
rename from src/Avalonia.Controls/Utils/CellEditBinding.cs
rename to src/Avalonia.Controls.DataGrid/Utils/CellEditBinding.cs
diff --git a/src/Avalonia.Controls/Utils/DoubleUtil.cs b/src/Avalonia.Controls.DataGrid/Utils/DoubleUtil.cs
similarity index 100%
rename from src/Avalonia.Controls/Utils/DoubleUtil.cs
rename to src/Avalonia.Controls.DataGrid/Utils/DoubleUtil.cs
diff --git a/src/Avalonia.Controls/Utils/KeyboardHelper.cs b/src/Avalonia.Controls.DataGrid/Utils/KeyboardHelper.cs
similarity index 100%
rename from src/Avalonia.Controls/Utils/KeyboardHelper.cs
rename to src/Avalonia.Controls.DataGrid/Utils/KeyboardHelper.cs
diff --git a/src/Avalonia.Controls/Utils/ReflectionHelper.cs b/src/Avalonia.Controls.DataGrid/Utils/ReflectionHelper.cs
similarity index 100%
rename from src/Avalonia.Controls/Utils/ReflectionHelper.cs
rename to src/Avalonia.Controls.DataGrid/Utils/ReflectionHelper.cs
diff --git a/src/Avalonia.Controls/Utils/TreeHelper.cs b/src/Avalonia.Controls.DataGrid/Utils/TreeHelper.cs
similarity index 100%
rename from src/Avalonia.Controls/Utils/TreeHelper.cs
rename to src/Avalonia.Controls.DataGrid/Utils/TreeHelper.cs
diff --git a/src/Avalonia.Controls/Utils/ValidationUtil.cs b/src/Avalonia.Controls.DataGrid/Utils/ValidationUtil.cs
similarity index 100%
rename from src/Avalonia.Controls/Utils/ValidationUtil.cs
rename to src/Avalonia.Controls.DataGrid/Utils/ValidationUtil.cs