diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index 036ff170743d90125f4eeca6f8b2cd4c0b842c09..4955ea8d147e7ef7e168f5cdc67bd8f4b55ebb46 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -128,10 +128,25 @@ BOOL LLColorSwatchCtrl::handleUnicodeCharHere(llwchar uni_char)
 	return LLUICtrl::handleUnicodeCharHere(uni_char);
 }
 
+// [SL:KB] - Patch: Control-ColorSwatchCtrl | Checked: 2012-08-28 (Catznip-3.3)
+BOOL LLColorSwatchCtrl::isDirty() const
+{
+	return (mColor != mPrevColor);
+}
+
+void LLColorSwatchCtrl::resetDirty()
+{
+	mPrevColor = mColor;
+}
+// [/SL:KB]
+
 // forces color of this swatch and any associated floater to the input value, if currently invalid
 void LLColorSwatchCtrl::setOriginal(const LLColor4& color)
 {
 	mColor = color;
+// [SL:KB] - Patch: Control-ColorSwatchCtrl | Checked: 2012-08-28 (Catznip-3.3)
+	mPrevColor = mColor;
+// [/SL:KB]
 	LLFloaterColorPicker* pickerp = (LLFloaterColorPicker*)mPickerHandle.get();
 	if (pickerp)
 	{
@@ -142,6 +157,9 @@ void LLColorSwatchCtrl::setOriginal(const LLColor4& color)
 void LLColorSwatchCtrl::set(const LLColor4& color, BOOL update_picker, BOOL from_event)
 {
 	mColor = color; 
+// [SL:KB] - Patch: Control-ColorSwatchCtrl | Checked: 2012-08-28 (Catznip-3.3)
+	mPrevColor = mColor;
+// [/SL:KB]
 	LLFloaterColorPicker* pickerp = (LLFloaterColorPicker*)mPickerHandle.get();
 	if (pickerp && update_picker)
 	{
diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h
index d8b48927228c351cee980db4139b820928553838..32cde80c0512f3e690418a9c9f01c2c6348e8d44 100644
--- a/indra/newview/llcolorswatch.h
+++ b/indra/newview/llcolorswatch.h
@@ -75,6 +75,10 @@ class LLColorSwatchCtrl final
 
 	/*virtual*/ LLSD getValue() const { return mColor.getValue(); }
 	const LLColor4&	get()							{ return mColor; }
+// [SL:KB] - Patch: Control-ColorSwatchCtrl | Checked: 2012-08-28 (Catznip-3.3)
+	/*virtual*/ BOOL isDirty() const;	// Returns TRUE if user changed value at all
+	/*virtual*/ void resetDirty();		// Clear dirty state
+// [/SL:KB]
 	
 	void			set(const LLColor4& color, BOOL update_picker = FALSE, BOOL from_event = FALSE);
 	void			setOriginal(const LLColor4& color);
@@ -103,6 +107,9 @@ class LLColorSwatchCtrl final
 protected:
 	bool					mValid;
 	LLColor4				mColor;
+// [SL:KB] - Patch: Control-ColorSwatchCtrl | Checked: 2012-08-28 (Catznip-3.3)
+	LLColor4				mPrevColor;
+// [/SL:KB]
 	LLUIColor				mBorderColor;
 	LLTextBox*				mCaption;
 	LLHandle<LLFloater>		mPickerHandle;