diff --git a/src/Lunr/Vortex/FCM/FCMPayload.php b/src/Lunr/Vortex/FCM/FCMPayload.php
index c486900246fdf550e1a53d322e4d95271a807816..8334dccfd5f19615b24e3f284f6d7a0be0fa1f8b 100644
--- a/src/Lunr/Vortex/FCM/FCMPayload.php
+++ b/src/Lunr/Vortex/FCM/FCMPayload.php
@@ -37,18 +37,118 @@ class FCMPayload extends GCMPayload
         parent::__destruct();
     }
 
+    /**
+     * Check whether a condition is set
+     *
+     * @return boolean $return TRUE if condition is present.
+     */
+    public function has_condition()
+    {
+        return isset($this->elements['condition']);
+    }
+
+    /**
+     * Check whether a condition is set
+     *
+     * @return boolean $return TRUE if condition is present.
+     */
+    public function has_topic()
+    {
+        return isset($this->elements['topic']);
+    }
+
+    /**
+     * Sets the payload key notification.
+     *
+     * The fields of data represent the key-value pairs of the message's payload notification data.
+     *
+     * @param array $notification The actual notification information
+     *
+     * @return FCMPayload $self Self Reference
+     */
+    public function set_notification($notification)
+    {
+        $this->elements['notification'] = $notification;
+
+        return $this;
+    }
+
     /**
      * Sets the payload key data.
      *
      * The fields of data represent the key-value pairs of the message's payload data.
      *
-     * @param array $data The actual notification information
+     * @param array $data The actual data
+     *
+     * @return FCMPayload $self Self Reference
+     */
+    public function set_data($data)
+    {
+        $this->elements['data'] = $data;
+
+        return $this;
+    }
+
+    /**
+     * Sets the notification as low priority.
+     *
+     * Notifications are high priority by default on iOS and Android,
+     * this allows for lower priority.
+     *
+     * @param boolean $val A boolean indicating that all platforms should
+     *                     be send as low priority notifications.
+     *
+     * @return FCMPayload $self Self Reference
+     */
+    public function set_low_priority($val)
+    {
+        $this->elements['priority'] = $val ? 'normal' : 'high';
+
+        return $this;
+    }
+
+    /**
+     * Sets the notification as providing content.
+     *
+     * @param boolean $val boolean value for the "content_available" field.
+     *
+     * @return FCMPayload $self Self Reference
+     */
+    public function set_content_available($val)
+    {
+        $this->elements['content_available'] = $val;
+
+        return $this;
+    }
+
+    /**
+     * Sets the topic name to send the message to.
+     *
+     * @param string $topic String of the topic name
+     *
+     * @return FCMPayload $self Self Reference
+     */
+    public function set_topic($topic)
+    {
+        $this->elements['topic'] = $topic;
+
+        return $this;
+    }
+
+    /**
+     * Sets the condition to send the message to. For example:
+     * 'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)
+     *
+     * You can include up to five topics in your conditional expression.
+     * Conditions support the following operators: &&, ||, !
+     *
+     * @param string $condition Key-value pairs of payload data
      *
      * @return FCMPayload $self Self Reference
      */
-    public function set_notification($data)
+    public function set_condition($condition)
     {
-        $this->elements['notification'] = $data;
+        $this->elements['condition'] = $condition;
 
         return $this;
     }
diff --git a/src/Lunr/Vortex/FCM/Tests/FCMPayloadHasConditionTest.php b/src/Lunr/Vortex/FCM/Tests/FCMPayloadHasConditionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..89561c3817439c37ee2a1cafcc03c35615860c93
--- /dev/null
+++ b/src/Lunr/Vortex/FCM/Tests/FCMPayloadHasConditionTest.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * This file contains the FCMPayloadHasConditionTest class.
+ *
+ * PHP Version 5.4
+ *
+ * @package    Lunr\Vortex\FCM
+ * @author     Koen Woortman <k.woortman@m2mobi.com>
+ * @copyright  2018, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Vortex\FCM\Tests;
+
+/**
+ * This class contains tests for the has_condition method of the FCMPayload class.
+ *
+ * @covers Lunr\Vortex\FCM\FCMPayload
+ */
+class FCMPayloadHasConditionTest extends FCMPayloadTest
+{
+
+    /**
+     * Test has_condition() returns FALSE when no condition is set.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::has_condition
+     */
+    public function testWhenNoConditionIsSet()
+    {
+        $this->assertFalse($this->class->has_condition());
+    }
+
+    /**
+     * Test if has_condition() returns TRUE when condition is set.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::has_condition
+     */
+    public function testWhenConditionIsSetCorrectly()
+    {
+        $this->class->set_condition("'TopicA' in topics && 'TopicB' in topics");
+
+        $this->assertTrue($this->class->has_condition());
+    }
+
+}
+
+?>
diff --git a/src/Lunr/Vortex/FCM/Tests/FCMPayloadHasTopicTest.php b/src/Lunr/Vortex/FCM/Tests/FCMPayloadHasTopicTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e42f1bbcf4c654b020eb2270ba3840d8643abc96
--- /dev/null
+++ b/src/Lunr/Vortex/FCM/Tests/FCMPayloadHasTopicTest.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * This file contains the FCMPayloadHasTopicTest class.
+ *
+ * PHP Version 5.4
+ *
+ * @package    Lunr\Vortex\FCM
+ * @author     Koen Woortman <k.woortman@m2mobi.com>
+ * @copyright  2018, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Vortex\FCM\Tests;
+
+/**
+ * This class contains tests for the has_topic method of the FCMPayload class.
+ *
+ * @covers Lunr\Vortex\FCM\FCMPayload
+ */
+class FCMPayloadHasTopicTest extends FCMPayloadTest
+{
+
+    /**
+     * Test has_topic() returns FALSE when a topic is set.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::has_topic
+     */
+    public function testWhenNoTopicIsSet()
+    {
+        $this->assertFalse($this->class->has_topic());
+    }
+
+    /**
+     * Test if has_topic() returns TRUE when a topic is set.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::has_topic
+     */
+    public function testWhenTopicIsSetCorrectly()
+    {
+        $this->class->set_topic('news');
+
+        $this->assertTrue($this->class->has_topic());
+    }
+
+}
+
+?>
diff --git a/src/Lunr/Vortex/FCM/Tests/FCMPayloadSetTest.php b/src/Lunr/Vortex/FCM/Tests/FCMPayloadSetTest.php
index 185ce400e3acedd00c31509d32a0ba8db4c3cc5d..0548ec2ddcb784b860139939ff3dec38326b7568 100644
--- a/src/Lunr/Vortex/FCM/Tests/FCMPayloadSetTest.php
+++ b/src/Lunr/Vortex/FCM/Tests/FCMPayloadSetTest.php
@@ -41,11 +41,136 @@ class FCMPayloadSetTest extends FCMPayloadTest
      *
      * @covers Lunr\Vortex\FCM\FCMPayload::set_notification
      */
