diff --git a/library/roles/roundcube/defaults/main.yml b/library/roles/roundcube/defaults/main.yml
index 7e2c7a38..746ba7a9 100644
--- a/library/roles/roundcube/defaults/main.yml
+++ b/library/roles/roundcube/defaults/main.yml
@@ -124,6 +124,28 @@ roundcube_enigma_gpgconf_bin: /usr/bin/gpgconf
 roundcube_enigma_gpgagent_bin: /usr/bin/gpg-agent
 roundcube_enigma_multihost: 'false'
 
+roundcube_sauserprefs_plugin_install: False
+roundcube_sauserprefs_plugin_name: sauserprefs
+roundcube_sauserprefs_version: '1.18.1'
+roundcube_sauserprefs_db_type: 'pgsql'
+roundcube_sauserprefs_db_host: 'localhost'
+roundcube_sauserprefs_db_name: 'spamassassin'
+roundcube_sauserprefs_db_user: 'spamassassin'
+# roundcube_sauserprefs_db_pwd: 'vault file'
+roundcube_sauserprefs_git: 'https://github.com/johndoh/roundcube-sauserprefs.git'
+roundcube_sauserprefs_username_field: '%i'
+roundcube_sauserprefs_abook_sync: 'false'
+roundcube_sauserprefs_abook_import: 'false'
+roundcube_sauserprefs_pyzor_enabled: '0'
+roundcube_sauserprefs_bayes_enabled: False
+roundcube_sauserprefs_bayes_rules: '0'
+roundcube_sauserprefs_bayes_autolearn: '0'
+roundcube_sauserprefs_autowhitelist_enabled: False
+roundcube_sauserprefs_subject: '[SPAM]'
+roundcube_sauserprefs_report_safe: '0'
+roundcube_sauserprefs_skip_rbl_checks: '0'
+roundcube_sauserprefs_do_not_override_array: "'use_razor1','use_razor2','use_dcc'"
+
 roundcube_managesieve_config: True
 roundcube_managesieve_auth: 'plain'
 roundcube_managesieve_port: 4190
diff --git a/library/roles/roundcube/tasks/roundcube-install.yml b/library/roles/roundcube/tasks/roundcube-install.yml
index 6fd58d42..7403b981 100644
--- a/library/roles/roundcube/tasks/roundcube-install.yml
+++ b/library/roles/roundcube/tasks/roundcube-install.yml
@@ -52,6 +52,25 @@
   when: roundcube_install_enigma | bool
   tags: [ 'roundcube', 'roundcube_plugins', 'roundcube_config', 'roundcube_enigma' ]
 
+- name: Manage the Spamassassin preferences plugin and its dependency
+  block:
+  - name: Install the sauserprefs plugin
+    git: repo={{ roundcube_sauserprefs_git }} dest={{ roundcube_web_root }}/plugins/{{ roundcube_sauserprefs_plugin_name }} version={{ roundcube_sauserprefs_version }}
+
+  - name: Install the sauserprefs plugin configuration
+    template: src=sauserprefs-config.inc.php.j2 dest={{ roundcube_web_root }}/plugins/{{ roundcube_sauserprefs_plugin_name }}/config.inc.php owner=root group={{ roundcube_user }} mode=0440
+  
+  when: roundcube_sauserprefs_plugin_install | bool
+  tags: [ 'roundcube', 'roundcube_plugins', 'roundcube_config', 'roundcube_sauserprefs' ]
+
+- name: Remove the Spamassassin preferences plugin when not enabled
+  block:
+  - name: Remove the sauserprefs plugin
+    file: dest={{ roundcube_web_root }}/plugins/{{ roundcube_sauserprefs_plugin_name }} state=absent
+  
+  when: not roundcube_sauserprefs_plugin_install | bool
+  tags: [ 'roundcube', 'roundcube_plugins', 'roundcube_config', 'roundcube_sauserprefs' ]
+
 - block:
   - name: Configure the roundcube instance
     template: src=config.inc.php.j2 dest={{ roundcube_web_root }}/config/config.inc.php owner=root group=root mode=0444
