diff --git a/follow.module b/follow.module
index b43aad3..83c0eb6 100644
--- a/follow.module
+++ b/follow.module
@@ -8,6 +8,15 @@
 require_once 'follow.inc';
 
 /**
+ * Implements hook_ctools_plugin_directory().
+ */
+function follow_ctools_plugin_directory($owner, $type) {
+  if ($owner == 'ctools') {
+    return "plugins/$type";
+  }
+}
+
+/**
  * Implements hook_help().
  */
 function follow_help($path, $arg) {
diff --git a/plugins/content_types/follow.inc b/plugins/content_types/follow.inc
new file mode 100644
index 0000000..eb94c8d
--- /dev/null
+++ b/plugins/content_types/follow.inc
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Plugins are described by creating a $plugin array which will be used
+ * by the system that includes this file.
+ */
+$plugin = array(
+  'single' => TRUE,
+  'title' => t('User follow links'),
+  'icon' => 'icon_user.png',
+  'description' => t('The follow links of a user.'),
+  'required context' => new ctools_context_required(t('User'), 'user'),
+  'category' => t('User'),
+);
+
+/**
+ * Implements hook_plugin_id_content_type_render().
+ */
+function follow_follow_content_type_render($subtype, $conf, $panel_args, $context) {
+  if (empty($context->data)) {
+    return;
+  }
+
+  $account = clone $context->data;
+
+  if ($content = _follow_block_content('user', $account->uid)) {
+    $block = new stdClass();
+    $block->module = 'follow';
+    $block->title = _follow_block_subject($account->uid);
+
+    $block->content = $content;
+    return $block;
+  }
+}
+
+/**
+ * Implements hook_plugin_id_content_type_admin_title().
+ */
+function follow_follow_content_type_admin_title($subtype, $conf, $context) {
+  return t('"@s" user follow links', array('@s' => $context->identifier));
+}
+
+/**
+ * Implements hook_plugin_id_content_type_edit_form().
+ */
+function follow_follow_content_type_edit_form($form, &$form_state) {
+  // provide a blank form so we have a place to have context setting.
+  return $form;
+}
\ No newline at end of file
