diff --git a/draggableviews.info b/draggableviews.info
index 632702c..3b416aa 100644
--- a/draggableviews.info
+++ b/draggableviews.info
@@ -3,18 +3,19 @@ description = Makes Views draggable
 package = Views
 core = 7.x
 
 files[] = views/draggableviews_handler_field_draggable.inc
 files[] = views/draggableviews_handler_sort.inc
 files[] = views/draggableviews_join_handler.inc
 
 files[] = handlers/draggableviews_handler.inc
 files[] = handlers/draggableviews_handler_native.inc
 files[] = handlers/draggableviews_handler_fieldapi.inc
+files[] = handlers/draggableviews_handler_property.inc
 files[] = handlers/draggableviews_hierarchy_handler.inc
 files[] = handlers/draggableviews_hierarchy_handler_native.inc
 
 files[] = test/draggableviews.test
 
 dependencies[] = ctools
 dependencies[] = entity
 dependencies[] = views
diff --git a/handlers/draggableviews_handler_property.inc b/handlers/draggableviews_handler_property.inc
new file mode 100644
index 0000000..f2fd1cd
--- /dev/null
+++ b/handlers/draggableviews_handler_property.inc
@@ -0,0 +1,112 @@
+<?php
+
+/**
+ * @file
+ * Field API handler plugin.
+ */
+
+$plugin = array(
+  'label' => 'Property',
+  'handler' => array(
+    'class' => 'draggableviews_handler_property',
+  ),
+);
+
+class draggableviews_handler_property extends draggableviews_handler {
+  /**
+  * Set default value of field option.
+  */
+  public function option_definition() {
+    return array('property' => '');
+  }
+
+  /**
+  * Add field options for handler.
+  */
+  function options_form($field) {
+    $form = array();
+    $options = array('' => t('- Select -'));
+
+    // Check all the sortings added to a view. Hope there is
+    // better way to determine them. Need to research.
+    $sorts = $field->view->display_handler->display->display_options['sorts'];
+    // If no sorts avaialble for current display, use sorts from default display.
+    if (empty($sorts)) {
+      $sorts = $field->view->display['default']->display_options['sorts'];
+    }
+
+    $base_table_schema = drupal_get_schema($field->view->base_table);
+    foreach ($sorts as $sort_option) {
+      $field_name = $sort_option['field'];
+      // Field should be like "field_name_value".
+      if ($sort_option['table'] == $field->view->base_table && isset($base_table_schema['fields'][$field_name]) && $base_table_schema['fields'][$field_name]['type'] == 'int') {
+        $options[$field->view->base_table . ':' . $field_name] = $field_name;
+      }
+    }
+
+    // If options are emtpy, show warning message.
+    if (count($options) == 1) {
+      $form['field_warning'] = array(
+        '#markup' => '<div class="messages warning">' . t('Add weight integer property to sorts so it can be selected.') . '</div>',
+      );
+    }
+
+    $form['property'] = array(
+      '#type' => 'select',
+      '#title' => t('Property'),
+      '#options' => $options,
+      '#default_value' => $field->options['draggableviews']['draggableviews_handler_property']['property'],
+      '#description' => t('Please select property that contains weight. It should be integer type and already added to sorts of the view.'),
+    );
+    return $form;
+  }
+
+  function get($field, $index) {
+    // Get the name of selected field.
+    $field_option = $field->options['draggableviews']['draggableviews_handler_property']['property'];
+    list($field_table, $field_name) = explode(':', $field_option);
+    // Current row.
+    $row = $field->view->result[$index];
+    // Check whether key has table name and field name in it.
+    foreach ($row as $key => $value) {
+      if (strpos($key, $field_table) !== FALSE && strpos($key, $field_name) !== FALSE) {
+        return $value;
+      }
+    }
+  }
+
+  function set($form_state) {
+    $fv = $form_state['values'];
+    $view = $form_state['build_info']['args'][0];
+    $view_name = $view->name;
+    $view_display = $view->current_display;
+    // View arguments.
+    $arguments = $view->args;
+    if (isset($view->exposed_raw_input)) {
+      $arguments += $view->exposed_raw_input;
+      ksort($arguments);
+      // Redirect view to the same page with exposed filters set.
+      $form_state['redirect'] = array(current_path(), array('query' => $view->exposed_raw_input));
+    }
+
+    $entity_info_all = entity_get_info();
+    $entity_type = '';
+    foreach ($entity_info_all as $entity_name_key => $entity_info) {
+      if (isset($entity_info['base table']) && $entity_info['base table'] == $view->base_table) {
+        $entity_type = $entity_name_key;
+        break;
+      }
+    }
+
+    $options_field = $view->field['draggableviews']->options['draggableviews']['draggableviews_handler_property']['property'];
+    list(, $field_name) = explode(':', $options_field);
+    // Save the values of the property.
+    foreach ($fv['draggableviews'] as $item) {
+      if (isset($item['id']) && isset($item['weight'])) {
+        $entity_wrapper = entity_metadata_wrapper($entity_type, $item['id']);
+        $entity_wrapper->{$field_name} = $item['weight'];
+        $entity_wrapper->save();
+      }
+    }
+  }
+}
