diff --git src/wp-admin/js/customize-controls.js src/wp-admin/js/customize-controls.js
index 85b171d..d696f85 100644
--- src/wp-admin/js/customize-controls.js
+++ src/wp-admin/js/customize-controls.js
@@ -1021,10 +1021,17 @@
 			nonce: api.settings.nonce,
 
 			query: function() {
+				var dirtyCustomized = {};
+				api.each( function ( value, key ) {
+					if ( value._dirty ) {
+						dirtyCustomized[ key ] = value();
+					}
+				} );
+
 				return {
 					wp_customize: 'on',
 					theme:      api.settings.theme.stylesheet,
-					customized: JSON.stringify( api.get() ),
+					customized: JSON.stringify( dirtyCustomized ),
 					nonce:      this.nonce.preview
 				};
 			},
@@ -1067,6 +1074,10 @@
 							return;
 						}
 
+						// Clear setting dirty states
+						api.each( function ( value ) {
+							value._dirty = false;
+						} );
 						api.trigger( 'saved' );
 					} );
 				};
diff --git src/wp-includes/js/customize-base.js src/wp-includes/js/customize-base.js
index 6c41b40..765c595 100644
--- src/wp-includes/js/customize-base.js
+++ src/wp-includes/js/customize-base.js
@@ -158,6 +158,7 @@ window.wp = window.wp || {};
 		initialize: function( initial, options ) {
 			this._value = initial; // @todo: potentially change this to a this.set() call.
 			this.callbacks = $.Callbacks();
+			this._dirty = false;
 
 			$.extend( this, options || {} );
 
@@ -187,6 +188,7 @@ window.wp = window.wp || {};
 				return this;
 
 			this._value = to;
+			this._dirty = true;
 
 			this.callbacks.fireWith( this, [ to, from ] );
 