diff --git a/library/roles/roundcube/templates/sauserprefs-config.inc.php.j2 b/library/roles/roundcube/templates/sauserprefs-config.inc.php.j2
new file mode 100644
index 00000000..2a11819a
--- /dev/null
+++ b/library/roles/roundcube/templates/sauserprefs-config.inc.php.j2
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * SAUserPrefs configuration file
+ */
+
+// spamassassin database settings
+$config['sauserprefs_db_dsnw'] = '{{ roundcube_sauserprefs_db_type }}://{{ roundcube_sauserprefs_db_user }}:{{ roundcube_sauserprefs_db_pwd }}@{{ roundcube_sauserprefs_db_host }}/{{ roundcube_sauserprefs_db_name }}';
+
+// PEAR database DSN for read only operations (if empty write database will be used)
+// useful for database replication
+$config['sauserprefs_db_dsnr'] = '';
+
+// use persistent db-connections
+// beware this will not "always" work as expected
+// see: http://www.php.net/manual/en/features.persistent-connections.php
+$config['sauserprefs_db_persistent'] = false;
+
+// table that holds user prefs
+$config['sauserprefs_sql_table_name'] = 'userpref';
+
+// name of the username field in the user prefs table
+$config['sauserprefs_sql_username_field'] = 'username';
+
+// name of the preference field in the user prefs table, holds the name of the preference
+$config['sauserprefs_sql_preference_field'] = 'preference';
+
+// name of the value field in the user prefs table, holds the value of the preference
+$config['sauserprefs_sql_value_field'] = 'value';
+
+// username of the current user in the database, normaly %u (username from the session info)
+//      %u is replaced with the username (from the session info)
+//      %l is replaced with the local part of the username (if the username is an email address)
+//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
+//      %i is replaced with the email address from the user's default identity
+$config['sauserprefs_userid'] = '{{ roundcube_sauserprefs_username_field }}';
+
+// username of the global or default settings user in the database, normaly $GLOBAL or @GLOBAL
+$config['sauserprefs_global_userid'] = '\$GLOBAL';
+
+// enable address whitelist synchronisation with address book(s)
+// possible values:
+//   false - synchronisation disabled
+//   true - synchronise with default address book
+//   array - an array of address book ids to synchronise with e.g. array('0', 'global'); '0' = the default address book
+$config['sauserprefs_abook_sync'] = {{ roundcube_sauserprefs_abook_sync }};
+
+// set to false to disable address book import
+// possible values:
+//   false - address import disabled
+//   true - import addresses from default address book
+//   array - an array of address book ids to import e.g. array('0', 'global'); '0' = the default address book
+$config['sauserprefs_abook_import'] = {{ roundcube_sauserprefs_abook_import }};
+
+// don't allow these settings to be overriden by the user
+// eg. $config['sauserprefs_dont_override'] = array('required_score','rewrite_header Subject');
+// to disable entire sections enter the section name surrounded by braces. Sections are: general,tests,bayes,headers,report,addresses
+// eg. $config['sauserprefs_dont_override'] = array('{tests}');
+$config['sauserprefs_dont_override'] = array({{ roundcube_sauserprefs_do_not_override_array }});
+
+// activate SAUserPrefs for selected mail hosts only. If this is not set all mail hosts are allowed.
+// example: $config['sauserprefs_allowed_hosts'] = array('mail1.domain.tld', 'mail2.domain.tld');
+$config['sauserprefs_allowed_hosts'] = null;
+
+// load specific config for different mail hosts
+// example: $config['sauserprefs_host_config'] = array(
+//    'mail1.domain.tld' => 'mail1_config.inc.php',
+//    'mail2.domain.tld' => 'mail2_config.inc.php',
+// );
+$config['sauserprefs_host_config'] = null;
+
+// default settings
+// these are overridden by $GLOBAL and user settings from the database
+$config['sauserprefs_default_prefs'] = array(
+                                    'required_score' => 5,
+                                    'rewrite_header Subject' => '{{ roundcube_sauserprefs_subject }}',
+                                    'ok_languages' => 'all',
+                                    'ok_locales' => 'all',
+                                    'fold_headers' => 1,
+                                    'add_header all Level' => '_STARS(*)_',
+                                    'use_razor1' => 0,
+                                    'use_razor2' => 0,
+                                    'use_pyzor' => {{ roundcube_sauserprefs_pyzor_enabled }},
+                                    'use_dcc' => 0,
+                                    'report_safe' => {{ roundcube_sauserprefs_report_safe }},
+{% if roundcube_sauserprefs_bayes_enabled %}
+                                    'use_bayes' => 1,
+                                    'bayes_auto_learn' => {{ roundcube_sauserprefs_bayes_autolearn }},
+                                    'bayes_auto_learn_threshold_nonspam' => 0.1,
+                                    'bayes_auto_learn_threshold_spam' => 12.0,
+                                    'use_bayes_rules' => {{ roundcube_sauserprefs_bayes_rules }},
+{% endif %}
+{% if roundcube_sauserprefs_autowhitelist_enabled %}
+                                    'use_auto_whitelist' => 1,
+{% else %}
+                                    'use_auto_whitelist' => 0,
+{% endif %}
+                                    'skip_rbl_checks' => {{ roundcube_sauserprefs_skip_rbl_checks }},
+                                    'score USER_IN_BLACKLIST' => 10,
+                                    'score USER_IN_WHITELIST' => -10
+                                );
+
+// score options
+// define the ranges for the various score select boxes
+// '[field name]' => array('min' => [min], 'max' => [max], 'increment' => [increment], 'extra' => array())
+// note: the 'extra' key is optional and should contain further arrays with min, max and increment keys
+$config['sauserprefs_score_options'] = array(
+                                    '*' => array('min' => 1, 'max' => 10, 'increment' => 1),
+                                    '_bayesnonspam' => array('min' => -1, 'max' => 1, 'increment' => 0.1),
+                                    '_bayesspam' => array('min' => 1, 'max' => 20, 'increment' => 1),
+                                    '_score_user_blacklist' => array('min' => 0, 'max' => 100, 'increment' => 10, 'extra' => array(array('min' => 1, 'max' => 10, 'increment' => 1))),
+                                    '_score_user_whitelist' => array('min' => -100, 'max' => -1, 'increment' => 10, 'extra' => array(array('min' => -10, 'max' => -1, 'increment' => 1)))
+                                );
+
+// delete user bayesian data stored in database
+// the query can contain the following macros that will be expanded as follows:
+//      %u is replaced with the username from the sauserprefs_userid setting above
+// use an array to run multiple queries
+// set to null to disable this option
+// eg. $config['sauserprefs_bayes_delete_query'] = array(
+//                                              'DELETE FROM bayes_seen WHERE id IN (SELECT id FROM bayes_vars WHERE username = %u);',
+//                                              'DELETE FROM bayes_token WHERE id IN (SELECT id FROM bayes_vars WHERE username = %u);',
+//                                              'DELETE FROM bayes_vars WHERE username = %u;'
+//                                              );
+$config['sauserprefs_bayes_delete_query'] = null;
+
+// allowed languages
+// set to array of language codes to limit the language list available for the ok_languages option
+// eg array('en', 'es', 'ru', 'zh');
+// see the README for a full list of supported languages
+// set to null for all possible languages
+$config['sauserprefs_langs_allowed'] = null;