diff --git a/src/Model/Filter.php b/src/Model/Filter.php
index 76b14ff..1d6daa6 100644
--- a/src/Model/Filter.php
+++ b/src/Model/Filter.php
@@ -10,7 +10,12 @@ class Filter
     /**
      * @var array
      */
-    private $properties = [];
+    private $conditions = [];
+
+    /**
+     * @var array
+     */
+    private $actions = [];
 
     /**
      * @return static
@@ -27,7 +32,7 @@ class Filter
      */
     public function has(string $value): self
     {
-        $this->properties['hasTheWord'] = $value;
+        $this->conditions['hasTheWord'] = $value;
 
         return $this;
     }
@@ -39,7 +44,7 @@ class Filter
      */
     public function hasNot(string $value): self
     {
-        $this->properties['doesNotHaveTheWord'] = $value;
+        $this->conditions['doesNotHaveTheWord'] = $value;
 
         return $this;
     }
@@ -52,7 +57,7 @@ class Filter
     public function from($values): self
     {
         if (!empty($values)) {
-            $this->properties['from'] = collect($values)->map(function ($value) {
+            $this->conditions['from'] = collect($values)->map(function ($value) {
                 return trim($value);
             })->all();
         }
@@ -68,7 +73,7 @@ class Filter
     public function to($values): self
     {
         if (!empty($values)) {
-            $this->properties['to'] = collect($values)->map(function ($value) {
+            $this->conditions['to'] = collect($values)->map(function ($value) {
                 return trim($value);
             })->all();
         }
@@ -83,7 +88,7 @@ class Filter
      */
     public function subject($values): self
     {
-        $this->properties['subject'] = collect($values)->map(function ($value) {
+        $this->conditions['subject'] = collect($values)->map(function ($value) {
             return json_encode($value);
         })->implode('|');
 
@@ -95,7 +100,7 @@ class Filter
      */
     public function hasAttachment(): self
     {
-        $this->properties['hasAttachment'] = 'true';
+        $this->conditions['hasAttachment'] = 'true';
 
         return $this;
     }
@@ -120,7 +125,7 @@ class Filter
      */
     public function excludeChats(): self
     {
-        $this->properties['excludeChats'] = 'true';
+        $this->conditions['excludeChats'] = 'true';
 
         return $this;
     }
@@ -132,7 +137,7 @@ class Filter
      */
     public function label(string $label): self
     {
-        $this->properties['label'] = $label;
+        $this->actions['label'] = $label;
 
         return $this;
     }
@@ -142,7 +147,7 @@ class Filter
      */
     public function archive(): self
     {
-        $this->properties['shouldArchive'] = 'true';
+        $this->actions['shouldArchive'] = 'true';
 
         return $this;
     }
@@ -164,8 +169,8 @@ class Filter
      */
     public function spam(): self
     {
-        $this->properties['shouldSpam'] = 'true';
-        $this->properties['shouldNeverSpam'] = 'false';
+        $this->actions['shouldSpam'] = 'true';
+        $this->actions['shouldNeverSpam'] = 'false';
 
         return $this;
     }
@@ -175,8 +180,8 @@ class Filter
      */
     public function neverSpam(): self
     {
-        $this->properties['shouldSpam'] = 'false';
-        $this->properties['shouldNeverSpam'] = 'true';
+        $this->actions['shouldSpam'] = 'false';
+        $this->actions['shouldNeverSpam'] = 'true';
 
         return $this;
     }
@@ -186,7 +191,7 @@ class Filter
      */
     public function trash(): self
     {
-        $this->properties['shouldTrash'] = 'true';
+        $this->actions['shouldTrash'] = 'true';
 
         return $this;
     }
@@ -196,7 +201,7 @@ class Filter
      */
     public function read(): self
     {
-        $this->properties['markAsRead'] = 'true';
+        $this->actions['markAsRead'] = 'true';
 
         return $this;
     }
@@ -206,7 +211,7 @@ class Filter
      */
     public function star(): self
     {
-        $this->properties['shouldStar'] = 'true';
+        $this->actions['shouldStar'] = 'true';
 
         return $this;
     }
@@ -218,7 +223,7 @@ class Filter
      */
     public function forward(string $to): self
     {
-        $this->properties['forwardTo'] = $to;
+        $this->actions['forwardTo'] = $to;
 
         return $this;
     }
@@ -228,7 +233,7 @@ class Filter
      */
     public function important(): self
     {
-        $this->properties['shouldAlwaysMarkAsImportant'] = 'true';
+        $this->actions['shouldAlwaysMarkAsImportant'] = 'true';
 
         return $this;
     }
@@ -238,7 +243,7 @@ class Filter
      */
     public function notImportant(): self
     {
-        $this->properties['shouldNeverMarkAsImportant'] = 'true';
+        $this->actions['shouldNeverMarkAsImportant'] = 'true';
 
         return $this;
     }
@@ -250,29 +255,43 @@ class Filter
      */
     public function categorise(string $category): self
     {
-        $this->properties['smartLabelToApply'] = $category;
+        $this->actions['smartLabelToApply'] = $category;
 
         return $this;
     }
 
     /**
-     * Return the filter properties as an array.
-     *
-     * @return array
-     * @deprecated toArray()
+     * @deprecated
+     * @see toArray()
      */
     public function getProperties(): array
     {
-        return $this->properties;
+        return $this->toArray();
+    }
+
+    public function getConditions(): array
+    {
+        $conditions = $this->conditions;
+        ksort($conditions);
+
+        return $conditions;
+    }
+
+    public function getActions(): array
+    {
+        $actions = $this->actions;
+        ksort($actions);
+
+        return $actions;
     }
 
     /**
-     * Return the filter properties as an array.
-     *
-     * @return array
+     * @deprecated
+     * @see getConditions()
+     * @see getActions()
      */
     public function toArray(): array
     {
-        return $this->properties;
+        return array_merge($this->conditions, $this->actions);
     }
 }
diff --git a/src/Service/Builder.php b/src/Service/Builder.php
index 0092b7b..c192b9b 100644
--- a/src/Service/Builder.php
+++ b/src/Service/Builder.php
@@ -88,13 +88,16 @@ class Builder
      */
     private function buildEntry(Filter $filter): string
     {
-        $entry = collect($filter->toArray())
-            ->map(function ($value, $key): string {
-                return $this->buildProperty($value, $key);
-            })
-            ->implode($this->glue());
+        $conditions = $filter->getConditions();
+        $actions = $filter->getActions();
 
-        return collect(['<entry>', $entry, '</entry>'])->implode($this->glue());
+        $entry = collect();
+
+        foreach (array_merge($conditions, $actions) as $property => $value) {
+            $entry->push($this->buildProperty($value, $property));
+        }
+
+        return collect(['<entry>', $entry->implode($this->glue()), '</entry>'])->implode($this->glue());
     }
 
     /**
diff --git a/tests/Unit/Model/FilterTest.php b/tests/Unit/Model/FilterTest.php
index 57e7223..4e7d533 100644
--- a/tests/Unit/Model/FilterTest.php
+++ b/tests/Unit/Model/FilterTest.php
@@ -33,7 +33,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['hasTheWord' => 'something'],
-            $this->filter->has('something')->toArray()
+            $this->filter->has('something')->getConditions()
         );
     }
 
@@ -45,7 +45,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['doesNotHaveTheWord' => 'something'],
-            $this->filter->hasNot('something')->toArray()
+            $this->filter->hasNot('something')->getConditions()
         );
     }
 
@@ -58,13 +58,13 @@ class FilterTest extends TestCase
         // Ensure that we can set one from address.
         $this->assertEquals(
             ['from' => ['foo@example.com']],
-            $this->filter->from('foo@example.com')->toArray()
+            $this->filter->from('foo@example.com')->getConditions()
         );
 
         // Ensure that we can set multiple from addresses.
         $this->assertEquals(
             ['from' => ['foo@example.com', 'bar@example.com']],
-            $this->filter->from(['foo@example.com', 'bar@example.com'])->toArray()
+            $this->filter->from(['foo@example.com', 'bar@example.com'])->getConditions()
         );
     }
 
@@ -74,8 +74,8 @@ class FilterTest extends TestCase
      */
     public function no_from_property_exists_if_the_value_is_empty()
     {
-        $this->assertArrayNotHasKey('from', $this->filter->from('')->toArray());
-        $this->assertArrayNotHasKey('from', $this->filter->from([])->toArray());
+        $this->assertArrayNotHasKey('from', $this->filter->from('')->getConditions());
+        $this->assertArrayNotHasKey('from', $this->filter->from([])->getConditions());
     }
 
     /**
@@ -86,12 +86,12 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['to' => ['foo@example.com']],
-            $this->filter->to('foo@example.com')->toArray()
+            $this->filter->to('foo@example.com')->getConditions()
         );
 
         $this->assertEquals(
             ['to' => ['bar@example.com', 'baz@example.com']],
-            $this->filter->to(['bar@example.com', 'baz@example.com'])->toArray()
+            $this->filter->to(['bar@example.com', 'baz@example.com'])->getConditions()
         );
     }
 
@@ -110,12 +110,12 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['subject' => '"Something"'],
-            $this->filter->subject('Something')->toArray()
+            $this->filter->subject('Something')->getConditions()
         );
 
         $this->assertEquals(
             ['subject' => '"Test"|"Foo bar"'],
-            $this->filter->subject(['Test', 'Foo bar'])->toArray()
+            $this->filter->subject(['Test', 'Foo bar'])->getConditions()
         );
     }
 
@@ -127,7 +127,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['hasAttachment' => 'true'],
-            $this->filter->hasAttachment()->toArray()
+            $this->filter->hasAttachment()->getConditions()
         );
     }
 
@@ -139,12 +139,12 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['hasTheWord' => 'list:foobar'],
-            $this->filter->fromList('foobar')->toArray()
+            $this->filter->fromList('foobar')->getConditions()
         );
 
         $this->assertEquals(
             ['hasTheWord' => 'list:list-one.com|list-two.com'],
-            $this->filter->fromList(['list-one.com', 'list-two.com'])->toArray()
+            $this->filter->fromList(['list-one.com', 'list-two.com'])->getConditions()
         );
     }
 
@@ -156,7 +156,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['excludeChats' => 'true'],
-            $this->filter->excludeChats()->toArray()
+            $this->filter->excludeChats()->getConditions()
         );
     }
 
@@ -168,7 +168,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['label' => 'Foo'],
-            $this->filter->label('Foo')->toArray()
+            $this->filter->label('Foo')->getActions()
         );
     }
 
@@ -180,7 +180,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['shouldArchive' => 'true'],
-            $this->filter->archive()->toArray()
+            $this->filter->archive()->getActions()
         );
     }
 
@@ -192,7 +192,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['shouldArchive' => 'true', 'label' => 'Foo'],
-            $this->filter->labelAndArchive('Foo')->toArray()
+            $this->filter->labelAndArchive('Foo')->getActions()
         );
     }
 
@@ -207,7 +207,7 @@ class FilterTest extends TestCase
                 'shouldSpam' => 'true',
                 'shouldNeverSpam' => 'false'
             ],
-            $this->filter->spam()->toArray()
+            $this->filter->spam()->getActions()
         );
     }
 
@@ -222,7 +222,7 @@ class FilterTest extends TestCase
                 'shouldSpam' => 'false',
                 'shouldNeverSpam' => 'true'
             ],
-            $this->filter->neverSpam()->toArray()
+            $this->filter->neverSpam()->getActions()
         );
     }
 
@@ -234,7 +234,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['shouldTrash' => 'true'],
-            $this->filter->trash()->toArray()
+            $this->filter->trash()->getActions()
         );
     }
 
@@ -246,7 +246,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['markAsRead' => 'true'],
-            $this->filter->read()->toArray()
+            $this->filter->read()->getActions()
         );
     }
 
@@ -258,7 +258,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['shouldStar' => 'true'],
-            $this->filter->star()->toArray()
+            $this->filter->star()->getActions()
         );
     }
 
@@ -270,7 +270,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['forwardTo' => 'foo@example.com'],
-            $this->filter->forward('foo@example.com')->toArray()
+            $this->filter->forward('foo@example.com')->getActions()
         );
     }
 
@@ -282,7 +282,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['shouldAlwaysMarkAsImportant' => 'true'],
-            $this->filter->important()->toArray()
+            $this->filter->important()->getActions()
         );
     }
 
@@ -294,7 +294,7 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['shouldNeverMarkAsImportant' => 'true'],
-            $this->filter->notImportant()->toArray()
+            $this->filter->notImportant()->getActions()
         );
     }
 
@@ -306,35 +306,37 @@ class FilterTest extends TestCase
     {
         $this->assertEquals(
             ['smartLabelToApply' => 'Foo'],
-            $this->filter->categorise('Foo')->toArray()
+            $this->filter->categorise('Foo')->getActions()
         );
     }
 
     /** @test */
     public function methods_can_be_chained()
     {
-        $this->assertEquals(
-            [
-                'from' => ['foo@example.com', 'bar@example.com'],
-                'hasTheWord' => 'Something',
-                'excludeChats' => 'true',
-                'label' => 'Foo',
-                'markAsRead' => 'true',
-                'shouldArchive' => 'true',
-                'shouldNeverSpam' => 'true',
-                'shouldSpam' => 'false',
-                'shouldStar' => 'true',
-                'shouldAlwaysMarkAsImportant' => 'true',
-            ],
-            $this->filter->from(['foo@example.com ', 'bar@example.com'])
-                ->has('Something')
-                ->excludeChats()
-                ->labelAndArchive('Foo')
-                ->read()
-                ->important()
-                ->neverSpam()
-                ->star()
-                ->toArray()
-        );
+        $filter = $this->filter
+            ->from(['foo@example.com ', 'bar@example.com'])
+            ->has('Something')
+            ->excludeChats()
+            ->labelAndArchive('Foo')
+            ->read()
+            ->important()
+            ->neverSpam()
+            ->star();
+
+        $this->assertSame([
+            'excludeChats' => 'true',
+            'from' => ['foo@example.com', 'bar@example.com'],
+            'hasTheWord' => 'Something',
+        ], $filter->getConditions());
+
+        $this->assertSame([
+            'label' => 'Foo',
+            'markAsRead' => 'true',
+            'shouldAlwaysMarkAsImportant' => 'true',
+            'shouldArchive' => 'true',
+            'shouldNeverSpam' => 'true',
+            'shouldSpam' => 'false',
+            'shouldStar' => 'true',
+        ], $filter->getActions());
     }
 }
diff --git a/tests/Unit/Service/BuilderTest.php b/tests/Unit/Service/BuilderTest.php
index 715299f..3d3af46 100644
--- a/tests/Unit/Service/BuilderTest.php
+++ b/tests/Unit/Service/BuilderTest.php
@@ -33,8 +33,8 @@ class BuilderTest extends TestCase
 </entry>
 <entry>
 <apps:property name='hasTheWord' value='from:bar@example.com'/>
-<apps:property name='shouldStar' value='true'/>
 <apps:property name='shouldAlwaysMarkAsImportant' value='true'/>
+<apps:property name='shouldStar' value='true'/>
 </entry>
 </feed>
 EOF;
diff --git a/tests/Unit/Service/PartialsTest.php b/tests/Unit/Service/PartialsTest.php
index 47a1b3c..b259d55 100644
--- a/tests/Unit/Service/PartialsTest.php
+++ b/tests/Unit/Service/PartialsTest.php
@@ -15,10 +15,9 @@ class PartialsTest extends TestCase
         $filters = FakePartials::load('filters');
 
         $this->assertCount(3, $filters);
-
-        $this->assertSame('foo@example.com', $filters[0]->toArray()['from'][0]);
-        $this->assertSame('bar@example.com', $filters[1]->toArray()['from'][0]);
-        $this->assertSame('baz@example.com', $filters[2]->toArray()['from'][0]);
+        $this->assertSame(['foo@example.com'], $filters[0]->getConditions()['from']);
+        $this->assertSame(['bar@example.com'], $filters[1]->getConditions()['from']);
+        $this->assertSame(['baz@example.com'], $filters[2]->getConditions()['from']);
     }
 }
 
@@ -29,6 +28,6 @@ class FakePartials extends Partials
      */
     protected static function getFilePattern($directoryName): string
     {
-        return __DIR__ . '/../../stubs/filters/*.php';
+        return 'tests/stubs/filters/*.php';
     }
 }