 			}
 			
 			// collective bounds changed
-			_triggerMetadataCallbacksIfQueueEmpty();
+			
+			// Weave automatically triggers callbacks when all tasks complete
+			if (!linkableObjectIsBusy(metadataCallbacks))
+				metadataCallbacks.triggerCallbacks();
 		}
 
 		private var _projectionWKT:String = ""; // stores the well-known-text defining the projection

	            }
	            catch(e:EOFError) { }
	            
				// remove this stream from the processing list
				delete _geometryStreamQueue[stream];
				
				return 1; // done
			}
			
			_geometryStreamQueue[stream] = NameUtil.createUniqueName(stream);
			
			WeaveAPI.StageUtils.startTask(this, task, WeaveAPI.TASK_PRIORITY_PARSING, _triggerGeometryCallbacksIfQueueEmpty);
		}

		

			for each (geom in geometries)
				if (geom != null)
					geom.geomType = value;
		}
		
		/**
