diff --git a/content-reference.php b/content-reference.php
index 02cb0b5..fdd1619 100644
--- a/content-reference.php
+++ b/content-reference.php
@@ -114,6 +114,17 @@ if ( ! empty( $since ) ) : ?>
 		<?php endif;
 	endif; ?>
 
+	<?php if ( 'wp-parser-function' === get_post_type() ) : ?>
+		<hr />
+		<section class="source-content">
+			<h2><?php _e( 'Source', 'wporg' ); ?></h2>
+			<div class="source-code-container" style="height: 200px; overflow: hidden;">
+				<pre class="brush: php;"><?php echo esc_html( get_source_code() ); ?></pre>
+			</div>
+			<p><a href="#" class="show-complete-source"><?php _e( 'Show complete source code.', 'wporg-developer' ); ?></a></p>
+		</section>
+	<?php endif; ?>
+
 <?php endif; ?>
 
 </article>
diff --git a/functions.php b/functions.php
index c0deeac..bc57a6d 100644
--- a/functions.php
+++ b/functions.php
@@ -342,6 +342,7 @@ function theme_scripts_styles() {
 	wp_enqueue_style( 'wp-dev-sass-compiled', get_template_directory_uri() . '/stylesheets/main.css', array( 'wporg-developer-style' ), '20140425' );
 	wp_enqueue_script( 'wporg-developer-navigation', get_template_directory_uri() . '/js/navigation.js', array(), '20120206', true );
 	wp_enqueue_script( 'wporg-developer-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20130115', true );
+	wp_enqueue_script( 'wporg-developer-function-reference', get_template_directory_uri() . '/js/function-reference.js', array( 'jquery' ), '20140514', true );
 	if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
 		wp_enqueue_script( 'comment-reply' );
 	}
diff --git a/inc/template-tags.php b/inc/template-tags.php
index 28f3199..a0bc383 100755
--- a/inc/template-tags.php
+++ b/inc/template-tags.php
@@ -564,4 +564,34 @@ namespace DevHub {
 		return strcmp( $a->post_name, $b->post_name );
 	}
 
+	/**
+	 * Retrieve source code for a function
+	 *
+	 * @param int $post_id
+	 *
+	 * @return string The sourc
+	 */
+	function get_source_code( $post_id = null ) {
+
+		if ( empty( $post_id ) ) {
+			$post_id = get_the_ID();
+		}
+
+		// Get the total file sourcecode.
+		$source_file = get_source_file( $post_id );
+
+		// Put the total source code in an array.
+		$total_source_code = file_get_contents( ABSPATH . $source_file );
+		$total_source_code = explode( "\n", $total_source_code );
+
+		// Get the start and end lines.
+		$start_line = get_post_meta( $post_id, '_wp-parser_line_num', true ) - 1;
+		$end_line =   get_post_meta( $post_id, '_wp-parser_end_line_num', true );
+
+		// Get the correct source code.
+		$source_code = array_slice( $total_source_code, $start_line, $end_line - $start_line );
+
+		return implode( "\n", $source_code );
+	}
+
 }
\ No newline at end of file
diff --git a/js/function-reference.js b/js/function-reference.js
new file mode 100644
index 0000000..798d451
--- /dev/null
+++ b/js/function-reference.js
@@ -0,0 +1,17 @@
+/**
+ * function-reference.js
+ *
+ * Handles all interactivity on the single function page
+ */
+( function( $ ) {
+	$( '.show-complete-source' ).on( 'click', function( e ) {
+		e.preventDefault();
+
+		var $this = $( this ),
+			source_content = $this.closest( '.source-content' );
+
+		source_content.children( '.source-code-container' ).animate( { height: source_content.find( 'table' ).height() + 'px' } );
+
+		$this.remove();
+	} );
+} )( jQuery );
