diff --git a/classified.admin.inc b/classified.admin.inc
index 34819ff..f850098 100644
--- a/classified.admin.inc
+++ b/classified.admin.inc
@@ -232,3 +232,74 @@ function theme_classified_admin_lifetimes($variables) {
   $ret .= drupal_render_children($form);
   return $ret;
 }
+
+/**
+ * Implements hook_form().
+ */
+
+function classified_types_admin_form ($form, &$form_state) {
+  $types = node_type_get_types();
+  $options = array();
+  foreach ($types as $key => $value) {
+    if ($value->type != 'classified' && ($value->base == 'node_content' || $value->base == 'classified')) {
+      $options[$key] = $value->name;
+    }
+  }
+  $form['classified_content_types'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Content Types'),
+    '#description' => t('Select types to make it to a classified type.<strong>Flush Cache</strong> after setting, please.'),
+    '#options' => $options,
+    '#default_value' => _classified_types_variable_get(),
+
+  );
+
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save configuration'),
+  );
+  return $form;
+}
+
+/**
+ * Implements hook_form_submit().
+ */
+
+function classified_types_admin_form_submit ($form, $form_state) {
+  $types = $form_state['values']['classified_content_types'];
+  foreach ($types as $key => $value) {
+    if (isset($value) && strlen(trim($value)) == strlen(trim($key))) {
+      // set selected type to classified if checked
+      classified_types_set_type($key, 'classified');
+    } else {
+      // set selected type to default if unchecked
+      classified_types_set_type($key);
+    }
+  }
+  variable_set('classified_content_types', $types);
+}
+
+
+function classified_types_set_type ($type, $module = 'node') {
+  // set selected type to classified http://drupal.org/node/350938
+  if ($module == 'node') {
+    $base = 'node_content';
+  } else {
+    $base = $module;
+  }
+
+  $txn = db_transaction();
+  try {
+    db_update('node_type')
+      ->condition('type', $type)
+      ->fields(array('base' => $base, 'module' => $module))
+      ->execute();
+  }
+  catch (Exception $e) {
+    // Something went wrong somewhere, so roll back now.
+    $txn->rollback();
+    // Log the exception to watchdog.
+    watchdog_exception('classified_types', $e);
+  }
+}
diff --git a/classified.module b/classified.module
index 61b9a01..e4afe01 100644
--- a/classified.module
+++ b/classified.module
@@ -44,7 +44,7 @@ function _classified_block_view_popular() {
     $results = $q->fields('n', array('nid', 'title'))
       ->fields($td, array('name'))
       ->condition('n.status', 1)
-      ->condition('n.type', 'classified')
+      ->condition('n.type', classified_selected_types_get(), 'IN')
       ->condition("$td.vid", $vid)
       ->addTag('node_access')
       ->orderBy("$nc.totalcount", 'DESC')
@@ -91,7 +91,7 @@ function _classified_block_view_recent() {
   $results = $q->fields('n', array('nid', 'title'))
     ->fields($td, array('name'))
     ->condition('n.status', 1)
-    ->condition('n.type', 'classified')
+    ->condition('n.type', classified_selected_types_get(), 'IN')
     ->condition("$td.vid", $vid)
     ->orderBy('n.created', 'DESC')
     ->orderBy('n.changed', 'DESC')
@@ -133,7 +133,7 @@ function _classified_block_view_stats() {
   $q->addExpression('COUNT(n.nid)', 'nid_count');
   $changed = $q->addExpression('n.changed > :yesterday', 'changed', array(':yesterday' => $yesterday));
   $status = $q->addField('n', 'status');
-  $results = $q->condition('n.type', 'classified')
+  $results = $q->condition('n.type', classified_selected_types_get(), 'IN')
     ->groupBy($changed)
     ->groupBy($status)
     ->execute();
@@ -590,7 +590,7 @@ function _classified_page_term($term) {
   $cn = $q->innerJoin('classified_node', 'cn', 'n.vid = cn.vid');
   $ti = $q->innerJoin('taxonomy_index', 'ti', 'n.nid = ti.nid');
   $nid_alias = $q->addField('n', 'nid', 'id');
-  $q->condition('n.type', 'classified')
+  $q->condition('n.type', classified_selected_types_get(), 'IN')
     ->condition("$ti.tid", $term->tid)
     ->orderBy("$cn.expires")
     ->orderBy("n.changed")
@@ -635,7 +635,7 @@ function _classified_page_user_ads($account) {
     ->limit(10);
   $cn = $q->innerJoin('classified_node', 'cn', 'n.vid = cn.vid');
   $nid_alias = $q->addField('n', 'nid', 'id');
-  $q->condition('n.type', 'classified')
+  $q->condition('n.type', classified_selected_types_get(), 'IN')
     ->condition('n.uid', $account->uid)
     ->condition('n.status', $min_status, '>=')
     ->orderBy("$cn.expires")
@@ -913,22 +913,28 @@ function classified_entity_info_alter(&$entity_info) {
  * Allow repositioning of the expires box
  */
 function classified_field_extra_fields() {
-  $extra['node']['classified'] = array(
-    'form' => array(
-      'expires_fs' => array(
-        'label' => t('Ad Expiration'),
-        'description' => NULL,
-        'weight' => 0,
-      ),
-    ),
-    'display' => array(
-      'expires' => array(
-        'label' => t('Ad expiration'),
-        'description' => t('Publication limit for ad'),
-        'weight' => 2,
-      ),
-    ),
-  );
+  $types = variable_get('classified_content_types', array());
+
+  foreach ($types as $key => $value) {
+    if (isset($value) && strlen(trim($value)) == strlen(trim($key))) {
+      $extra['node']["$key"] = array(
+        'form' => array(
+          'expires_fs' => array(
+            'label' => t('Ad Expiration'),
+            'description' => NULL,
+            'weight' => 0,
+          ),
+        ),
+        'display' => array(
+          'expires' => array(
+            'label' => t('Ad expiration'),
+            'description' => t('Publication limit for ad'),
+            'weight' => 2,
+          ),
+        ),
+      );
+    }
+  }
 
   return $extra;
 }
@@ -1234,6 +1240,15 @@ function classified_menu() {
     'access arguments' => array('administer classified ads'),
   );
 
+  $items['admin/config/content/classified/types'] = array(
+    'title' => 'Classified Types',
+    'description' => 'Configure Content Types to Classified.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('classified_types_admin_form'),
+    'file' => 'classified.admin.inc',
+    'access arguments' => array('administer classified ads'),
+  );
+
   $items['classified'] = array(
     'page callback' => '_classified_page_overview',
     'title' => 'Classified Ads',
@@ -1302,7 +1317,7 @@ function classified_node_access($node, $op, $account) {
     : $node->type;
 
   // Ads admin bypasses checks.
-  if ($type == 'classified' && user_access('administer classified ads', $account)) {
+  if (in_array($type, classified_selected_types_get()) && user_access('administer classified ads', $account)) {
     $ret = NODE_ACCESS_ALLOW;
   }
   // Other checks are defined by node.module permissions. Do not override them.
@@ -1320,19 +1335,37 @@ function classified_node_access($node, $op, $account) {
  *   "match nodeapi $node->type for spam module to add spam reporting links"
  */
 function classified_node_info() {
-  $ret = array(
-    'classified' => array(
-      // Cannot call node_get_types() since it ends up calling this code.
-      'name' => t('Classified Ad'),
+
+  $info = array();
+  // Get selected types infomations
+  $result = db_select('node_type', 'nt')
+    ->fields('nt', array('type', 'name', 'description'))
+    ->condition('type', classified_selected_types_get(),'IN')
+    ->execute();
+  // Build types Info
+  foreach ($result as $type) {
+    $info["$type->type"] = array(
+      'name' => t($type->name),
       'base' => 'classified',
-      'description' => t('Contains a title, a body, and an administrator-defined expiration date'),
+      'module' => 'classified',
+      'description' => t($type->description),
       'has_title' => TRUE,
       'title_label' => t('Ad Title'),
       'locked' => TRUE,
-    ),
+    );
+  }
+
+  $info['classified'] = array(
+    // Cannot call node_get_types() since it ends up calling this code.
+    'name' => t('Classified Ad'),
+    'base' => 'classified',
+    'description' => t('Contains a title, a body, and an administrator-defined expiration date'),
+    'has_title' => TRUE,
+    'title_label' => t('Ad Title'),
+    'locked' => TRUE,
   );
 
-  return $ret;
+  return $info;
 }
 
 /**
@@ -1743,3 +1776,33 @@ function classified_url_outbound_alter(&$path, &$options, $original_path) {
     }
   }
 }
+
+/**
+ * Return a classified types variable.
+ */
+function _classified_types_variable_get() {
+  static $variables = array();
+  $variables = variable_get('classified_content_types', array());
+  if (empty($variables)) {
+    $defaults = array('classified_content_types' => array());
+    $variables = array_merge($defaults, $variables);
+  }
+
+  return $variables;
+}
+
+/**
+ * Return selected classified types array.
+ */
+function classified_selected_types_get() {
+  $types = variable_get('classified_content_types', array());
+
+  $classified_types = array();
+  foreach ($types as $key => $value) {
+    if (isset($value) && strlen(trim($value)) == strlen(trim($key))) {
+      $classified_types[] = $key;
+    }
+  }
+
+  return $classified_types;
+}
diff --git a/classified.scheduled.inc b/classified.scheduled.inc
index a9559d0..e121f04 100644
--- a/classified.scheduled.inc
+++ b/classified.scheduled.inc
@@ -56,7 +56,7 @@ function _classified_scheduled_build_expire($time = NULL) {
   $q = db_select('node', 'n')->comment(__FUNCTION__);
   $cn = $q->innerJoin('classified_node', 'cn', 'n.nid = cn.nid');
   $results = $q->fields('n', array('nid', 'title', 'uid'))
-    ->condition('n.type', 'classified')
+    ->condition('n.type', classified_selected_types_get(), 'IN')
     ->condition('n.status', 1)
     ->condition("$cn.expires", $expires, '<')
     ->execute();
@@ -151,7 +151,7 @@ function _classified_scheduled_build_notify($kind, $time = NULL) {
   switch ($kind) {
     case 'half-life':
       // cn.notify < half-life, now > half-life.
-      $q->condition('n.type', 'classified')
+      $q->condition('n.type', classified_selected_types_get(), 'IN')
         ->condition('n.status', 0, '!=')
         ->where("$cn.notify < (n.changed + $cn.expires) / 2")
         ->where("(n.changed + $cn.expires) / 2 < $now");
@@ -159,7 +159,7 @@ function _classified_scheduled_build_notify($kind, $time = NULL) {
 
     case 'pre-expire':
       // cn.notify < expiration - 1 day, now > expiration - 1 day.
-      $q->condition('n.type', 'classified')
+      $q->condition('n.type', classified_selected_types_get(), 'IN')
         ->condition('n.status', 0, '!=')
         ->where("$cn.notify < $cn.expires - 86400")
         ->condition("$cn.expires", $now + 86400, '<');
@@ -169,7 +169,7 @@ function _classified_scheduled_build_notify($kind, $time = NULL) {
       // cn.notify < purge - 1 day, now > purge - 1 day
       // 'grace' is in days.
       $grace = (_classified_get('grace') - 1) * 24 * 60 * 60;
-      $q->condition('n.type', 'classified')
+      $q->condition('n.type', classified_selected_types_get(), 'IN')
         ->condition('n.status', 0)
         ->where("$cn.notify < $cn.expires + $grace - 86400")
         ->condition("$cn.expires", $now - $grace, '<');
@@ -240,7 +240,7 @@ function _classified_scheduled_build_purge($time = NULL) {
   $cn = $q->innerJoin('classified_node', 'cn', 'n.nid = cn.nid');
 
   $results = $q->fields('n', array('nid', 'title', 'uid'))
-    ->condition('n.type', 'classified')
+    ->condition('n.type', classified_selected_types_get(), 'IN')
     ->condition("$cn.expires", $limit, '<')
     ->execute()
     ->fetchAll();
diff --git a/classified.tokens.inc b/classified.tokens.inc
index b23343c..8fab6ea 100644
--- a/classified.tokens.inc
+++ b/classified.tokens.inc
@@ -101,7 +101,7 @@ function classified_tokens($type, $tokens, array $data = array(), array $options
           ->range(0, 10);
         $cn = $q->innerJoin('classified_node', 'cn', 'n.vid = cn.vid');
         $nid_alias = $q->addField('n', 'nid', 'id');
-        $q->condition('n.type', 'classified')
+        $q->condition('n.type', classified_selected_types_get(), 'IN')
           ->condition('n.uid', $account->uid)
           ->condition('n.status', $min_status, '>=')
           ->orderBy("$cn.expires")
@@ -125,7 +125,7 @@ function classified_tokens($type, $tokens, array $data = array(), array $options
           ->fields('n', array('nid', 'title'))
           ->range(0, 10);
         $cn = $q->innerJoin('classified_node', 'cn', 'n.vid = cn.vid');
-        $q->condition('n.type', 'classified')
+        $q->condition('n.type', classified_selected_types_get(), 'IN')
           ->condition('n.uid', $account->uid)
           ->condition('n.status', $min_status, '>=')
           ->orderBy("$cn.expires")
diff --git a/plugins/content_types/classified_expires.inc b/plugins/content_types/classified_expires.inc
index 432c793..790dfb8 100644
--- a/plugins/content_types/classified_expires.inc
+++ b/plugins/content_types/classified_expires.inc
@@ -53,7 +53,7 @@ function classified_classified_expires_content_type_render($subtype, $conf, $pan
 
   // Get a shortcut to the node.
   $node = $context->data;
-  if ($node->type != 'classified') {
+  if (!in_array($node->type, classified_selected_types_get())) {
     return;
   }
 
