diff --git a/components/represent.inc b/components/represent.inc
index 009ece8..98d5dc9 100644
--- a/components/represent.inc
+++ b/components/represent.inc
@@ -11,6 +11,8 @@
  * @return
  *   An array defining the default structure of a component.
  */
+// Define component and its basic capabilities
+
 function _webform_defaults_represent() {
   return array(
     'name' => '',
@@ -25,12 +27,12 @@ function _webform_defaults_represent() {
       'private' => FALSE,
       'postal_code_component' => '',
       // Quack like a select component.
-      'aslist' => 1,
-      'multiple' => 0,
+      'aslist' => 0,
+      'multiple' => 1,
       'optrand' => 0,
 
       'other_option' => 0,
-      'options_source' => '',
+      'options_source' => array(),
     ),
   );
 }
@@ -51,35 +53,30 @@ function _webform_defaults_represent() {
  */
 function _webform_edit_represent($component) {
   $form = array();
-
-  drupal_add_js(drupal_get_path('module', 'webform') . '/js/select-admin.js', 'module', 'header', FALSE, TRUE, FALSE);
-  drupal_add_js(array('webform' => array('selectOptionsUrl' => url('webform/ajax/options/' . $component['nid']))), 'setting');
-
-  webform_component_include('select');
-  if ($info = _webform_select_options_info()) {
-    $names = array_keys(webform_represent_representative_sets());
-
-    $options = array('' => t('- Select -'));
-    foreach ($info as $name => $source) {
-      if (in_array($name, $names)) {
-        $options[$name] = $source['title'];
-      }
-    }
-
-    $form['extra']['options_source'] = array(
-      '#title'         => t('Representative set'),
-      '#type'          => 'select',
-      '#options'       => $options,
-      '#default_value' => $component['extra']['options_source'],
-      '#description'   => t("The elected official from this representative set whose electoral district intersects the supporter's postal code will receive a copy of the submission."),
-      '#required'      => TRUE,
-    );
-  }
+  module_load_include('inc', 'webform_represent', 'includes/webform_represent.options');
+  $form['extra']['options_source'] = array(
+    '#title'         => t('Representative set'),
+    '#type'          => 'select',
+    '#options'       => webform_represent_options_source(),
+    '#default_value' => $component['extra']['options_source'],
+    '#description'   => t("The elected official from this representative set whose electoral district intersects the supporter's postal code will receive a copy of the submission."),
+    '#required'      => TRUE,
+    '#multiple'      => TRUE,
+    '#size'          => 4,
+    //TODO: Not sure if this should be here
+    '#parents' => array('extra', 'options_source'),
+  );
 
   $node = node_load($component['nid']);
   $options = array('' => t('- Select -'));
   if (!empty($node->webform['components'])) {
     foreach ($node->webform['components'] as $array) {
+      switch ($array['type']) {
+        case 'textfield':
+        case 'postal_code':
+          $options[$array['form_key']] = $array['name'];
+          break;
+      }
       if ($array['type'] == 'textfield') {
         $options[$array['form_key']] = $array['name'];
       }
@@ -93,32 +90,49 @@ function _webform_edit_represent($component) {
     '#default_value' => $component['extra']['postal_code_component'],
     '#description'   => t('If you have not yet created a postal code component, go back and create one.'),
     '#required'      => TRUE,
+    //TODO: Not sure if this should be here
+      '#parents' => array('extra', 'postal_code_component'),
   );
 
   return $form;
 }
 
 function _webform_render_represent($component, $value = NULL, $filter = TRUE) {
-  static $done = false;
+  $node = isset($component['nid']) ? node_load($component['nid']) : NULL;
+
+  $element = array(
+    '#type' => 'checkboxes',
+    '#options' => array(),
+    '#title' => $filter ? _webform_filter_xss($component['name']) : $component['name'],
+    '#title_display' => $component['extra']['title_display'] ? $component['extra']['title_display'] : 'before',
+    '#required' => $component['mandatory'],
+    '#weight' => $component['weight'],
+    '#theme_wrappers' => array('webform_element'),
+    '#translatable' => array('title', 'description'),
+    '#attributes' => array('checked' => 'checked'),
+    '#pre_render' => array('webform_represent_pre_render_cleanup'),
+  );
 
-  if (!$done) {
-    drupal_add_js(drupal_get_path('module', 'webform_represent') . '/assets/webform_represent.js');
-    drupal_add_css(drupal_get_path('module', 'webform_represent') . '/assets/webform_represent.css');
-    drupal_add_js(array('webform_represent' => array('spinner' => drupal_get_path('module', 'webform_represent') . '/assets/webform_represent.gif')), 'setting');
-    $done = true;
+  // Handle disabling.
+  if ($component['extra']['disabled']) {
+    if ($filter) {
+      $element['#attributes']['readonly'] = 'readonly';
+    }
+    else {
+      $element['#disabled'] = TRUE;
+    }
   }
 
-  drupal_add_js(array('webform_represent' => array(
-    'lookups' => array(
-      $component['form_key'] => array(
-        'options_source'        => $component['extra']['options_source'],
-        'postal_code_component' => $component['extra']['postal_code_component'],
-      ),
-    ),
-  )), 'setting');
+  // Set default value.
+  if (isset($value)) {
+    // Set the value as an array.
+    $element['#default_value'] = array();
+    foreach ((array) $value as $key => $option_value) {
+      $element['#default_value'][] = $option_value;
+    }
+  }
 
-  webform_component_include('select');
-  return _webform_render_select($component, $value, $filter);
+  return $element;
 }
 
 function _webform_display_represent($component, $value, $format = 'html') {
diff --git a/includes/webform_represent.options.inc b/includes/webform_represent.options.inc
index d5bb49f..e86a9c1 100644
--- a/includes/webform_represent.options.inc
+++ b/includes/webform_represent.options.inc
@@ -5,37 +5,14 @@
  *   A collection of built-in select list options for Webform Represent.
  */
 
-/**
- * Option list containing the representatives in a representative set.
- */
-function webform_represent_options_representatives($component, $flat, $filter, $arguments) {
-  $options = array();
-
-  $resources = represent_representatives_by_set($arguments);
-  if (!empty($resources)) {
-    foreach ($resources as $resource) {
-      if (isset($resource->email)) {
-        // Skips mayors.
-        if (!empty($resource->district_name)) {
-          $options[$resource->email] = "$resource->name ($resource->district_name)";
-        }
-      }
-    }
+function webform_represent_options_source(){//$component, $flat, $arguments) {
+  webform_component_include('select');
+  $options = array('' => t('- Select -'));
 
-    // Remove representatives with non-unique emails.
-    foreach (array_count_values(array_keys($options)) as $email => $count) {
-      if ($count > 1) {
-        unset($options[$email]);
-
-        watchdog('Represent API', 'Duplicate email "@email" in set "@set"', array(
-          '@email' => $email,
-          '@set' => $arguments,
-        ), WATCHDOG_WARNING);
-      }
-    }
-
-    asort($options);
+  $names = webform_represent_representative_sets();
+  foreach ($names as $machine_name => $representative_set) {
+    $options[$machine_name] = $representative_set->name;
   }
-
+  asort($options);
   return $options;
 }
diff --git a/webform_represent.info b/webform_represent.info
index 6107a46..344afb2 100644
--- a/webform_represent.info
+++ b/webform_represent.info
@@ -1,6 +1,7 @@
 name = Webform Represent
 description = Creates a Represent Webform component.
-core = 6.x
+core = 7.x
 dependencies[] = webform
 dependencies[] = represent
 package = Webform
+
diff --git a/webform_represent.module b/webform_represent.module
index 98e025e..808ca5c 100644
--- a/webform_represent.module
+++ b/webform_represent.module
@@ -6,35 +6,20 @@
  */
 
 /**
- * Implements hook_menu().
+ * Implements hook_form_alter().
  */
-function webform_represent_menu() {
-  $items = array();
-  $items['webform_represent/ajax'] = array(
-    'page callback' => 'webform_represent_ajax',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  return $items;
-}
-
-/**
- * Performs the Represent API request.
- */
-function webform_represent_ajax() {
-  $return = array();
-
-  $matches = represent_representatives_by_postal_code($_GET['postal_code'], $_GET['sets']);
-  if (!empty($matches)) {
-    foreach ($matches as $set => $resources) {
-      $return[$set] = array();
-      foreach ($resources as $resource) {
-        $return[$set][] = $resource->email;
+function webform_represent_form_alter(&$form, &$form_state, $form_id) {
+  // Check to see if form is a webform
+  if (!strncmp($form_id, 'webform_', strlen('webform_'))) {
+    // If webform key exists in $form_state check to see if webform has represent components and build array of them.
+    if (array_key_exists('webform', $form_state)) {
+      foreach ($form_state['webform']['component_tree']['children'] as $key => $component) {
+        if ('represent' == $component['type']) {
+          webform_represent_alter_form_component($form, $form_state, $component);
+        }
       }
     }
   }
-
-  drupal_json($return);
 }
 
 /**
@@ -45,12 +30,19 @@ function webform_represent_webform_component_info() {
 
   $components['represent'] = array(
     'label' => t('Represent'),
-    'description' => t('Look up a representative by postal code.'),
+    'description' => t('Look up representatives by postal code.'),
     'features' => array(
-      // Do not show this component in e-mailed submissions.
-      'email' => FALSE,
-      // Allow this component to be used as an e-mail FROM or TO address.
+      'csv' => TRUE,
+      'email' => TRUE,
       'email_address' => TRUE,
+      'email_name' => FALSE,
+      'required' => TRUE,
+      'title_display' => TRUE,
+      'title_inline' => TRUE,
+      'conditional' => TRUE,
+      'group' => FALSE,
+      'spam_analysis' => FALSE,
+      'attachment' => FALSE,
     ),
     'file' => 'components/represent.inc',
   );
@@ -58,22 +50,60 @@ function webform_represent_webform_component_info() {
   return $components;
 }
 
-/**
- * Implements hook_webform_select_options_info().
+/*
+ *
  */
-function webform_represent_webform_select_options_info() {
-  $info = array();
-
-  foreach (webform_represent_representative_sets() as $machine_name => $resource) {
-    $info[$machine_name] = array(
-      'title'             => $resource->name,
-      'options callback'  => 'webform_represent_options_representatives',
-      'options arguments' => $machine_name,
-      'file'              => 'includes/webform_represent.options.inc',
-    );
+function webform_represent_alter_form_component(&$form, &$form_state, $component) {
+  if (isset($component['extra']['postal_code_component'])) {
+    if (isset($form_state['webform']['component_tree']['children'])) {
+      // TODO: Maybe use this? 'postal_code' => $form_state['values']['submitted'][$component['extra']['postal_code_component']],
+      $form_components = $form_state['webform']['component_tree']['children'];
+      $postal_code_name = $component['extra']['postal_code_component'];
+      if ($postal_code_cid = webform_represent_util_get_component_cid_by_name($form_components, $postal_code_name)) {
+
+        if (isset($form_state['values']['submitted'][$postal_code_cid])) {
+          $postal_code = $form_state['values']['submitted'][$postal_code_cid];
+          if (isset($component['extra']['options_source'])) {
+            $representative_sets = array_values($component['extra']['options_source']);
+            if ($resources = represent_representatives_by_postal_code($postal_code, $representative_sets)) {
+              $options = webform_represent_resource_options($resources);
+              $form['submitted'][$component['form_key']]['#options'] = $options;
+            } else {
+              // TODO: There were no resources found in Represent.  What should we do?
+              // TODO: Display error message at least
+              // Remove component.
+              unset($form['submitted'][$component['form_key']]);
+              // TODO: Not sure what this message stuff is for
+              /*
+              // Get message from component settings.
+              $message = $component['extra']['empty'];
+              // Check to see if full_html filter exists
+              if (!filter_format_load('full_html')) {
+                // Use fallback filter if full_html filter doesn't exist.
+                $message = check_markup($message);
+              }
+              else {
+                // Use full_html filter if it does exist.
+                $message = check_markup($message, 'full_html');
+              }
+              // Send message to user.
+              drupal_set_message(t($message), 'warning');
+              */
+            }
+          }
+        }
+      }
+    }
   }
+}
 
-  return $info;
+/**
+ * Pre render callback.
+ */
+function webform_represent_pre_render_cleanup($element) {
+  // So this is a bit of a puzzle.  Calling an empty pre_render
+  // seems to prevent the field label from appearing twice.
+  return $element;
 }
 
 /**
@@ -98,14 +128,59 @@ function webform_represent_representative_sets() {
 }
 
 /**
+ * Option list containing the representatives in a representative set.
+ */
+function webform_represent_resource_options($resources) {
+  $options = array();
+  foreach ($resources as $set => $set_resources) {
+    foreach ($set_resources as $resource) {
+      if (isset($resource->email)) {
+        // Skips mayors.
+        if (!empty($resource->district_name)) {
+          $options[$resource->email] = "$resource->name ($resource->district_name) $resource->elected_office, $resource->representative_set_name";
+        }
+      }
+    }
+  }
+
+  // Remove representatives with non-unique emails.
+  foreach (array_count_values(array_keys($options)) as $email => $count) {
+    if ($count > 1) {
+      unset($options[$email]);
+
+      watchdog('Represent API', 'Duplicate email "@email" in set "@set"', array(
+          '@email' => $email,
+          '@set' => $representative_set,
+      ), WATCHDOG_WARNING);
+    }
+  }
+  asort($options);
+  return $options;
+}
+
+
+/**
  * @return array
  *   Machine names of representative sets containing representatives from
  *   multiple jurisdictions.
  */
 function webform_represent_skip_representative_set() {
   return array(
-    'elus-municipaux-du-quebec',
-    'municipal-officials-of-alberta',
-    'municipal-officials-of-british-columbia',
+    /*
+        'elus-municipaux-du-quebec',
+        'municipal-officials-of-alberta',
+        'municipal-officials-of-british-columbia',
+    */
   );
 }
+
+/*
+ *
+ */
+function webform_represent_util_get_component_cid_by_name($form_components, $name) {
+  foreach ($form_components as $cid => $component) {
+    if (isset($component['form_key']) && $name == $component['form_key']) {
+      return $cid;
+    }
+  }
+}
