diff --git a/content-reference.php b/content-reference.php
index 6b0030c..79b4728 100644
--- a/content-reference.php
+++ b/content-reference.php
@@ -50,6 +50,41 @@
 	<?php endif; ?>
 	*/ ?>
 
+	<?php if ( show_usage_info() ) : ?>
+		<hr />
+		<section class="usage">
+			<article class="used-by">
+				<h2><?php _e( 'Used by', 'wporg' ); ?></h2>
+				<ul>
+					<?php
+						$used_by = get_used_by();
+						while ( $used_by->have_posts() ) : $used_by->the_post();
+							?>
+							<li>
+								<strong><?php echo esc_attr( get_source_file() ); ?>:</strong>
+								<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
+							</li>
+						<?php endwhile; wp_reset_postdata(); ?>
+				</ul>
+
+			</article>
+			<article class="uses">
+				<h2><?php _e( 'Uses', 'wporg' ); ?></h2>
+				<ul>
+					<?php
+					$uses = get_uses();
+					while ( $uses->have_posts() ) : $uses->the_post()
+						?>
+						<li>
+							<strong><?php echo esc_attr( get_source_file() ); ?>:</strong>
+							<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
+						</li>
+					<?php endwhile; wp_reset_postdata(); ?>
+				</ul>
+			</article>
+		</section>
+	<?php endif; ?>
+
 	<?php
 	ob_start();
 	the_content();
diff --git a/inc/.DS_Store b/inc/.DS_Store
deleted file mode 100644
index 5008ddf..0000000
Binary files a/inc/.DS_Store and /dev/null differ
diff --git a/inc/template-tags.php b/inc/template-tags.php
index 1212318..2a30a94 100755
--- a/inc/template-tags.php
+++ b/inc/template-tags.php
@@ -700,6 +700,83 @@ function compare_objects_by_name( $a, $b ) {
 		return strcmp( $a->post_name, $b->post_name );
 	}
 
+	function show_usage_info() {
+		$p2p_enabled = function_exists( 'p2p_register_connection_type' );
+
+		return $p2p_enabled && post_type_has_usage_info( get_post_type() );
+	}
+
+	/**
+	 * Does the post type support usage information?
+	 *
+	 * @param string $post_type Optional. The post type name. If blank, assumes current post type.
+	 *
+	 * @return boolean
+	 */
+	function post_type_has_usage_info( $post_type = null ) {
+		$post_type             = $post_type ? $post_type : get_post_type();
+		$post_types_with_usage = array( 'wp-parser-function', 'wp-parser-method', 'wp-parser-hook' );
+
+		return in_array( $post_type, $post_types_with_usage );
+	}
+
+	/**
+	 * Retrieve a WP_Query object for the posts that the current post uses
+	 *
+	 * @return WP_Query A WP_Query object for the posts the current post uses
+	 */
+	function get_uses() {
+		$post = get_post();
+
+		if ( 'wp-parser-function' === get_post_type() ) {
+			$connection_types = array( 'functions_to_functions', 'functions_to_methods', 'functions_to_hooks' );
+		} else {
+			$connection_types = array( 'methods_to_functions', 'methods_to_methods', 'methods_to_hooks' );
+		}
+
+		$connected = new \WP_Query( array(
+			'post_type'           => array( 'wp-parser-function', 'wp-parser-method', 'wp-parser-hook' ),
+			'connected_type'      => $connection_types,
+			'connected_direction' => array( 'from', 'from', 'from' ),
+			'connected_items'     => get_queried_object(),
+			'nopaging'            => true,
+		) );
+
+		return $connected;
+	}
+
+	function get_used_by( $post_id = null ) {
+
+		if ( empty( $post_id ) ) {
+			$post_id = get_the_ID();
+		}
+
+		switch ( get_post_type() ) {
+
+			case 'wp-parser-function':
+				$connection_types = array( 'functions_to_functions', 'methods_to_functions' );
+				break;
+
+			case 'wp-parser-method':
+				$connection_types = array( 'functions_to_methods', 'methods_to_methods', );
+				break;
+
+			case 'wp-parser-hook':
+				$connection_types = array( 'functions_to_hooks', 'methods_to_hooks' );
+				break;
+		}
+
+		$connected = new \WP_Query( array(
+			'post_type'           => array( 'wp-parser-function', 'wp-parser-method' ),
+			'connected_type'      => $connection_types,
+			'connected_direction' => array( 'to', 'to' ),
+			'connected_items'     => $post_id,
+			'nopaging'            => true,
+		) );
+
+		return $connected;
+	}
+
 	/**
 	 * Does the post type have source code?
 	 *
diff --git a/scss/_mixins.scss b/scss/_mixins.scss
new file mode 100644
index 0000000..62aae3c
--- /dev/null
+++ b/scss/_mixins.scss
@@ -0,0 +1,11 @@
+@mixin clearfix {
+	&:before,
+	&:after {
+		content: " ";
+		display: table;
+	}
+
+	&:after {
+		clear: both;
+	}
+}
\ No newline at end of file
diff --git a/scss/main.scss b/scss/main.scss
index 897267b..cb9c7f5 100644
--- a/scss/main.scss
+++ b/scss/main.scss
@@ -1,6 +1,8 @@
 @import "reset";
 @import "global";
 
+@import "mixins";
+
 .home .devhub-wrap {
 	#content {
 		padding: 0;
@@ -966,6 +968,26 @@
 		}
 	}
 
+	/* = Usage
+	----------------------------------------------- */
+	.usage {
+		@include clearfix;
+
+		article {
+			float: left;
+			width: 50%;
+		}
+
+		.used-by {
+			padding-right: 30px;
+		}
+
+		.uses {
+			padding-left: 30px;
+		}
+	}
+
+
 	.source-content {
 		overflow: auto;
 	}
@@ -1313,5 +1335,11 @@
 		.two-columns .box {
 			width: 99%;
 		}
+
+		.usage {
+			article {
+				width: 100%;
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/stylesheets/main.css b/stylesheets/main.css
index db6736e..f0b6d61 100644
--- a/stylesheets/main.css
+++ b/stylesheets/main.css
@@ -298,6 +298,8 @@ input {
   /*
    * section styles
    */
+  /* = Usage
+  ----------------------------------------------- */
   /* Comments */
   /*
    * Content
@@ -1157,6 +1159,23 @@ input {
 .devhub-wrap .single .wp-parser-class, .devhub-wrap .single .wp-parser-function, .devhub-wrap .single .wp-parser-hook, .devhub-wrap .single .wp-parser-method {
   border-bottom-style: none;
 }
+.devhub-wrap .usage:before, .devhub-wrap .usage:after {
+  content: " ";
+  display: table;
+}
+.devhub-wrap .usage:after {
+  clear: both;
+}
+.devhub-wrap .usage article {
+  float: left;
+  width: 50%;
+}
+.devhub-wrap .usage .used-by {
+  padding-right: 30px;
+}
+.devhub-wrap .usage .uses {
+  padding-left: 30px;
+}
 .devhub-wrap .source-content {
   overflow: auto;
 }
@@ -1423,4 +1442,7 @@ input {
   .devhub-wrap .two-columns .box {
     width: 99%;
   }
+  .devhub-wrap .usage article {
+    width: 100%;
+  }
 }
