Index: wp-includes/shortcodes.php
===================================================================
--- wp-includes/shortcodes.php	(revision 7493)
+++ wp-includes/shortcodes.php	(working copy)
@@ -118,6 +118,7 @@
 }
 
 function shortcode_atts($pairs, $atts) {
+	$atts = (array)$atts;
 	$out = array();
 	foreach($pairs as $name => $default) {
 		if ( array_key_exists($name, $atts) )
Index: wp-includes/media.php
===================================================================
--- wp-includes/media.php	(revision 7493)
+++ wp-includes/media.php	(working copy)
@@ -339,8 +339,20 @@
 	$output = apply_filters('post_gallery', '', $attr);
 	if ( $output != '' )
 		return $output;
+		
+	extract(shortcode_atts(array(
+		'orderby'    => 'menu_order ASC, ID ASC',
+		'id'         => $post->ID,
+		'itemtag'    => 'dl',
+		'icontag'    => 'dt',
+		'captiontag' => 'dd',
+		'columns'    => 3,
+		'size'       => 'thumbnail',
+	), $attr));
 
-	$attachments = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&orderby=\"menu_order ASC, ID ASC\"");
+	$id = intval($id);
+	$orderby = addslashes($orderby);
+	$attachments = get_children("post_parent=$id&post_type=attachment&post_mime_type=image&orderby=\"{$orderby}\"");
 
 	if ( empty($attachments) )
 		return '';
@@ -348,16 +360,21 @@
 	if ( is_feed() ) {
 		$output = "\n";
 		foreach ( $attachments as $id => $attachment )
-			$output .= wp_get_attachment_link($id, 'thumbnail', true) . "\n";
+			$output .= wp_get_attachment_link($id, $size, true) . "\n";
 		return $output;
 	}
 
+	$listtag = tag_escape($listtag);
+	$itemtag = tag_escape($itemtag);
+	$captiontag = tag_escape($captiontag);
+	$columns = intval($columns);
+	
 	$output = apply_filters('gallery_style', "
 		<style type='text/css'>
 			.gallery {
 				margin: auto;
 			}
-			.gallery div {
+			.gallery-item {
 				float: left;
 				margin-top: 10px;
 				text-align: center;
@@ -365,17 +382,28 @@
 			.gallery img {
 				border: 2px solid #cfcfcf;
 			}
+			.gallery-caption {
+				margin-left: 0;
+			}
 		</style>
 		<!-- see gallery_shortcode() in wp-includes/media.php -->
 		<div class='gallery'>");
 
 	foreach ( $attachments as $id => $attachment ) {
-		$link = wp_get_attachment_link($id, 'thumbnail', true);
+		$link = wp_get_attachment_link($id, $size, true);
+		$output .= "<{$itemtag} class='gallery-item'>";
 		$output .= "
-			<div>
+			<{$icontag} class='gallery-icon'>
 				$link
-			</div>";
-		if ( ++$i % 3 == 0 )
+			</{$icontag}>";
+		if ( $captiontag && trim($attachment->post_excerpt) ) {
+			$output .= "
+				<{$captiontag} class='gallery-caption'>
+				{$attachment->post_excerpt}
+				</{$captiontag}>";
+		}
+		$output .= "</{$itemtag}>";
+		if ( $columns > 0 && ++$i % $columns == 0 )
 			$output .= '<br style="clear: both" />';
 	}
 
Index: wp-admin/includes/media.php
===================================================================
--- wp-admin/includes/media.php	(revision 7493)
+++ wp-admin/includes/media.php	(working copy)
@@ -460,10 +460,10 @@
 function image_attachment_fields_to_edit($form_fields, $post) {
 	if ( substr($post->post_mime_type, 0, 5) == 'image' ) {
 		$form_fields['post_title']['required'] = true;
-		$form_fields['post_excerpt']['label'] = __('Description');
+		$form_fields['post_excerpt']['label'] = __('Caption');
 		$form_fields['post_excerpt']['helps'][] = __('Alternate text, e.g. "The Mona Lisa"');
 
-		$form_fields['post_content']['label'] = __('Long Description');
+		$form_fields['post_content']['label'] = __('Description');
 
 		$thumb = wp_get_attachment_thumb_url($post->ID);
 
@@ -554,11 +554,11 @@
 			'value'      => $edit_post->post_title,
 		),
 		'post_excerpt' => array(
-			'label'      => __('Description'),
+			'label'      => __('Caption'),
 			'value'      => $edit_post->post_excerpt,
 		),
 		'post_content' => array(
-			'label'      => __('Long description'),
+			'label'      => __('Description'),
 			'value'      => $edit_post->post_content,
 			'input'      => 'textarea',
 		),
