diff --git a/commerce_physical.module b/commerce_physical.module
index 2eba2cb..30331f8 100644
--- a/commerce_physical.module
+++ b/commerce_physical.module
@@ -65,21 +65,20 @@ function commerce_physical_commerce_checkout_pane_info_alter(&$checkout_panes) {
  */
 function commerce_physical_entity_weight_field_name($entity_type, $entity) {
   $bundle = field_extract_bundle($entity_type, $entity);
-  $field_name = NULL;
+  $field_name = variable_get('commerce_physical_weight_product_type_' . $bundle, FALSE);
 
-  // Look for the first weight field available for the entity.
-  foreach (field_info_instances($entity_type, $bundle) as $instance_name => $instance) {
-    // Load the field info for the current instance.
-    $field = field_info_field($instance['field_name']);
+  if (!empty($field_name)) {
+    $field = field_info_field($field_name);
 
-    // If it's of the proper type...
-    if ($field['type'] == 'physical_weight') {
-      // Save its name and exit the loop.
-      $field_name = $instance_name;
-      break;
+    if (empty($field_name)) {
+      $field_name = FALSE;
     }
   }
 
+  if (empty($field_name)) {
+    $field_name = NULL;
+  }
+
   // Allow other modules to specify a different field name.
   drupal_alter('commerce_physical_entity_weight_field_name', $field_name, $entity_type, $entity);
 
@@ -182,21 +181,20 @@ function commerce_physical_order_weight($order, $unit = 'lb') {
  */
 function commerce_physical_entity_dimensions_field_name($entity_type, $entity) {
   $bundle = field_extract_bundle($entity_type, $entity);
-  $field_name = NULL;
+  $field_name = variable_get('commerce_physical_dimensions_product_type_' . $bundle, FALSE);
 
-  // Look for the first dimensions field available for the entity.
-  foreach (field_info_instances($entity_type, $bundle) as $instance_name => $instance) {
-    // Load the field info for the current instance.
-    $field = field_info_field($instance['field_name']);
+  if (!empty($field_name)) {
+    $field = field_info_field($field_name);
 
-    // If it's of the proper type...
-    if ($field['type'] == 'physical_dimensions') {
-      // Save its name and exit the loop.
-      $field_name = $instance_name;
-      break;
+    if (empty($field_name)) {
+      $field_name = FALSE;
     }
   }
 
+  if (empty($field_name)) {
+    $field_name = NULL;
+  }
+
   // Allow other modules to specify a different field name.
   drupal_alter('commerce_physical_entity_dimensions_field_name', $field_name, $entity_type, $entity);
 
diff --git a/includes/commerce_physical.admin.inc b/includes/commerce_physical.admin.inc
index 2ff2872..a17b7e6 100644
--- a/includes/commerce_physical.admin.inc
+++ b/includes/commerce_physical.admin.inc
@@ -1,6 +1,50 @@
 <?php
 
 function commerce_physical_settings_form($form, &$form_state) {
+  foreach (commerce_product_types() as $type => $product_type) {
+    $form[$type] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Configure physical attributes for %product_type product type', array('%product_type' => $product_type['name'])),
+      '#description' => t('Here you can set the physical fields that should be used for storage and shipping calculations. You can create, modify and delete these fields <a href="@product_field_manage_url">here</a>.', array('@product_field_manage_url' => url('admin/commerce/products/types/' . $type . '/fields'))),
+    );
+
+    $weight_options = array();
+    $dimensions_options = array();
+
+    $fields_info = field_info_instances('commerce_product', $type);
+
+    foreach ($fields_info as $instance_name => $instance) {
+      $field_info = field_info_field($instance_name);
+
+      switch ($field_info['type']) {
+        case 'physical_weight':
+          $weight_options[$instance_name] = $instance['label'];
+
+          break;
+        case 'physical_dimensions':
+          $dimensions_options[$instance_name] = $instance['label'];
+
+          break;
+      }
+    }
+
+    $form[$type]['commerce_physical_weight_product_type_' . $type] = array(
+      '#type' => 'select',
+      '#title' => t('Weight field'),
+      '#default_value' => variable_get('commerce_physical_weight_product_type_' . $type, FALSE),
+      '#options' => $weight_options,
+      '#empty_value' => FALSE,
+    );
+
+    $form[$type]['commerce_physical_dimensions_product_type_' . $type] = array(
+      '#type' => 'select',
+      '#title' => t('Dimensions field'),
+      '#default_value' => variable_get('commerce_physical_dimensions_product_type_' . $type, FALSE),
+      '#options' => $dimensions_options,
+      '#empty_value' => FALSE,
+    );
+  }
+
   $form['commerce_physical_shipping'] = array(
     '#type' => 'checkbox',
     '#title' => t('Integrate with Commerce Shipping'),
