code: function(rules, preventCombining) {
  
  	var map = [], arr = {};
  	var preventCombining = [].concat(preventCombining || []);
  	preventCombining.splice(0, 0, '');
  	preventCombining = preventCombining.join('|');
  
  	// extracting every property
  	for(var selector in rules) {
  		var props = rules[selector];
  		for(var prop in props) {
  			map.push({
  				selector: selector, 
  				prop: prop, 
  				value: props[prop], 
  				combine: preventCombining.indexOf('|' + prop) < 0 && selector.indexOf('@font-face') < 0
  			});
  		}
  	}
  
  	// combining
  	for(var i=0; i<map.length; i++) {
  		if(map[i].combine === true && map[i].selector !== false) {
  			for(var j=i+1;j<map.length; j++) {
  				if(map[i].prop === map[j].prop && map[i].value === map[j].value) {
  					map[i].selector += ', ' + map[j].selector.replace(/~~(.+)~~/, '').replace(/^%.*?%/, '');
  					map[j].selector = false; // marking for removal
  				}
  			}
  		}
  	}
  
  	// preparing the result
  	for(var i=0; i<map.length; i++) {
  		if(map[i].selector !== false) {
  			if(!arr[map[i].selector]) arr[map[i].selector] = {}
  			arr[map[i].selector][map[i].prop] = map[i].value;
  		}
  	}
  	
  	return arr;
  }
docs: combining selectors