diff --git a/security_review.checks.inc b/security_review.checks.inc
index 38eb18e..c7cbefb 100644
--- a/security_review.checks.inc
+++ b/security_review.checks.inc
@@ -818,4 +818,105 @@ function security_review_check_email_passwords_help($results = NULL) {
     }
   }
   return $element;
-}
\ No newline at end of file
+}
+
+
+/**
+ * Generic functions to test if a module is enabled.
+ */
+function security_review_check_module_enabled($module) {
+  $result = FALSE;
+  $modules = module_list();
+  if (isset($modules[$module])) {
+  	$result = TRUE;	
+  }
+  return array('result' => $result);
+}
+
+function security_review_check_module_enabled_help($title, $descriptions, $module, $fail_descs) {
+  $element['title'] = t($title);
+  $element['descriptions'][] = t($descriptions);
+  $last_check = security_review_get_last_check('security_review', strtolower($module));
+  if ($last_check['skip'] == '1') {
+    $element['findings']['descriptions'][] = _security_review_check_skipped($last_check);
+  }
+  elseif ($last_check['result'] == '0') {
+  	foreach($fail_descs as $findings) {
+  		$element['findings']['descriptions'][] = t($findings);
+  	}
+  }
+  $element['recommendation'] = TRUE;
+  return $element;
+}
+
+/**
+ * Check if the syslog module is enabled.
+ */
+function security_review_check_syslog_module() {
+  return security_review_check_module_enabled('syslog');
+}
+
+function security_review_check_syslog_module_help($result = NULL) {
+  $title = 'Syslog module';
+  $descriptions = "Drupal includes a valuable Syslog module as " .
+  		"part of core.  Enabling this module allows the operating system to manage " .
+  		"Drupal logs (including intrusion and error detection capabilities).  This " .
+  		"feature also allows for easier troubleshooting of Drupal.  Because of these " .
+  		"capabilities, enabling the syslog module can greatly increase the security " .
+  		"of your Drupal site.";
+  $module = 'syslog';
+  $fail_descs = array('The Syslog module is not enabled.',
+    t('<a href="!link">Enable the Syslog module.</a>', array('!link' => url('admin/build/modules')))
+  );
+  return security_review_check_module_enabled_help($title, $descriptions, $module, $fail_descs);
+}
+
+/**
+ * Check if the password strength module is enabled.
+ */
+function security_review_check_password_strength_module() {
+  return security_review_check_module_enabled('password_strength');
+}
+
+function security_review_check_password_strength_module_help($result = NULL) {
+  $title = 'Password strength module';
+  $descriptions = "Poor password choice is the leading cause of " .
+  		"brute force attack (password guessing) success.  Choosing a strong password " .
+  		"is essential for site security.  The Drupal Password strength module " .
+  		"(<a href='http://drupal.org/project/password_strength'>" .
+  		"http://drupal.org/project/password_strength</a>) allows sites to force users " .
+  		"to choose strong passwords.";
+  $module = 'password_strength';
+  $fail_descs = array(
+	'The password strength module is not enabled.',
+    t('<a href="!link">Enable the password strength module.</a>', array('!link' => url('admin/build/modules')))
+  );
+  return security_review_check_module_enabled_help($title, $descriptions, $module, $fail_descs);
+}
+
+/**
+ * Check if the login security module is enabled.
+ */
+function security_review_check_login_security_module() {
+  return security_review_check_module_enabled('login_security');
+}
+
+function security_review_check_login_security_module_help($result = NULL) {
+  $title = 'Login security module';
+  $descriptions = "WASC-21 Anti-Automation " .
+  		"(<a href='http://projects.webappsec.org/w/page/13246938/Insufficient Anti-automation'>" .
+  		"http://projects.webappsec.org/w/page/13246938/Insufficient%20Anti-automation</a>) " .
+  		"is described as failure to prevent an automated attack (such as brute force " .
+  		"password guessing) against a web application.  The Drupal login security module " .
+  		"(<a href='http://drupal.org/project/login_security'>http://drupal.org/project/login_security</a>) " .
+  		"allows sites to prevent brute force attacks by rate limiting logins, alerting " .
+  		"administrators of attacks, and banning offending IP's or users.  The module is a " .
+  		"simple and effective way to prevent password guessing attacks.'";
+  $module = 'login_security';
+  $fail_descs = array(
+	'The login security module is not enabled.',
+    t('<a href="!link">Enable the login security module.</a>', array('!link' => url('admin/build/modules')))
+  );
+  return security_review_check_module_enabled_help($title, $descriptions, $module, $fail_descs);
+}
+
diff --git a/security_review.module b/security_review.module
index 3f66fb4..a70ac87 100644
--- a/security_review.module
+++ b/security_review.module
@@ -80,7 +80,10 @@ function security_review_page() {
   // Retrieve results from last run of the checklist.
   $results = db_query("SELECT namespace, reviewcheck, result, lastrun, skip, skiptime, skipuid FROM {security_review}");
   while ($result = db_fetch_array($results)) {
-    $checks[] = $result;
+  	// Mask toggles of recommendations from seeming like results
+  	if ($result['lastrun'] > 0) {
+      $checks[] = $result;
+  	}
   }
   // Only users with the proper permission can run the checklist.
   if (user_access('run security checks')) {
@@ -106,6 +109,12 @@ function security_review_page() {
  */
 function security_review_get_last_check($namespace, $check_name) {
   $check = db_fetch_array(db_query("SELECT namespace, reviewcheck, result, lastrun, skip, skiptime, skipuid FROM {security_review} WHERE namespace = '%s' AND reviewcheck = '%s'", $namespace, $check_name));
+  // If it's null we need to set recommendations to default skip
+  $checklist = module_invoke_all('security_checks');
+  if ($checklist[$namespace][$check_name]['recommendation'] === TRUE && empty($check)) {
+  	// If it's a recommendation, spoof the return so it's skipped by default
+  	$check['skip'] = 1;
+  }
   return !empty($check) ? $check : NULL;
 }
 
@@ -166,6 +175,10 @@ function security_review_reviewed($checklist, $checks, $namespace = NULL) {
 
   $header = t('Review results from last run');
   $desc = t("Here you can review the results from the last run of the checklist. Checks are not always perfectly correct in their procedure and result. You can keep a check from running by clicking the 'Skip' link beside it. You can run the checklist again by expanding the fieldset above.");
+  $recommendation_header = t('Recommendations');
+  $recommendation_desc = t("Recommendations are checks that are environment agnostic and " .
+  		"may not necessarily present security concerns.  Review recommendations carefully " .
+  		"including the 'Details' link for further information.");
   foreach ($checks as $check) {
     $message = $check['result'] ? $checklist[$check['namespace']][$check['reviewcheck']]['success'] : $checklist[$check['namespace']][$check['reviewcheck']]['failure'];
     $class = $check['skip'] ? 'info' : ($check['result'] ? 'ok' : 'error');
@@ -175,15 +188,34 @@ function security_review_reviewed($checklist, $checks, $namespace = NULL) {
       'query' => array('token' => $token),
       'attributes' => array('class' => 'sec-rev-dyn'),
     );
-    $items[] = array(
-      'value' => $check['result'],
-      'class' => $class,
-      'message' => $message,
-      'help_link' => l(t('Details'), 'admin/reports/security-review/help/' . $check['namespace'] . '/' . $check['reviewcheck']),
-      'toggle_link' => l($toggle, 'admin/reports/security-review/toggle/' . $check['reviewcheck'], $link_options),
-    );
+    if ($checklist[$check['namespace']][$check['reviewcheck']]['recommendation']) {
+    	$recommendations[] = array(
+        'value' => $check['result'],
+        'class' => $class,
+        'message' => $message,
+        'help_link' => l(t('Details'), 'admin/reports/security-review/help/' . $check['namespace'] . '/' . $check['reviewcheck']),
+        'toggle_link' => l($toggle, 'admin/reports/security-review/toggle/' . $check['reviewcheck'], $link_options),
+      );
+    }
+    else {
+    	$items[] = array(
+        'value' => $check['result'],
+        'class' => $class,
+        'message' => $message,
+        'help_link' => l(t('Details'), 'admin/reports/security-review/help/' . $check['namespace'] . '/' . $check['reviewcheck']),
+        'toggle_link' => l($toggle, 'admin/reports/security-review/toggle/' . $check['reviewcheck'], $link_options),
+      );
+    }
+    
   }
   $output .= theme('security_review_reviewed', $items, $header, $desc);
+  if (!empty($recommendations)) {
+  	$output .= theme('security_review_reviewed', 
+                      $recommendations, 
+  	                  $recommendation_header, 
+                      $recommendation_desc);
+  }
+  
   return $output;
 }
 
@@ -565,7 +597,19 @@ function security_review_security_checks() {
     'success' => t('User passwords are not included in emails.'),
     'failure' => t('User passwords are included in emails.'),
     'file' => 'security_review.checks',
-  );
+  ); 
+  $check_modules = array('syslog', 'password_strength', 'login_security');
+  foreach ($check_modules as $module) {
+  	$checks[$module] = array(
+      'title' => t($module . ' module enabled'),
+      'type' => 'callback',
+      'callback' => 'security_review_check_' . $module . '_module',
+      'success' => t('The ' . $module . ' module is enabled.'),
+      'failure' => t('The ' . $module . ' module is <em>not</em> enabled.'),
+      'file' => 'security_review.checks',
+      'recommendation' => TRUE,
+    );
+  }
 
   return array('security_review' => $checks);
 }
@@ -821,12 +865,14 @@ function security_review_settings() {
     '#default_value' => variable_get('security_review_log', TRUE),
   );
   $options = $values = array();
+  $recommendation_options = $recommendation_values = array();
   $checklist = module_invoke_all('security_checks');
   foreach ($checklist as $module => $checks) {
     foreach ($checks as $check_name => $check) {
       // Determine if check is being skipped.
       $sql = "SELECT namespace, reviewcheck, result, lastrun, skip, skiptime, skipuid FROM {security_review} WHERE namespace = '%s' AND reviewcheck = '%s'";
       $record = db_fetch_object(db_query($sql, $module, $check_name));
+      if ($check['recommendation'] !== TRUE) {
       if (!empty($record) && $record->skip) {
         $values[] = $check_name;
         $label = t('!name <em>skipped by UID !uid on !date</em>', array('!name' => $check['title'], '!uid' => $record->skipuid, '!date' => format_date($record->skiptime)));
@@ -835,6 +881,14 @@ function security_review_settings() {
         $label = $check['title'];
       }
       $options[$check_name] = $label;
+      }
+      else {
+      	if (empty($record) || $record->skip) {
+      	  $recommendation_values[] = $check_name;
+      	}
+      	$label = $check['title'];
+      	$recommendation_options[$check_name] = $label;
+      }
     }
   }
   $form['security_review_adv']['security_review_skip'] = array(
@@ -844,9 +898,23 @@ function security_review_settings() {
     '#options' => $options,
     '#default_value' => $values,
   );
+  $form['security_review_recommendations'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Recommendations'),
+    '#collapsible' => TRUE,
+    '#collapsed' => FALSE,
+  );
+  $form['security_review_recommendations']['security_review_recommendations_skip'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Checks to skip'),
+    '#description' => t('Skip running certain recommendations. This can also ' .
+    		'be set on the <em>Run & review</em> page.'),
+    '#options' => $recommendation_options,
+    '#default_value' => $recommendation_values,
+  );
+
   // Add a submit handler to set the skipped checks.
   $form['#submit'][] = '_security_review_settings_submit';
-
   return system_settings_form($form);
 }
 
@@ -859,8 +927,9 @@ function _security_review_settings_submit($form, &$form_state) {
     foreach ($checks as $check_name => $check) {
       $sql = "SELECT namespace, reviewcheck, result, lastrun, skip, skiptime, skipuid FROM {security_review} WHERE namespace = '%s' AND reviewcheck = '%s'";
       $record = db_fetch_object(db_query($sql, $module, $check_name));
+      $recommendation = (isset($form_state['values']['security_review_skip'][$check_name])) ? FALSE : TRUE;
       // Toggle the skip.
-      if (isset($record->skip) && $record->skip && $form_state['values']['security_review_skip'][$check_name] == 0) {
+      if (!$recommendation && isset($record->skip) && $record->skip && $form_state['values']['security_review_skip'][$check_name] == 0) {
         // We were skipping, so stop skipping and clear skip identifiers.
         $record->skip = FALSE;
         $record->skiptime = 0;
@@ -872,7 +941,7 @@ function _security_review_settings_submit($form, &$form_state) {
           _security_review_log($module, $check_name, $message, $variables, WATCHDOG_INFO);
         }
       }
-      elseif ($form_state['values']['security_review_skip'][$check_name] !== 0) {
+      elseif (!$recommendation && $form_state['values']['security_review_skip'][$check_name] !== 0) {
         // Start skipping and record who made the decision and when.
         if (empty($record)) {
           $record = new stdClass();
@@ -893,6 +962,42 @@ function _security_review_settings_submit($form, &$form_state) {
           _security_review_log($module, $check_name, $message, $variables, WATCHDOG_INFO);
         }
       }
+      // We treat recommendations differently since they default to no check
+      elseif ($recommendation) {
+      	if ($form_state['values']['security_review_recommendations_skip'][$check_name] === 0) {
+      		// Enable checking
+      		if (empty($record)) {
+              $record = new stdClass();
+              $update = NULL;
+            }
+            else {
+              $update = array('namespace', 'reviewcheck');
+            }
+      		$record = new stdClass();
+	      	$record->namespace = $module;
+	        $record->reviewcheck = $check_name;
+	        $record->skip = FALSE;
+	        $record->skiptime = time();
+	        $record->skipuid = $user->uid;
+	        $message = '!name check enabled';
+	        $result = drupal_write_record('security_review', $record, $update);
+	        if ($log) {
+              $variables = array('!name' => $check['title']);
+              _security_review_log($module, $check_name, $message, $variables, WATCHDOG_INFO);
+            }
+      	}
+      	elseif (isset($record->skip) && $form_state['values']['security_review_recommendations_skip'][$check_name] !== 0) {
+          $record->skip = TRUE;
+          $record->skiptime = 0;
+          $record->skipuid = NULL;
+          $message = '!name check skipped';
+          $result = drupal_write_record('security_review', $record, array('namespace', 'reviewcheck'));
+          if ($log) {
+            $variables = array('!name' => $check['title']);
+            _security_review_log($module, $check_name, $message, $variables, WATCHDOG_INFO);
+          }
+      	}
+      }
     }
   }
   // Unset security_review_skip to keep it from being written to a variable.
