diff --git a/general-template.php b/general-template-new.php
index 8655cee..e03d742 100644
--- a/general-template.php
+++ b/general-template-new.php
@@ -2584,6 +2584,7 @@ function language_attributes($doctype = 'html') {
  * @param string|array $args Optional. Override defaults.
  * @return array|string String of page links or array of page links.
  */
+<?php
 function paginate_links( $args = '' ) {
 	global $wp_query, $wp_rewrite;
 
@@ -2595,7 +2596,6 @@ function paginate_links( $args = '' ) {
 
 	if ( isset( $url_parts[1] ) ) {
 		wp_parse_str( $url_parts[1], $query_args );
-		$query_args = urlencode_deep( $query_args );
 	}
 
 	$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
@@ -2616,10 +2616,11 @@ function paginate_links( $args = '' ) {
 		'end_size' => 1,
 		'mid_size' => 2,
 		'type' => 'plain',
-		'add_args' => $query_args, // array of query args to add
+		'add_args' => false, // array of query args to add
 		'add_fragment' => '',
 		'before_page_number' => '',
-		'after_page_number' => ''
+		'after_page_number' => '',
+		'link_current' => false,
 	);
 
 	$args = wp_parse_args( $args, $defaults );
@@ -2641,7 +2642,9 @@ function paginate_links( $args = '' ) {
 	$add_args = is_array( $args['add_args'] ) ? $args['add_args'] : false;
 	$r = '';
 	$page_links = array();
+	$page_link_data = array();
 	$dots = false;
+	$active = false;
 
 	if ( $args['prev_next'] && $current && 1 < $current ) :
 		$link = str_replace( '%_%', 2 == $current ? '' : $args['format'], $args['base'] );
@@ -2657,27 +2660,38 @@ function paginate_links( $args = '' ) {
 		 *
 		 * @param string $link The paginated link URL.
 		 */
-		$page_links[] = '<a class="prev page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $args['prev_text'] . '</a>';
+		$page_link_data[] = array(
+			'type' => 'prev',
+			'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
+			'text' => $prev_text,
+			'active' => false,
+		);
 	endif;
 	for ( $n = 1; $n <= $total; $n++ ) :
-		if ( $n == $current ) :
-			$page_links[] = "<span class='page-numbers current'>" . $args['before_page_number'] . number_format_i18n( $n ) . $args['after_page_number'] . "</span>";
+		if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
+			$link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );
+			$link = str_replace( '%#%', $n, $link );
+			if ( $add_args ) {
+				$link = add_query_arg( $add_args, $link );
+			}
+			$link .= $args['add_fragment'];
+
+			/** This filter is documented in wp-includes/general-template.php */
+			$page_link_data[] = array(
+				'type' => 'page',
+				'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
+				'text' => number_format_i18n( $n ),
+				'active' => ( $n == $current ),
+			);
 			$dots = true;
-		else :
-			if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
-				$link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );
-				$link = str_replace( '%#%', $n, $link );
-				if ( $add_args )
-					$link = add_query_arg( $add_args, $link );
-				$link .= $args['add_fragment'];
-
-				/** This filter is documented in wp-includes/general-template.php */
-				$page_links[] = "<a class='page-numbers' href='" . esc_url( apply_filters( 'paginate_links', $link ) ) . "'>" . $args['before_page_number'] . number_format_i18n( $n ) . $args['after_page_number'] . "</a>";
-				$dots = true;
-			elseif ( $dots && ! $args['show_all'] ) :
-				$page_links[] = '<span class="page-numbers dots">' . __( '&hellip;' ) . '</span>';
-				$dots = false;
-			endif;
+		elseif ( $dots && !$args['show_all'] ) :
+			$page_link_data[] = array(
+				'type' => 'dots',
+				'link' => null,
+				'text' => __( '&hellip;' ),
+				'active' => false,
+			);
+			$dots = false;
 		endif;
 	endfor;
 	if ( $args['prev_next'] && $current && ( $current < $total || -1 == $total ) ) :
@@ -2688,9 +2702,41 @@ function paginate_links( $args = '' ) {
 		$link .= $args['add_fragment'];
 
 		/** This filter is documented in wp-includes/general-template.php */
-		$page_links[] = '<a class="next page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $args['next_text'] . '</a>';
+		$page_link_data[] = array(
+			'type' => 'next',
+			'link' => esc_url( apply_filters( 'paginate_links', $link ) ),
+			'text' => $next_text,
+			'active' => false,
+		);
+	endif;
+	// If we just want the data without the HTML, then we don't need to
+	// process the HTML here.
+	if ( $args['type'] != 'array_raw' ) :
+		foreach ( $page_link_data as $page_link ) :
+			switch( $page_link['type'] ) {
+				case 'prev':
+					$page_links[] = '<a class="prev page-numbers" href="' . $page_link['text'] . '">' . $prev_text . '</a>';
+					break;
+				case 'next':
+					$page_links[] = '<a class="next page-numbers" href="' . $page_link['text'] . '">' . $next_text . '</a>';
+					break;
+				case 'dots':
+					$page_links[] = '<span class="page-numbers dots">' . $page_link['text'] . '</span>';
+					break;
+				case 'page':
+					if ( ! $args['link_current'] && $page_link['active'] ) {
+						$page_links[] = "<span class='page-numbers current'>" . $args['before_page_number'] . $page_link['text'] . $args['after_page_number'] . "</span>";
+					} else {
+						$page_links[] = "<a class='" . ($page_link['active'] ? 'current ' : null) . "page-numbers' href='" . $page_link['link'] . "'>" . $args['before_page_number'] . $page_link['text'] . $args['after_page_number'] . "</a>";
+					}
+					break;
+			}
+		endforeach;
 	endif;
 	switch ( $args['type'] ) {
+		case 'array_raw' :
+			return $page_link_data;
+
 		case 'array' :
 			return $page_links;
 
