diff --git a/php-face.el b/php-face.el
index 4fc9542b..44988f16 100644
--- a/php-face.el
+++ b/php-face.el
@@ -206,6 +206,41 @@
   :group 'php-faces
   :tag "PHP Class Declaration")
 
+(defface php-class-declaration-spec '((t (:inherit php-keyword)))
+  "Face used to highlight class declaration specification keywords (implements, extends)"
+  :group 'php-faces
+  :tag "PHP Class Declaration Specification")
+
+(defface php-namespace-declaration '((t (:inherit php-keyword)))
+  "Face used to highlight namespace declaration keyword."
+  :group 'php-faces
+  :tag "PHP Namespace Declaration")
+
+(defface php-import-declaration '((t (:inherit php-keyword)))
+  "PHP Mode Face used to highlight import statements (use ... as ...)."
+  :group 'php-faces
+  :tag "PHP Import Statement")
+
+(defface php-class-modifier '((t (:inherit php-keyword)))
+  "PHP Mode Face used to highlight class modifiers (final, abstract)."
+  :group 'php-faces
+  :tag "PHP Class Modifier")
+
+(defface php-method-modifier '((t (:inherit php-keyword)))
+  "PHP Mode Face used to highlight method modifiers (final, abstract)."
+  :group 'php-faces
+  :tag "PHP Method Modifier")
+
+(defface php-visibility-modifier '((t (:inherit php-keyword)))
+  "PHP Mode Face used to highlight access keywords (public, protected, private)."
+  :group 'php-faces
+  :tag "PHP Visibility Modifier")
+
+(defface php-control-structure '((t (:inherit php-keyword)))
+  "PHP Mode Face used to highlight control structures (if, foreach, while, switch, catch...)."
+  :group 'php-faces
+  :tag "PHP Control Structure")
+
 (define-obsolete-face-alias 'php-annotations-annotation-face 'php-doc-annotation-tag "1.19.0")
 
 (provide 'php-face)
diff --git a/php-mode.el b/php-mode.el
index 9a90373b..0d756813 100644
--- a/php-mode.el
+++ b/php-mode.el
@@ -1494,6 +1494,15 @@ a completion list."
    ;;  only add patterns here if you want to prevent cc-mode from applying
    ;;  a different face.
    `(
+     ;; Class declaration specification keywords (implements, extends)
+     ("\\_<\\(?:implements\\|extends\\)\\_>" . 'php-class-declaration-spec)
+     ;; Namespace declaration
+     ("\\_<namespace\\_>" . 'php-namespace-declaration)
+     ;; import statement
+     ("\\_<use\\_>" . 'php-import-declaration)
+     ;; Class modifiers (abstract, final)
+     ("\\_<\\(abstract\\|final\\)\\_>\\s-+\\_<class\\>" 1 'php-class-modifier)
+
      ;; Highlight variables, e.g. 'var' in '$var' and '$obj->var', but
      ;; not in $obj->var()
      ("\\(->\\)\\(\\sw+\\)\\s-*(" (1 'php-object-op) (2 'php-method-call))
diff --git a/tests/lang/class/anonymous-class.php.faces b/tests/lang/class/anonymous-class.php.faces
index 050f7f11..415bcaa2 100644
--- a/tests/lang/class/anonymous-class.php.faces
+++ b/tests/lang/class/anonymous-class.php.faces
@@ -10,7 +10,7 @@
  (" ")
  ("class" . php-class-declaration)
  (" () ")
- ("extends" . php-keyword)
+ ("extends" . php-class-declaration-spec)
  (" ")
  ("IteratorAggregate" . font-lock-type-face)
  (" {\n    ")
@@ -23,7 +23,7 @@
  (" ")
  ("class" . php-class-declaration)
  (" () ")
- ("extends" . php-keyword)
+ ("extends" . php-class-declaration-spec)
  (" ")
  ("IteratorAggregate" . font-lock-type-face)
  (" {\n    ")
diff --git a/tests/lang/doc-comment/annotation.php.faces b/tests/lang/doc-comment/annotation.php.faces
index ada1815c..283c5b2c 100644
--- a/tests/lang/doc-comment/annotation.php.faces
+++ b/tests/lang/doc-comment/annotation.php.faces
@@ -24,7 +24,7 @@
  (" ")
  ("Child" . font-lock-type-face)
  (" ")
- ("extends" . php-keyword)
+ ("extends" . php-class-declaration-spec)
  (" ")
  ("Parent_" . font-lock-type-face)
  ("\n{\n}\n"))
diff --git a/tests/lang/doc-comment/comments.php.24.faces b/tests/lang/doc-comment/comments.php.24.faces
index 09bfd78b..a411a2ff 100644
--- a/tests/lang/doc-comment/comments.php.24.faces
+++ b/tests/lang/doc-comment/comments.php.24.faces
@@ -62,7 +62,7 @@
  ("@ORM\\Entity" php-doc-annotation-tag font-lock-doc-face)
  ("(repositoryClass=\"Emacs\\Repository\\MajorModeRepository\")\n */" . font-lock-doc-face)
  ("\n")
- ("final" . php-keyword)
+ ("final" . php-class-modifier)
  (" ")
  ("class" . php-class-declaration)
  (" ")
diff --git a/tests/lang/doc-comment/comments.php.27.faces b/tests/lang/doc-comment/comments.php.27.faces
index 0efe359f..e48028c8 100644
--- a/tests/lang/doc-comment/comments.php.27.faces
+++ b/tests/lang/doc-comment/comments.php.27.faces
@@ -63,7 +63,7 @@
  ("@ORM\\Entity" php-doc-annotation-tag font-lock-doc-face)
  ("(repositoryClass=\"Emacs\\Repository\\MajorModeRepository\")\n */" . font-lock-doc-face)
  ("\n")
- ("final" . php-keyword)
+ ("final" . php-class-modifier)
  (" ")
  ("class" . php-class-declaration)
  (" ")
diff --git a/tests/lang/doc-comment/comments.php.faces b/tests/lang/doc-comment/comments.php.faces
index e3900a99..e6748c07 100644
--- a/tests/lang/doc-comment/comments.php.faces
+++ b/tests/lang/doc-comment/comments.php.faces
@@ -62,7 +62,7 @@
  ("@ORM\\Entity" php-doc-annotation-tag font-lock-doc-face)
  ("(repositoryClass=\"Emacs\\Repository\\MajorModeRepository\")\n */" . font-lock-doc-face)
  ("\n")
- ("final" . php-keyword)
+ ("final" . php-class-modifier)
  (" ")
  ("class" . php-class-declaration)
  (" ")
diff --git a/tests/language-constructs.php b/tests/language-constructs.php
index 693f6ece..ce3dc467 100644
--- a/tests/language-constructs.php
+++ b/tests/language-constructs.php
@@ -38,7 +38,6 @@
 endwhile;
 eval();
 exit();
-extends ClassName;
 final;
 finally;
 for;
@@ -47,14 +46,12 @@ function;
 global;
 goto;
 if;
-implements ClassName;
 include;
 include_once;
 instanceof ClassName;
 insteadof ClassName;
 isset();
 list();
-namespace ClassName;
 new ClassName;
 print;
 private;
@@ -68,7 +65,6 @@ function;
 throw;
 try;
 unset();
-use ClassName;
 var;
 while;
 xor;
diff --git a/tests/php-mode-test.el b/tests/php-mode-test.el
index d41217cd..4b3598e9 100644
--- a/tests/php-mode-test.el
+++ b/tests/php-mode-test.el
@@ -158,10 +158,12 @@ file name and check that the faces of the fonts in the buffer match."
                               (php-mode-test-process-magics))))
      ,(if faces
           `(should (equal
-                    (php-mode-test--parse-list-file
-                     (concat (expand-file-name ,file php-mode-test-dir)
-                             (if (eq t ,faces) ".faces" ,faces)))
-                    (php-mode-test--buffer-face-list (current-buffer)))))
+                    (cons ,file
+                          (php-mode-test--parse-list-file
+                           (concat (expand-file-name ,file php-mode-test-dir)
+                                   (if (eq t ,faces) ".faces" ,faces))))
+                    (cons ,file
+                          (php-mode-test--buffer-face-list (current-buffer))))))
      (goto-char (point-min))
      (let ((case-fold-search nil))
        ,@body)))
@@ -421,14 +423,16 @@ style from Drupal."
   (with-php-mode-test ("language-constructs.php")
     (while (search-forward "ClassName" nil t)
       (backward-char)
-      (should (eq 'font-lock-type-face
-                  (get-text-property (point) 'face)))))
+      (let ((token (symbol-at-point)))
+        (should (equal (list token 'font-lock-type-face)
+                       (list token (get-text-property (point) 'face)))))))
   (with-php-mode-test ("language-constructs.php")
     (search-forward "Start:")
     (while (not (= (line-number-at-pos) (count-lines (point-min) (point-max))))
       (forward-line 1)
-      (should (eq 'php-keyword
-                  (get-text-property (point) 'face))))))
+      (let ((token (symbol-at-point)))
+        (should (equal (list token 'php-keyword)
+                       (list token (get-text-property (point) 'face))))))))
 
 (ert-deftest php-mode-test-issue-178 ()
   "Highligth as keyword and following symbol"