 		{
 			_data.position = _data.bytesAvailable;
 			_data.writeFloat(value);
+			_data.position = 0;
+			
+			if (!_locked)
+			{
+				_changed.execute(this);
+				_boundsChanged.execute(this);
+			}
+			
+			return this;
+		}
+		
+		public function pushFloats(values : Vector.<Number>) : VertexStream
+		{
+			var numFloats : uint = values.length;
+			
+			_data.position = _data.bytesAvailable;
+			for (var i : uint = 0; i < numFloats; ++i)
+				_data.writeFloat(values[i]);
 			_data.position = 0;
 			
 			if (!_locked)

		{
			_changed = new Signal('VertexStream.changed');
			_boundsChanged = new Signal('VertexStream.boundsChanged');
			
			_resource = new VertexBuffer3DResource(this);
			_format = format || DEFAULT_FORMAT;

			
			var boundsHaveChanged : Boolean = false;
			
			if (offset >= _minimum.length || value < _minimum[offset])
			{
				_minimum[offset] = value;
				boundsHaveChanged = true;
			}
			else if (offset >= _maximum.length || value > _maximum[offset])
			{
				_maximum[offset] = value;
				boundsHaveChanged = true;
