diff --git a/ftdetect/drupal.vim b/ftdetect/drupal.vim
index 541645d..76c4c2f 100644
--- a/ftdetect/drupal.vim
+++ b/ftdetect/drupal.vim
@@ -1,11 +1,11 @@
 " Set filetype for Drupal PHP files.
-autocmd BufRead,BufNewFile *.module set filetype=php.drupal
-autocmd BufRead,BufNewFile *.php set filetype=php.drupal
-autocmd BufRead,BufNewFile *.install set filetype=php.drupal
-autocmd BufRead,BufNewFile *.inc set filetype=php.drupal
-autocmd BufRead,BufNewFile *.profile set filetype=php.drupal
-autocmd BufRead,BufNewFile *.theme set filetype=php.drupal
-autocmd BufRead,BufNewFile *.engine set filetype=php.drupal
-autocmd BufRead,BufNewFile *.test set filetype=php.drupal
+autocmd BufRead,BufNewFile *.module set filetype=php
+autocmd BufRead,BufNewFile *.php set filetype=php
+autocmd BufRead,BufNewFile *.install set filetype=php
+autocmd BufRead,BufNewFile *.inc set filetype=php
+autocmd BufRead,BufNewFile *.profile set filetype=php
+autocmd BufRead,BufNewFile *.theme set filetype=php
+autocmd BufRead,BufNewFile *.engine set filetype=php
+autocmd BufRead,BufNewFile *.test set filetype=php
 " info and make files use INI syntax.
 autocmd BufRead,BufNewFile *.{info,make,build}	set filetype=dosini
diff --git a/ftplugin/drupal.vim b/ftplugin/drupal.vim
index f8528cf..23938dc 100644
--- a/ftplugin/drupal.vim
+++ b/ftplugin/drupal.vim
@@ -1,5 +1,5 @@
-" This file contains common Drupal-related settings.  It is :source'd by the
-" *_drupal.vim files in this directory; there is no drupal filetype.
+" We never :set ft=drupal.  This filetype is always added to another, as in
+" :set ft=php.drupal or :set ft=css.drupal.
 
 setl nojoinspaces            "No second space when joining lines that end in "."
 setl autoindent              "Auto indent based on previous line
@@ -27,3 +27,16 @@ nnoremap <buffer> <LocalLeader>da :execute "!open http://api.drupal.org/".shelle
 nnoremap <buffer> <LocalLeader>dda :execute "!open http://api.drush.ws/api/function/".shellescape(expand("<cword>"), 1)<CR>
 " Get the value of the drupal variable under cursor.
 nnoremap <buffer> <LocalLeader>dv :execute "!drush vget ".shellescape(expand("<cword>"), 1)<CR>
+
+" PHP specific settings.
+" In ftdetect/drupal.vim we set ft=php.drupal.  This means that the settings
+" here will come after those set by the PHP ftplugins.  In particular, we can
+" override the 'comments' setting.
+
+if &ft =~ '\<php\>'
+  setl ignorecase              "Ignore case in search
+  setl smartcase               "Only ignore case when all letters are lowercase
+  setl comments=sr:/**,m:*\ ,ex:*/,://
+  "  Format comment blocks.  Just type / on a new line to close.
+  "  Recognize // (but not #) style comments.
+endif
diff --git a/ftplugin/javascript_drupal.vim b/ftplugin/javascript_drupal.vim
deleted file mode 100644
index 17afa0b..0000000
--- a/ftplugin/javascript_drupal.vim
+++ /dev/null
@@ -1,13 +0,0 @@
-" Source the default ftplugin so that it does not change our settings.
-" Uncomment the next line if it is needed.
-" runtime! ftplugin/javascript.vim
-
-" Get common settings and mappings for Drupal.
-source <sfile>:h/drupal.vim
-
-" Settings specific to javascript/Drupal go here.
-
-" Is javascript a case-insensitive language?
-
-" setl ignorecase              "Ignore case in search
-" setl smartcase               "Only ignore case when all letters are lowercase
diff --git a/ftplugin/php_drupal.vim b/ftplugin/php_drupal.vim
deleted file mode 100644
index 08276b4..0000000
--- a/ftplugin/php_drupal.vim
+++ /dev/null
@@ -1,12 +0,0 @@
-" Source the default ftplugin so that it does not change our settings.
-" Specifically, the 'comments' option gets clobbered by html.vim.
-runtime! ftplugin/php.vim
-
-" Get common settings and mappings for Drupal.
-source <sfile>:h/drupal.vim
-
-setl ignorecase              "Ignore case in search
-setl smartcase               "Only ignore case when all letters are lowercase
-setl comments=sr:/**,m:*\ ,ex:*/,://
-"  Format comment blocks.  Just type / on a new line to close.
-"  Recognize // (but not #) style comments.
diff --git a/plugin/drupal.vim b/plugin/drupal.vim
index 656afce..d63c38a 100644
--- a/plugin/drupal.vim
+++ b/plugin/drupal.vim
@@ -55,26 +55,26 @@ if has("autocmd")
  \| exe "normal! g'\"" | endif
 endif
 
