diff --git a/modules/salesforce_mapping/includes/salesforce_mapping.admin.inc b/modules/salesforce_mapping/includes/salesforce_mapping.admin.inc
index 6da3f85..a4358cc 100644
--- a/modules/salesforce_mapping/includes/salesforce_mapping.admin.inc
+++ b/modules/salesforce_mapping/includes/salesforce_mapping.admin.inc
@@ -262,11 +262,7 @@ function salesforce_mapping_form($form, &$form_state, SalesforceMapping $mapping
       $row['direction'] = array(
         '#id' => 'edit-direction-' . $delta,
         '#type' => 'radios',
-        '#options' => array(
-          SALESFORCE_MAPPING_DIRECTION_DRUPAL_SF => t('Drupal to SF'),
-          SALESFORCE_MAPPING_DIRECTION_SF_DRUPAL => t('SF to Drupal'),
-          SALESFORCE_MAPPING_DIRECTION_SYNC => t('Sync'),
-        ),
+        '#options' => _salesforce_mapping_get_direction_options(),
         '#required' => TRUE,
         '#default_value' => _salesforce_mapping_get_default_value('direction', $form_state, $delta),
       );
@@ -888,7 +884,7 @@ function _salesforce_mapping_get_default_value($field, &$form_state, $delta = NU
 
       case 'direction':
         // Set default for direction, which cannot be NULL like the others.
-        $value = SALESFORCE_MAPPING_DIRECTION_SYNC;
+        $value = end(array_keys(_salesforce_mapping_get_direction_options()));
         // No break for this case, should carry onto the default case.
       default:
         if (isset($form_state['input']['salesforce_field_mappings'][$delta][$field])) {
@@ -1000,10 +996,16 @@ function _salesforce_mapping_get_salesforce_object_type_options(&$form_state, $i
   else {
     $sfapi = salesforce_get_api();
     // Note that we're filtering SF object types to a reasonable subset.
-    $sfobjects = $sfapi->objects(array(
-      'updateable' => TRUE,
+    $sf_object_filter = array(
       'triggerable' => TRUE,
-    ));
+    );
+
+    //TODO: Handle this somewhere else to validate we can push to this object.
+    // if (module_exists('salesforce_push')) {
+    //   $sf_object_filter['updateable'] = TRUE;
+    // }
+    
+    $sfobjects = $sfapi->objects($sf_object_filter);
     $form_state['sfm_storage']['salesforce_object_type'] = $sfobjects;
   }
 
@@ -1135,18 +1137,49 @@ function _salesforce_mapping_get_drupal_type_options($include_select = TRUE) {
  * Return form options for available sync triggers.
  *
  * @return array
- *   Array of sync trigger options keyed by their machine name with their lable
+ *   Array of sync trigger options keyed by their machine name with their label
  *   as the value.
  */
 function _salesforce_mapping_get_sync_trigger_options() {
-  return array(
-    SALESFORCE_MAPPING_SYNC_DRUPAL_CREATE => t('Drupal entity create'),
-    SALESFORCE_MAPPING_SYNC_DRUPAL_UPDATE => t('Drupal entity update'),
-    SALESFORCE_MAPPING_SYNC_DRUPAL_DELETE => t('Drupal entity delete'),
-    SALESFORCE_MAPPING_SYNC_SF_CREATE => t('Salesforce object create'),
-    SALESFORCE_MAPPING_SYNC_SF_UPDATE => t('Salesforce object update'),
-    SALESFORCE_MAPPING_SYNC_SF_DELETE => t('Salesforce object delete'),
-  );
+  $options = array();
+  if (module_exists('salesforce_push')) {
+    $options += array(
+      SALESFORCE_MAPPING_SYNC_DRUPAL_CREATE => t('Drupal entity create'),
+      SALESFORCE_MAPPING_SYNC_DRUPAL_UPDATE => t('Drupal entity update'),
+      SALESFORCE_MAPPING_SYNC_DRUPAL_DELETE => t('Drupal entity delete'),
+    );
+  }
+  if (module_exists('salesforce_pull')) {
+    $options += array(
+      SALESFORCE_MAPPING_SYNC_SF_CREATE => t('Salesforce object create'),
+      SALESFORCE_MAPPING_SYNC_SF_UPDATE => t('Salesforce object update'),
+      SALESFORCE_MAPPING_SYNC_SF_DELETE => t('Salesforce object delete'),
+    );
+  }
+  return $options;
+}
+
+/**
+ * Return form options for available direction options.
+ *
+ * @return array
+ *   Array of direction options keyed by their machine name with their label
+ *   as the value.
+ */
+function _salesforce_mapping_get_direction_options() {
+  $options = array();
+  if (module_exists('salesforce_pull')) {
+    $options += array(
+      SALESFORCE_MAPPING_DIRECTION_SF_DRUPAL => t('SF to Drupal'),
+    );
+  }
+  if (module_exists('salesforce_push')) {
+    $options += array(
+      SALESFORCE_MAPPING_DIRECTION_DRUPAL_SF => t('Drupal to SF'),
+      SALESFORCE_MAPPING_DIRECTION_SYNC => t('Sync'),
+    );
+  }
+  return $options;
 }
 
 /**
@@ -1196,6 +1229,6 @@ function _salesforce_mapping_get_empty_field_map_row() {
     'drupal_field' => '',
     'salesforce_field' => '',
     'key' => '',
-    'direction' => SALESFORCE_MAPPING_DIRECTION_SYNC,
+    'direction' => end(array_keys(_salesforce_mapping_get_direction_options())),
   );
 }
diff --git a/modules/salesforce_mapping/salesforce_mapping.install b/modules/salesforce_mapping/salesforce_mapping.install
index c042cf6..fffe6af 100644
--- a/modules/salesforce_mapping/salesforce_mapping.install
+++ b/modules/salesforce_mapping/salesforce_mapping.install
@@ -1,6 +1,29 @@
 <?php
 
 /**
+ * Implements hook_requirements().
+ */
+function salesforce_mapping_requirements($phase) {
+  $requirements = array();
+  $t = get_t();
+  switch($phase) {
+    case 'install':
+      drupal_set_message(t('At least one sync method (Push or Pull) must be <a href="/admin/modules">enabled</a> to configure Salesforce Mappings.'), 'status', FALSE);
+      break;
+    case 'runtime':
+      if (!module_exists('salesforce_pull') && !module_exists('salesforce_push')) {
+        $requirements['salesforce_mapping'] = array(
+          'title' => $t('Salesforce Mapping'),
+          'description' => $t('<a href="/admin/modules">Enable</a> at least one sync method (Push or Pull) to configure Salesforce Mappings.'),
+          'severity' => REQUIREMENT_ERROR,
+        );
+      }
+      break;
+  }
+  return $requirements;
+}
+
+/**
  * @file
  * Install and uninstall instructions for salesforce_mapping.
  */
diff --git a/modules/salesforce_mapping/salesforce_mapping.module b/modules/salesforce_mapping/salesforce_mapping.module
index 8845514..e478f8b 100644
--- a/modules/salesforce_mapping/salesforce_mapping.module
+++ b/modules/salesforce_mapping/salesforce_mapping.module
@@ -50,6 +50,10 @@ define('SALESFORCE_MAPPING_STATUS_ERROR', 0);
  * Access callback for managing Salesforce mappings.
  */
 function salesforce_mappings_access() {
+  if (!module_exists('salesforce_pull') && !module_exists('salesforce_push')) {
+    return FALSE;
+  }
+
   if (user_access('administer salesforce mapping')) {
     $sfapi = salesforce_get_api();
     return $sfapi->isAuthorized();
@@ -58,6 +62,15 @@ function salesforce_mappings_access() {
 }
 
 /**
+ * Implements hook_page_alter().
+ */
+function salesforce_mapping_page_alter(&$page) {
+  if (current_path() == 'admin/structure/salesforce' && !module_exists('salesforce_pull') && !module_exists('salesforce_push')) {
+    drupal_set_message(t('At least one sync method (Push or Pull) must be <a href="/admin/modules">enabled</a> to configure Salesforce Mappings.'), 'error', FALSE);
+  }
+}
+
+/**
  * Implements hook_entity_info().
  */
 function salesforce_mapping_entity_info() {
diff --git a/salesforce.module b/salesforce.module
index 787f5ea..cb1654b 100644
--- a/salesforce.module
+++ b/salesforce.module
@@ -15,7 +15,7 @@ function salesforce_help($path, $arg) {
     case 'admin/structure/salesforce':
       $output = '';
       if (!module_exists('salesforce_mapping')) {
-        $output .= '<p>' . t('In order to configure Salesforce Mappings, you must first enable the <a href="/admin/modules">Salesforce Mapping</a> module.') . '</p>';
+        $output .= '<p>' . t('In order to configure Salesforce Mappings, you must first enable the <a href="/admin/modules">Salesforce Mapping</a> module and at least one sync method (Push or Pull).') . '</p>';
       }
       if (!variable_get('salesforce_consumer_secret', NULL) || !variable_get('salesforce_consumer_key', NULL) || !variable_get('salesforce_refresh_token', NULL)) {
         $output .= '<p>' . t('You must !authorize in order to configure Salesforce Mappings.', array('!authorize' => l(t('authorize your account with Salesforce'), 'admin/config/salesforce/authorize'))) . '</p>';
