diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CheckComboBox/Implementation/CheckComboBox.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CheckComboBox/Implementation/CheckComboBox.cs
new file mode 100644
index 00000000..5bdbfecd
--- /dev/null
+++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CheckComboBox/Implementation/CheckComboBox.cs
@@ -0,0 +1,137 @@
+using System;
+using System.Windows;
+using Microsoft.Windows.Controls.Primitives;
+
+namespace Microsoft.Windows.Controls
+{
+ public class CheckComboBox : Selector
+ {
+ private bool _surpressTextUpdate;
+
+ #region Constructors
+
+ static CheckComboBox()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(CheckComboBox), new FrameworkPropertyMetadata(typeof(CheckComboBox)));
+ }
+
+ public CheckComboBox()
+ {
+
+ }
+
+ #endregion //Constructors
+
+ #region Properties
+
+ public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(CheckComboBox), new UIPropertyMetadata(null));
+ public string Text
+ {
+ get { return (string)GetValue(TextProperty); }
+ set { SetValue(TextProperty, value); }
+ }
+
+ #region IsDropDownOpen
+
+ public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register("IsDropDownOpen", typeof(bool), typeof(CheckComboBox), new UIPropertyMetadata(false, OnIsDropDownOpenChanged));
+ public bool IsDropDownOpen
+ {
+ get { return (bool)GetValue(IsDropDownOpenProperty); }
+ set { SetValue(IsDropDownOpenProperty, value); }
+ }
+
+ private static void OnIsDropDownOpenChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
+ {
+ CheckComboBox comboBox = o as CheckComboBox;
+ if (comboBox != null)
+ comboBox.OnIsDropDownOpenChanged((bool)e.OldValue, (bool)e.NewValue);
+ }
+
+ protected virtual void OnIsDropDownOpenChanged(bool oldValue, bool newValue)
+ {
+ // TODO: Add your property changed side-effects. Descendants can override as well.
+ }
+
+ #endregion //IsDropDownOpen
+
+ #endregion //Properties
+
+ #region Base Class Overrides
+
+ protected override void OnSelectedValueChanged(string oldValue, string newValue)
+ {
+ base.OnSelectedValueChanged(oldValue, newValue);
+
+ if (!_surpressTextUpdate)
+ UpdateTextFromSelectedValue();
+ }
+
+ protected override void Update(object item, bool remove)
+ {
+ _surpressTextUpdate = true;
+ base.Update(item, remove);
+ UpdateDisplayText(item, remove);
+ _surpressTextUpdate = false;
+ }
+
+ #endregion //Base Class Overrides
+
+ #region Methods
+
+ private void UpdateDisplayText(object item, bool remove)
+ {
+ if (Text == null)
+ Text = String.Empty;
+
+ var displayText = GetItemDisplayValue(item);
+ var resolvedDisplayText = GetDelimitedValue(displayText);
+ string updatedText = Text;
+
+ if (remove)
+ {
+ if (Text.Contains(resolvedDisplayText))
+ updatedText = Text.Replace(resolvedDisplayText, "");
+ }
+ else
+ {
+ if (!Text.Contains(resolvedDisplayText))
+ updatedText = Text + resolvedDisplayText;
+ }
+
+ UpdateText(updatedText);
+ }
+
+ private void UpdateText(string text)
+ {
+ if (!Text.Equals(text))
+ Text = text;
+ }
+
+ private void UpdateTextFromSelectedValue()
+ {
+ if (!String.IsNullOrEmpty(SelectedValue))
+ {
+ string[] values = SelectedValue.Split(new string[] { Delimiter }, StringSplitOptions.RemoveEmptyEntries);
+ foreach (string value in values)
+ {
+ var item = ResolveItemByValue(value);
+ UpdateDisplayText(item, false);
+ }
+ }
+ }
+
+ protected object GetItemDisplayValue(object item)
+ {
+ if (!String.IsNullOrEmpty(DisplayMemberPath))
+ {
+ var property = item.GetType().GetProperty(DisplayMemberPath);
+ if (property != null)
+ return property.GetValue(item, null);
+ }
+
+ return item;
+ }
+
+ #endregion //Methods
+ }
+}
diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CheckComboBox/Themes/Generic.xaml b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CheckComboBox/Themes/Generic.xaml
new file mode 100644
index 00000000..af3edc79
--- /dev/null
+++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CheckComboBox/Themes/Generic.xaml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ M 0,1 C0,1 0,0 0,0 0,0 3,0 3,0 3,0 3,1 3,1 3,1 4,1 4,1 4,1 4,0 4,0 4,0 7,0 7,0 7,0 7,1 7,1 7,1 6,1 6,1 6,1 6,2 6,2 6,2 5,2 5,2 5,2 5,3 5,3 5,3 4,3 4,3 4,3 4,4 4,4 4,4 3,4 3,4 3,4 3,3 3,3 3,3 2,3 2,3 2,3 2,2 2,2 2,2 1,2 1,2 1,2 1,1 1,1 1,1 0,1 0,1 z
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/Selector.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/Selector.cs
new file mode 100644
index 00000000..ff800dcb
--- /dev/null
+++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/Selector.cs
@@ -0,0 +1,374 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using System.Windows;
+using System.Windows.Data;
+using System.Collections;
+using System.Collections.ObjectModel;
+
+namespace Microsoft.Windows.Controls.Primitives
+{
+ public class Selector : ItemsControl
+ {
+ #region Members
+
+ private bool _surpressSelectionChanged;
+ private bool _surpressSelectedValueChanged;
+
+ #endregion //Members
+
+ #region Constructors
+
+ public Selector()
+ {
+ SelectedItems = new ObservableCollection