diff --git a/commerce_userpoints_buy/commerce_userpoints_buy.features.field.inc b/commerce_userpoints_buy/commerce_userpoints_buy.features.field.inc
new file mode 100644
index 0000000..42f25dc
--- /dev/null
+++ b/commerce_userpoints_buy/commerce_userpoints_buy.features.field.inc
@@ -0,0 +1,196 @@
+<?php
+/**
+ * @file
+ * commerce_userpoints_buy.features.field.inc
+ */
+
+/**
+ * Implementation of hook_field_default_fields().
+ */
+function commerce_userpoints_buy_field_default_fields() {
+  $fields = array();
+
+  // Exported field: 'commerce_product-points_product-commerce_price'
+  $fields['commerce_product-points_product-commerce_price'] = array(
+    'field_config' => array(
+      'active' => '1',
+      'cardinality' => '1',
+      'deleted' => '0',
+      'entity_types' => array(
+        0 => 'commerce_product',
+      ),
+      'field_name' => 'commerce_price',
+      'foreign keys' => array(),
+      'indexes' => array(
+        'currency_price' => array(
+          0 => 'amount',
+          1 => 'currency_code',
+        ),
+      ),
+      'module' => 'commerce_price',
+      'settings' => array(),
+      'translatable' => '0',
+      'type' => 'commerce_price',
+    ),
+    'field_instance' => array(
+      'bundle' => 'points_product',
+      'default_value' => NULL,
+      'deleted' => '0',
+      'description' => '',
+      'display' => array(
+        'commerce_line_item_display' => array(
+          'label' => 'hidden',
+          'module' => 'commerce_price',
+          'settings' => array(
+            'calculation' => 'calculated_sell_price',
+          ),
+          'type' => 'commerce_price_formatted_amount',
+          'weight' => 0,
+        ),
+        'default' => array(
+          'label' => 'hidden',
+          'module' => 'commerce_price',
+          'settings' => array(
+            'calculation' => 'calculated_sell_price',
+          ),
+          'type' => 'commerce_price_formatted_amount',
+          'weight' => 0,
+        ),
+        'full' => array(
+          'label' => 'hidden',
+          'module' => 'commerce_price',
+          'settings' => array(
+            'calculation' => 'calculated_sell_price',
+          ),
+          'type' => 'commerce_price_formatted_amount',
+          'weight' => 0,
+        ),
+        'line_item' => array(
+          'label' => 'hidden',
+          'module' => 'commerce_price',
+          'settings' => array(
+            'calculation' => 'calculated_sell_price',
+          ),
+          'type' => 'commerce_price_formatted_amount',
+          'weight' => 0,
+        ),
+        'node_full' => array(
+          'label' => 'hidden',
+          'module' => 'commerce_price',
+          'settings' => array(
+            'calculation' => 'calculated_sell_price',
+          ),
+          'type' => 'commerce_price_formatted_amount',
+          'weight' => 0,
+        ),
+        'node_rss' => array(
+          'label' => 'hidden',
+          'module' => 'commerce_price',
+          'settings' => array(
+            'calculation' => 'calculated_sell_price',
+          ),
+          'type' => 'commerce_price_formatted_amount',
+          'weight' => 0,
+        ),
+        'node_teaser' => array(
+          'label' => 'hidden',
+          'module' => 'commerce_price',
+          'settings' => array(
+            'calculation' => 'calculated_sell_price',
+          ),
+          'type' => 'commerce_price_formatted_amount',
+          'weight' => 0,
+        ),
+      ),
+      'entity_type' => 'commerce_product',
+      'field_name' => 'commerce_price',
+      'label' => 'Price',
+      'required' => TRUE,
+      'settings' => array(
+        'user_register_form' => FALSE,
+      ),
+      'widget' => array(
+        'module' => 'commerce_price',
+        'settings' => array(
+          'currency_code' => 'default',
+        ),
+        'type' => 'commerce_price_full',
+        'weight' => '0',
+      ),
+    ),
+  );
+
+  // Exported field: 'commerce_product-points_product-field_userpoints'
+  $fields['commerce_product-points_product-field_userpoints'] = array(
+    'field_config' => array(
+      'active' => '1',
+      'cardinality' => '1',
+      'deleted' => '0',
+      'entity_types' => array(),
+      'field_name' => 'field_userpoints',
+      'foreign keys' => array(),
+      'indexes' => array(),
+      'module' => 'number',
+      'settings' => array(),
+      'translatable' => '0',
+      'type' => 'number_integer',
+    ),
+    'field_instance' => array(
+      'bundle' => 'points_product',
+      'default_value' => NULL,
+      'deleted' => '0',
+      'description' => '',
+      'display' => array(
+        'default' => array(
+          'label' => 'above',
+          'module' => 'number',
+          'settings' => array(
+            'decimal_separator' => '.',
+            'prefix_suffix' => TRUE,
+            'scale' => 0,
+            'thousand_separator' => ' ',
+          ),
+          'type' => 'number_integer',
+          'weight' => 1,
+        ),
+        'line_item' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
+        'node_teaser' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
+      ),
+      'entity_type' => 'commerce_product',
+      'field_name' => 'field_userpoints',
+      'label' => 'Druplicons',
+      'required' => 0,
+      'settings' => array(
+        'max' => '',
+        'min' => '',
+        'prefix' => '',
+        'suffix' => 'druplicon|druplicons',
+        'user_register_form' => FALSE,
+      ),
+      'widget' => array(
+        'active' => 0,
+        'module' => 'number',
+        'settings' => array(),
+        'type' => 'number',
+        'weight' => '36',
+      ),
+    ),
+  );
+
+  // Translatables
+  // Included for use with string extractors like potx.
+  t('Druplicons');
+  t('Price');
+
+  return $fields;
+}
diff --git a/commerce_userpoints_buy/commerce_userpoints_buy.features.inc b/commerce_userpoints_buy/commerce_userpoints_buy.features.inc
new file mode 100644
index 0000000..2003ffb
--- /dev/null
+++ b/commerce_userpoints_buy/commerce_userpoints_buy.features.inc
@@ -0,0 +1,21 @@
+<?php
+/**
+ * @file
+ * commerce_userpoints_buy.features.inc
+ */
+
+/**
+ * Implementation of hook_commerce_product_default_types().
+ */
+function commerce_userpoints_buy_commerce_product_default_types() {
+  $items = array(
+    'points_product' => array(
+      'type' => 'points_product',
+      'name' => 'Points Product',
+      'description' => '',
+      'help' => '',
+      'module' => 'commerce_product_ui',
+    ),
+  );
+  return $items;
+}
diff --git a/commerce_userpoints_buy/commerce_userpoints_buy.info b/commerce_userpoints_buy/commerce_userpoints_buy.info
new file mode 100644
index 0000000..6938b30
--- /dev/null
+++ b/commerce_userpoints_buy/commerce_userpoints_buy.info
@@ -0,0 +1,18 @@
+core = "7.x"
+dependencies[] = "commerce_cart"
+dependencies[] = "commerce_payment"
+dependencies[] = "commerce_product_ui"
+dependencies[] = "features"
+dependencies[] = "number"
+dependencies[] = "userpoints_rules"
+description = "Adds a product type, field and the corresponding rules to allow buying userpoints through Rules"
+features[commerce_product_type][] = "points_product"
+features[field][] = "commerce_product-points_product-commerce_price"
+features[field][] = "commerce_product-points_product-field_userpoints"
+features[rules_config][] = "rules_add_points_from_product"
+features[rules_config][] = "rules_grant_userpoints"
+name = "Commerce Buy Userpoints"
+package = "Features"
+php = "5.2.4"
+project = "commerce_userpoints_buy"
+version = "7.x-1.0"
diff --git a/commerce_userpoints_buy/commerce_userpoints_buy.module b/commerce_userpoints_buy/commerce_userpoints_buy.module
new file mode 100644
index 0000000..8b958b0
--- /dev/null
+++ b/commerce_userpoints_buy/commerce_userpoints_buy.module
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @file
+ */
+
+// Drupal needs this blank file.
diff --git a/commerce_userpoints_buy/commerce_userpoints_buy.rules_defaults.inc b/commerce_userpoints_buy/commerce_userpoints_buy.rules_defaults.inc
new file mode 100644
index 0000000..121e912
--- /dev/null
+++ b/commerce_userpoints_buy/commerce_userpoints_buy.rules_defaults.inc
@@ -0,0 +1,69 @@
+<?php
+/**
+ * @file
+ * commerce_userpoints_buy.rules_defaults.inc
+ */
+
+/**
+ * Implementation of hook_default_rules_configuration().
+ */
+function commerce_userpoints_buy_default_rules_configuration() {
+  $items = array();
+  $items['rules_add_points_from_product'] = entity_import('rules_config', '{ "rules_add_points_from_product" : {
+      "LABEL" : "Add points from product",
+      "PLUGIN" : "rule",
+      "REQUIRES" : [ "rules", "userpoints_rules" ],
+      "USES VARIABLES" : {
+        "line_item" : { "label" : "Line Item", "type" : "commerce_line_item" },
+        "order" : { "label" : "Oder", "type" : "commerce_order" }
+      },
+      "IF" : [
+        { "entity_has_field" : { "entity" : [ "line-item" ], "field" : "commerce_product" } },
+        { "entity_has_field" : {
+            "entity" : [ "line-item:commerce-product" ],
+            "field" : "field_userpoints"
+          }
+        }
+      ],
+      "DO" : [
+        { "userpoints_action_grant_points" : {
+            "user" : [ "order:owner" ],
+            "points" : [ "line-item:commerce-product:field-userpoints" ],
+            "tid" : "0",
+            "entity" : [ "order" ],
+            "description" : "Druplicons bought",
+            "operation" : "commerce_userpoints_buy",
+            "display" : 1,
+            "moderate" : "default"
+          }
+        }
+      ]
+    }
+  }');
+  $items['rules_grant_userpoints'] = entity_import('rules_config', '{ "rules_grant_userpoints" : {
+      "LABEL" : "Grant userpoints",
+      "PLUGIN" : "reaction rule",
+      "REQUIRES" : [ "commerce_cart", "rules", "commerce_payment" ],
+      "ON" : [ "commerce_payment_order_paid_in_full" ],
+      "IF" : [
+        { "commerce_order_is_cart" : { "commerce_order" : [ "commerce_order" ] } },
+        { "entity_has_field" : {
+            "entity" : [ "commerce-order:commerce-line-items:0" ],
+            "field" : "commerce_product"
+          }
+        }
+      ],
+      "DO" : [
+        { "LOOP" : {
+            "USING" : { "list" : [ "commerce-order:commerce-line-items" ] },
+            "ITEM" : { "list_item" : "Current list item" },
+            "DO" : [
+              { "component_rules_add_points_from_product" : { "line_item" : [ "list-item" ], "order" : [ "commerce-order" ] } }
+            ]
+          }
+        }
+      ]
+    }
+  }');
+  return $items;
+}