-    public function testSetDataReturnsSelfReference()
+    public function testSetNotificationReturnsSelfReference()
     {
         $this->assertSame($this->class, $this->class->set_notification('data'));
     }
 
+    /**
+     * Test set_data() works correctly.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_data
+     */
+    public function testSetData()
+    {
+        $this->class->set_data([ 'key' => 'value' ]);
+
+        $value = $this->get_reflection_property_value('elements');
+
+        $this->assertArrayHasKey('data', $value);
+        $this->assertEquals([ 'key' => 'value' ], $value['data']);
+    }
+
+    /**
+     * Test fluid interface of set_data().
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_data
+     */
+    public function testSetDataReturnsSelfReference()
+    {
+        $this->assertSame($this->class, $this->class->set_data('data'));
+    }
+
+    /**
+     * Test set_topic() works correctly.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_topic
+     */
+    public function testSetTopic()
+    {
+        $this->class->set_topic('News');
+
+        $value = $this->get_reflection_property_value('elements');
+
+        $this->assertArrayHasKey('topic', $value);
+        $this->assertEquals('News', $value['topic']);
+    }
+
+    /**
+     * Test fluid interface of set_topic().
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_topic
+     */
+    public function testSetTopicReturnsSelfReference()
+    {
+        $this->assertSame($this->class, $this->class->set_topic('data'));
+    }
+
+    /**
+     * Test set_condition() works correctly.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_condition
+     */
+    public function testSetCondition()
+    {
+        $this->class->set_condition("'TopicA' in topics && 'TopicB' in topics");
+
+        $value = $this->get_reflection_property_value('elements');
+
+        $this->assertArrayHasKey('condition', $value);
+        $this->assertEquals("'TopicA' in topics && 'TopicB' in topics", $value['condition']);
+    }
+
+    /**
+     * Test fluid interface of set_condition().
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_condition
+     */
+    public function testSetConditionReturnsSelfReference()
+    {
+        $this->assertSame($this->class, $this->class->set_condition('data'));
+    }
+
+    /**
+     * Test set_low_priority() works correctly.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_low_priority
+     */
+    public function testSetLowPriority()
+    {
+        $this->class->set_low_priority(TRUE);
+
+        $value = $this->get_reflection_property_value('elements');
+
+        $this->assertArrayHasKey('priority', $value);
+        $this->assertEquals('normal', $value['priority']);
+    }
+
+    /**
+     * Test fluid interface of set_low_priority().
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_low_priority
+     */
+    public function testSetLowPriorityReturnsSelfReference()
+    {
+        $this->assertSame($this->class, $this->class->set_low_priority(TRUE));
+    }
+
+    /**
+     * Test set_content_available() works correctly.
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_content_available
+     */
+    public function testSetContentAvailable()
+    {
+        $this->class->set_content_available(TRUE);
+
+        $value = $this->get_reflection_property_value('elements');
+
+        $this->assertArrayHasKey('content_available', $value);
+        $this->assertEquals(TRUE, $value['content_available']);
+    }
+
+    /**
+     * Test fluid interface of set_content_available().
+     *
+     * @covers Lunr\Vortex\FCM\FCMPayload::set_content_available
+     */
+    public function testSetContentAvailableReturnsSelfReference()
+    {
+        $this->assertSame($this->class, $this->class->set_content_available(TRUE));
+    }
+
 }
 
 ?>
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index 48bedd2a584e36724e9976813d8231696675e11c..431765a7af7847617522e0fba18cfa600ebade6a 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -316,6 +316,9 @@
             <file>../src/Lunr/Vortex/GCM/Tests/GCMResponseAddBatchResponseTest.php</file>
             <file>../src/Lunr/Vortex/GCM/Tests/GCMResponseGetStatusTest.php</file>
             <file>../src/Lunr/Vortex/FCM/Tests/FCMPayloadBaseTest.php</file>
+            <file>../src/Lunr/Vortex/FCM/Tests/FCMPayloadHasTopicTest.php</file>
+            <file>../src/Lunr/Vortex/FCM/Tests/FCMPayloadHasConditionTest.php</file>
+            <file>../src/Lunr/Vortex/FCM/Tests/FCMPayloadSetLowPriorityTest.php</file>
             <file>../src/Lunr/Vortex/FCM/Tests/FCMPayloadSetTest.php</file>
             <file>../src/Lunr/Vortex/FCM/Tests/FCMBatchResponseBasePushErrorTest.php</file>
             <file>../src/Lunr/Vortex/FCM/Tests/FCMBatchResponseBasePushSuccessTest.php</file>