-" Highlight long comments and trailing whitespace.
-" It is not good practice to include syntax items in a plugin file, but we do
-" it here, with Syntax autocommands, because syntax files do not follow the
-" same naming conventions as ftplugin files, so we cannot use (for example)
-" syntax/php_drupal.vim .
-" Adapted from http://vim.wikia.com/wiki/Highlight_unwanted_spaces
-highlight default link drupalExtraWhitespace Error
-highlight default link drupalOverLength Error
+if has("autocmd")
 augroup Drupal
   " Remove ALL autocommands for the Drupal group.
   autocmd!
-  autocmd Syntax php syn match drupalOverLength "\%81v.*" containedin=phpComment contained
-  autocmd Syntax css syn match drupalOverLength "\%81v.*" containedin=cssComment contained
+  " Add drupal as a secondary filetype.  This will load the ftplugins and syntax
+  " files drupal.vim after the usual ones.
+  autocmd FileType php,css,javascript,dosini set ft+=.drupal
+
+  " Highlight trailing whitespace.
   autocmd BufWinEnter * call s:ToggleWhitespaceMatch('BufWinEnter')
   autocmd BufWinLeave * call s:ToggleWhitespaceMatch('BufWinLeave')
   autocmd InsertEnter * call s:ToggleWhitespaceMatch('InsertEnter')
   autocmd InsertLeave * call s:ToggleWhitespaceMatch('InsertLeave')
 augroup END
+highlight default link drupalExtraWhitespace Error
+
+" Adapted from http://vim.wikia.com/wiki/Highlight_unwanted_spaces
 function! s:ToggleWhitespaceMatch(event)
-  if &ft != 'php' && &ft != 'css'
+  " Bail out unless the filetype is php.drupal, css.drupal, ...
+  if &ft !~ '\<drupal\>'
     return
   endif
   if a:event == 'BufWinEnter'
@@ -93,3 +93,4 @@ function! s:ToggleWhitespaceMatch(event)
     call matchadd('drupalExtraWhitespace', '\s\+$', 10, w:whitespace_match_number)
   endif
 endfunction
+endif " has("autocmd")
diff --git a/syntax/drupal.vim b/syntax/drupal.vim
new file mode 100644
index 0000000..14ef848
--- /dev/null
+++ b/syntax/drupal.vim
@@ -0,0 +1,13 @@
+" We never :set ft=drupal.  This filetype is always added to another, as in
+" :set ft=php.drupal or :set ft=css.drupal.
+
+" Highlight long comments.  The order of these two commands matters!
+syn match drupalOverLength "\%>80v[^*/].*" containedin=@drupalComment contained
+syn match drupalOverLength "\%81v.*\*\/"me=e-2 containedin=@drupalComment contained
+" Add <syntax>Comment.* to the @drupalComment cluster for all applicable
+" syntax types.
+let s:syntax = substitute(&syntax, '\.drupal\>', '', 'g')
+execute 'syn cluster drupalComment contains=' .
+      \ substitute(s:syntax, '\.\|$', 'Comment.*,', 'g')
+
+highlight default link drupalOverLength Error
