diff --git a/CRM/Civirules/Upgrader.php b/CRM/Civirules/Upgrader.php
index 9e41f584bc052b84508abde47934475691839e3a..24b4f3332e050d2d32e5255144ae41299a89e6b4 100755
--- a/CRM/Civirules/Upgrader.php
+++ b/CRM/Civirules/Upgrader.php
@@ -31,7 +31,7 @@ class CRM_Civirules_Upgrader extends CRM_Civirules_Upgrader_Base {
       CRM_Core_DAO::executeQuery("
         INSERT INTO civirule_event (name, label, object_name, op, cron, class_name, created_date, created_user_id)
         VALUES
-          ('groupmembership', 'Daily trigger for group members', NULL, NULL, 1, 'CRM_CivirulesCronEvent_GroupMembership',  CURDATE(), 1);
+          ('groupmembership', 'Daily trigger for group members', NULL, NULL, 1, 'CRM_CivirulesCronTrigger_GroupMembership',  CURDATE(), 1);
         ");
     }
     return true;
diff --git a/CRM/Civirules/Utils.php b/CRM/Civirules/Utils.php
index 39ffe891512da000ef6d560038d2765260586e3c..08d217da352250accf0d754ee9da0ecdb1efa895 100755
--- a/CRM/Civirules/Utils.php
+++ b/CRM/Civirules/Utils.php
@@ -211,6 +211,27 @@ class CRM_Civirules_Utils {
     return $return;
   }
 
+  /**
+   * Method to get the membership types
+   * @param bool $onlyActive
+   * @return array
+   */
+  public static function getMembershipTypes($onlyActive = TRUE) {
+    $return = array();
+    if ($onlyActive) {
+      $params = array('is_active' => 1);
+    } else {
+      $params = array();
+    }
+    try {
+      $membershipTypes = civicrm_api3("MembershipType", "Get", $params);
+      foreach ($membershipTypes['values'] as $membershipType) {
+        $return[$membershipType['id']] = $membershipType['name'];
+      }
+    } catch (CiviCRM_API3_Exception $ex) {}
+    return $return;
+  }
+
   /**
    * Method to check if the incoming date is later than today
    *
diff --git a/CRM/CivirulesConditions/Form/Membership/Type.php b/CRM/CivirulesConditions/Form/Membership/Type.php
new file mode 100644
index 0000000000000000000000000000000000000000..11dc4d0402773ae37a68082bc3e8fd3304284411
--- /dev/null
+++ b/CRM/CivirulesConditions/Form/Membership/Type.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Class for CiviRules Condition Membership Type Form
+ *
+ * @author Erik Hommel (CiviCooP) <erik.hommel@civicoop.org>
+ * @license AGPL-3.0
+ */
+
+class CRM_CivirulesConditions_Form_Membership_Type extends CRM_CivirulesConditions_Form_Form {
+
+  /**
+   * Overridden parent method to build form
+   *
+   * @access public
+   */
+  public function buildQuickForm() {
+    $this->add('hidden', 'rule_condition_id');
+
+    $membershipTypes = CRM_Civirules_Utils::getMembershipTypes();
+    $membershipTypes[0] = ts('- select -');
+    asort($membershipTypes);
+    $this->add('select', 'membership_type_id', ts('Membership type'), $membershipTypes, true);
+    $this->add('select', 'operator', ts('Operator'), array('equals', 'is not equal to'), true);
+
+    $this->addButtons(array(
+      array('type' => 'next', 'name' => ts('Save'), 'isDefault' => TRUE,),
+      array('type' => 'cancel', 'name' => ts('Cancel'))));
+  }
+
+  /**
+   * Overridden parent method to set default values
+   *
+   * @return array $defaultValues
+   * @access public
+   */
+  public function setDefaultValues() {
+    $defaultValues = parent::setDefaultValues();
+    $data = unserialize($this->ruleCondition->condition_params);
+    if (!empty($data['membership_type_id'])) {
+      $defaultValues['membership_type_id'] = $data['membership_type_id'];
+    }
+    if (!empty($data['operator'])) {
+      $defaultValues['operator'] = $data['operator'];
+    }
+    return $defaultValues;
+  }
+
+  /**
+   * Overridden parent method to process form data after submission
+   *
+   * @throws Exception when rule condition not found
+   * @access public
+   */
+  public function postProcess() {
+    $data['membership_type_id'] = $this->_submitValues['membership_type_id'];
+    $data['operator'] = $this->_submitValues['operator'];
+    $this->ruleCondition->condition_params = serialize($data);
+    $this->ruleCondition->save();
+    parent::postProcess();
+  }
+}
\ No newline at end of file
diff --git a/CRM/CivirulesConditions/Form/ValueComparison.php b/CRM/CivirulesConditions/Form/ValueComparison.php
index 5dc8974f77cb7dcc3fd939f2a50eb301174eb433..310bc55333286c2bae3a8fb02f77ce561fee202d 100644
--- a/CRM/CivirulesConditions/Form/ValueComparison.php
+++ b/CRM/CivirulesConditions/Form/ValueComparison.php
@@ -117,7 +117,9 @@ class CRM_CivirulesConditions_Form_ValueComparison extends CRM_CivirulesConditio
     $data = unserialize($this->ruleCondition->condition_params);
     $data['operator'] = $this->_submitValues['operator'];
     $data['value'] = $this->_submitValues['value'];
-    $data['multi_value'] = explode("\r\n", $this->_submitValues['multi_value']);
+    if (isset($this->_submitValues['multi_value'])) {
+      $data['multi_value'] = explode("\r\n", $this->_submitValues['multi_value']);
+    }
     $this->ruleCondition->condition_params = serialize($data);
     $this->ruleCondition->save();
 
diff --git a/CRM/CivirulesConditions/Membership/Type.mgd.php b/CRM/CivirulesConditions/Membership/Type.mgd.php
new file mode 100644
index 0000000000000000000000000000000000000000..5b3dc55fd9e6b641930b8d5ee9219c4490fb48b5
--- /dev/null
+++ b/CRM/CivirulesConditions/Membership/Type.mgd.php
@@ -0,0 +1,17 @@
+<?php
+
+return array (
+  0 =>
+    array (
+      'name' => 'Civirules:Condition.MembershipType',
+      'entity' => 'CiviRuleCondition',
+      'params' =>
+        array (
+          'version' => 3,
+          'name' => 'membership_type',
+          'label' => 'Membership is (not) of membership type ...',
+          'class_name' => 'CRM_CivirulesConditions_Membership_Type',
+          'is_active' => 1
+        ),
+    ),
+);
\ No newline at end of file
diff --git a/CRM/CivirulesConditions/Membership/Type.php b/CRM/CivirulesConditions/Membership/Type.php
new file mode 100644
index 0000000000000000000000000000000000000000..4f8d78ae6ddda81aff4cf03ceacae18377ae08aa
--- /dev/null
+++ b/CRM/CivirulesConditions/Membership/Type.php
@@ -0,0 +1,96 @@
+<?php
+
+class CRM_CivirulesConditions_Membership_Type extends CRM_Civirules_Condition {
+
+  private $conditionParams = array();
+
+  /**
+   * Method to set the Rule Condition data
+   *
+   * @param array $ruleCondition
+   * @access public
+   */
+  public function setRuleConditionData($ruleCondition) {
+    parent::setRuleConditionData($ruleCondition);
+    $this->conditionParams = array();
+    if (!empty($this->ruleCondition['condition_params'])) {
+      $this->conditionParams = unserialize($this->ruleCondition['condition_params']);
+    }
+  }
+
+  /**
+   * Method to determine if the condition is valid
+   *
+   * @param CRM_Civirules_TriggerData_TriggerData $triggerData
+   * @return bool
+   */
+  public function isConditionValid(CRM_Civirules_TriggerData_TriggerData $triggerData) {
+    $isConditionValid = FALSE;
+    $membership = $triggerData->getEntityData('Membership');
+    switch ($this->conditionParams['operator']) {
+      case 0:
+        if ($membership['membership_type_id'] == $this->conditionParams['membership_type_id']) {
+          $isConditionValid = TRUE;
+        }
+      break;
+      case 1:
+        if ($membership['membership_type_id'] != $this->conditionParams['membership_type_id']) {
+          $isConditionValid = TRUE;
+        }
+      break;
+    }
+    return $isConditionValid;
+  }
+
+  /**
+   * Returns a redirect url to extra data input from the user after adding a condition
+   *
+   * Return false if you do not need extra data input
+   *
+   * @param int $ruleConditionId
+   * @return bool|string
+   * @access public
+   * @abstract
+   */
+  public function getExtraDataInputUrl($ruleConditionId) {
+    return CRM_Utils_System::url('civicrm/civirule/form/condition/membershiptype', 'rule_condition_id='
+      .$ruleConditionId);
+  }
+
+  /**
+   * Returns a user friendly text explaining the condition params
+   * e.g. 'Older than 65'
+   *
+   * @return string
+   * @access public
+   */
+  public function userFriendlyConditionParams() {
+    try {
+      $membershipTypes = civicrm_api3('MembershipType', 'Get', array('is_active' => 1));
+      $operator = null;
+      if ($this->conditionParams['operator'] == 0) {
+        $operator = 'equals';
+      }
+      if ($this->conditionParams['operator'] == 1) {
+        $operator = 'is not equal to';
+      }
+      foreach ($membershipTypes['values'] as $membershipType) {
+        if ($membershipType['id'] == $this->conditionParams['membership_type_id']) {
+          return "Membership Type ".$operator." ".$membershipType['name'];
+        }
+      }
+    } catch (CiviCRM_API3_Exception $ex) {}
+    return '';
+  }
+
+  /**
+   * Returns an array with required entity names
+   *
+   * @return array
+   * @access public
+   */
+  public function requiredEntities() {
+    return array('Membership');
+  }
+
+}
\ No newline at end of file
diff --git a/sql/insertCiviruleTrigger.sql b/sql/insertCiviruleTrigger.sql
index 38d489159e45ea785deb103ea6e252dcfbea919a..2eb1470db0d82486d5f65281d416baa49c9ecf49 100644
--- a/sql/insertCiviruleTrigger.sql
+++ b/sql/insertCiviruleTrigger.sql
@@ -87,6 +87,6 @@ VALUES
 
 INSERT INTO civirule_trigger (name, label, object_name, op, cron, class_name, created_date, created_user_id)
 VALUES
-  ('birthday', 'Individual has birthday', null, null, 1, 'CRM_CivirulesCronEvent_Birthday',  CURDATE(), 1),
-  ('groupmembership', 'Daily trigger for group members', null, null, 1, 'CRM_CivirulesCronEvent_GroupMembership',  CURDATE(), 1);
+  ('birthday', 'Individual has birthday', null, null, 1, 'CRM_CivirulesCronTrigger_Birthday',  CURDATE(), 1),
+  ('groupmembership', 'Daily trigger for group members', null, null, 1, 'CRM_CivirulesCronTrigger_GroupMembership',  CURDATE(), 1);
 
diff --git a/sql/update_1003.sql b/sql/update_1003.sql
index 9a7b61a1c2d1f064dbe753fa5878947b6c745987..edeb52725bc093b2608193db306dc673715ced9e 100644
--- a/sql/update_1003.sql
+++ b/sql/update_1003.sql
@@ -2,4 +2,5 @@ UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesPostTrigger_Activity' W
 UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesPostTrigger_Contact' WHERE `class_name` = 'CRM_CivirulesPostEvent_Contact';
 UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesPostTrigger_GroupContact' WHERE `class_name` = 'CRM_CivirulesPostEvent_GroupContact';
 UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesCronTrigger_Birthday' WHERE `class_name` = 'CRM_CivirulesCronEvent_Birthday';
-UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesCronTrigger_GroupMembership' WHERE `class_name` = 'CRM_CivirulesCronTrigger_GroupMembership';
\ No newline at end of file
+UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesCronTrigger_GroupMembership' WHERE `class_name` = 'CRM_CivirulesCronTrigger_GroupMembership';
+UPDATE `civirule_trigger` SET `class_name`='CRM_CivirulesCronTrigger_GroupMembership' WHERE `class_name` = 'CRM_CivirulesCronEvent_GroupMembership';
diff --git a/templates/CRM/CivirulesConditions/Form/Membership/Type.tpl b/templates/CRM/CivirulesConditions/Form/Membership/Type.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..987006eb7d294c819fde1663eda26566e2b40f76
--- /dev/null
+++ b/templates/CRM/CivirulesConditions/Form/Membership/Type.tpl
@@ -0,0 +1,16 @@
+<h3>{$ruleConditionHeader}</h3>
+<div class="crm-block crm-form-block crm-civirule-rule_condition-block-membership_type">
+  <div class="crm-section">
+    <div class="label">{$form.operator.label}</div>
+    <div class="content">{$form.operator.html}</div>
+    <div class="clear"></div>
+  </div>
+  <div class="crm-section">
+    <div class="label">{$form.membership_type_id.label}</div>
+    <div class="content">{$form.membership_type_id.html}</div>
+    <div class="clear"></div>
+  </div>
+</div>
+<div class="crm-submit-buttons">
+    {include file="CRM/common/formButtons.tpl" location="bottom"}
+</div>
\ No newline at end of file
diff --git a/templates/CRM/CivirulesConditions/Form/ValueComparison.tpl b/templates/CRM/CivirulesConditions/Form/ValueComparison.tpl
index 08e7af2f73a002e1f18dbd2dba0edb0b20f69d46..ab36ebe8c13236a509e311328038192b95349e88 100644
--- a/templates/CRM/CivirulesConditions/Form/ValueComparison.tpl
+++ b/templates/CRM/CivirulesConditions/Form/ValueComparison.tpl
@@ -38,7 +38,7 @@
     {/literal}
     {if ($field_options)}
         {foreach from=$field_options item=value key=key}
-    options[options.length] = {'key': key, 'value': value};
+    {literal}options[options.length] = {'key': key, 'value': value};{/literal}
         {/foreach}
     {/if}
     {if ($is_field_option_multiple)}
diff --git a/xml/Menu/civirules.xml b/xml/Menu/civirules.xml
index 4be88e7548617d4e79fd57b4d3e70a8b011c7d08..04fb38ffec5754686dbbbc07b2ca078c7a76d184 100755
--- a/xml/Menu/civirules.xml
+++ b/xml/Menu/civirules.xml
@@ -56,6 +56,13 @@
     <access_arguments>access CiviCRM</access_arguments>
     <access_arguments>administer CiviCRM</access_arguments>
   </item>
+  <item>
+    <path>civicrm/civirule/form/condition/membershiptype</path>
+    <page_callback>CRM_CivirulesConditions_Form_Membership_Type</page_callback>
+    <title>membership type</title>
+    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviCRM</access_arguments>
+  </item>
   <item>
     <path>civicrm/civirule/form/condition/contribution_totalcontributedamount</path>
     <page_callback>CRM_CivirulesConditions_Form_Contribution_TotalContributedAmount</page_callback>