 				job.target = tmpBd;
 				job.shader = shader;
 				
-				job.addEventListener(ShaderEvent.COMPLETE, function onJobComplete() : void {					
-					_bd.dispose();
-					_bd = tmpBd;
-										
-					if (scale < 1 && tmpBd.width <= dstWidth || scale > 1 && tmpBd.width >= dstWidth) {
-						onOperationComplete();
-						onDrawComplete();
-					} else {
-						dispatchEvent(new OProgressEvent(OProgressEvent.PROGRESS, step++, totalSteps));
-						scale2(dstWidth / tmpBd.width);
-					}	
-				}, false, 0, true);
-				
-				job.start(); 				
+				if (_sync) {
+					job.start(true);
+					onJobComplete(job.target);
+				} else {
+					job.addEventListener(ShaderEvent.COMPLETE, function(e:ShaderEvent) : void {
+						onJobComplete(e.target.target);
+					}, false, 0, true);
+					job.start();
+				}				 				
 			}
 			
 			scale2(scale);

		private var _lastModifyIndex:int = 0;
		
		private var _busy:Boolean = false;
		private var _crop:Rectangle = null;		
				
		
		public function get bitmapData() : BitmapData {

		 * 
		 * @param {Boolean} [sync=true] Whether to commit modifications synchronously
		 */ 
		public function commit(sync:Boolean = false) : void
		{						
			if (!_busy) {
				_busy = true;
				_sync = sync;
				commitNext(); 
			}
		}
