diff --git a/doc/reference/pidgin/pidgin-docs.xml b/doc/reference/pidgin/pidgin-docs.xml
--- a/doc/reference/pidgin/pidgin-docs.xml
+++ b/doc/reference/pidgin/pidgin-docs.xml
@@ -32,7 +32,6 @@
       <xi:include href="xml/gtkmedia.xml" />
       <xi:include href="xml/gtknotify.xml" />
       <xi:include href="xml/gtkpluginpref.xml" />
-      <xi:include href="xml/gtkprefs.xml" />
       <xi:include href="xml/gtkprivacy.xml" />
       <xi:include href="xml/gtkrequest.xml" />
       <xi:include href="xml/gtkroomlist.xml" />
@@ -79,6 +78,7 @@
       <xi:include href="xml/pidginplugininfo.xml" />
       <xi:include href="xml/pidginpluginsdialog.xml" />
       <xi:include href="xml/pidginpluginsmenu.xml" />
+      <xi:include href="xml/pidginprefs.xml" />
       <xi:include href="xml/pidginpresence.xml" />
       <xi:include href="xml/pidginpresenceicon.xml" />
       <xi:include href="xml/pidginprotocolchooser.xml" />
diff --git a/pidgin/gtkconv.c b/pidgin/gtkconv.c
--- a/pidgin/gtkconv.c
+++ b/pidgin/gtkconv.c
@@ -46,7 +46,6 @@
 #include "gtkconv.h"
 #include "gtkconvwin.h"
 #include "gtkdialogs.h"
-#include "gtkprefs.h"
 #include "gtkprivacy.h"
 #include "gtkutils.h"
 #include "pidginavatar.h"
@@ -5074,7 +5073,6 @@ pidgin_conversations_uninit(void)
 #include "gtkblist.h"
 #include "gtkconv.h"
 #include "gtkdialogs.h"
-#include "gtkprefs.h"
 #include "gtkprivacy.h"
 #include "gtkutils.h"
 #include "pidginmenutray.h"
diff --git a/pidgin/gtkpluginpref.c b/pidgin/gtkpluginpref.c
--- a/pidgin/gtkpluginpref.c
+++ b/pidgin/gtkpluginpref.c
@@ -23,8 +23,8 @@
 #include <purple.h>
 
 #include "gtkpluginpref.h"
-#include "gtkprefs.h"
 #include "gtkutils.h"
+#include "pidginprefs.h"
 
 static gboolean
 entry_cb(GtkWidget *entry, gpointer data) {
diff --git a/pidgin/gtkprefs.h b/pidgin/prefs/pidginprefs.h
rename from pidgin/gtkprefs.h
rename to pidgin/prefs/pidginprefs.h
--- a/pidgin/gtkprefs.h
+++ b/pidgin/prefs/pidginprefs.h
@@ -24,12 +24,12 @@
 # error "only <pidgin.h> may be included directly"
 #endif
 
-#ifndef _PIDGINPREFS_H_
-#define _PIDGINPREFS_H_
+#ifndef PIDGIN_PREFS_H
+#define PIDGIN_PREFS_H
 /**
- * SECTION:gtkprefs
- * @section_id: pidgin-gtkprefs
- * @short_description: <filename>gtkprefs.h</filename>
+ * SECTION:pidginprefs
+ * @section_id: pidgin-pidginprefs
+ * @short_description: <filename>pidginprefs.h</filename>
  * @title: Preferences
  */
 
@@ -160,4 +160,4 @@ void pidgin_prefs_update_old(void);
 
 G_END_DECLS
 
-#endif /* _PIDGINPREFS_H_ */
+#endif /* PIDGIN_PREFS_H */
diff --git a/pidgin/gtkprefs.c b/pidgin/prefs/pidginprefs.c
rename from pidgin/gtkprefs.c
rename to pidgin/prefs/pidginprefs.c
--- a/pidgin/gtkprefs.c
+++ b/pidgin/prefs/pidginprefs.c
@@ -37,13 +37,13 @@
 #include "gtkblist.h"
 #include "gtkconv.h"
 #include "gtkdialogs.h"
-#include "gtkprefs.h"
 #include "gtksavedstatuses.h"
 #include "gtksmiley-theme.h"
 #include "gtkstatus-icon-theme.h"
 #include "gtkutils.h"
 #include "pidgincore.h"
 #include "pidgindebug.h"
+#include "pidginprefs.h"
 #include "pidginstock.h"
 #ifdef USE_VV
 #include <gst/video/videooverlay.h>
diff --git a/pidgin/gtkutils.c b/pidgin/gtkutils.c
--- a/pidgin/gtkutils.c
+++ b/pidgin/gtkutils.c
@@ -40,7 +40,6 @@
 #include <talkatu.h>
 
 #include "gtkaccount.h"
-#include "gtkprefs.h"
 
 #include "gtkconv.h"
 #include "gtkdialogs.h"
diff --git a/pidgin/libpidgin.c b/pidgin/libpidgin.c
--- a/pidgin/libpidgin.c
+++ b/pidgin/libpidgin.c
@@ -41,7 +41,6 @@
 #include "gtkidle.h"
 #include "gtkmedia.h"
 #include "gtknotify.h"
-#include "gtkprefs.h"
 #include "gtkprivacy.h"
 #include "gtkrequest.h"
 #include "gtkroomlist.h"
@@ -54,6 +53,7 @@
 #include "pidgindebug.h"
 #include "pidginlog.h"
 #include "pidginplugininfo.h"
+#include "pidginprefs.h"
 #include "pidginprivate.h"
 #include "pidginstock.h"
 
diff --git a/pidgin/meson.build b/pidgin/meson.build
--- a/pidgin/meson.build
+++ b/pidgin/meson.build
@@ -12,7 +12,6 @@ libpidgin_SOURCES = [
 	'gtkmedia.c',
 	'gtknotify.c',
 	'gtkpluginpref.c',
-	'gtkprefs.c',
 	'gtkprivacy.c',
 	'gtkrequest.c',
 	'gtkroomlist.c',
@@ -44,8 +43,6 @@ libpidgin_SOURCES = [
 	'pidgincontactcompletion.c',
 	'pidginconversationwindow.c',
 	'pidgincontactlist.c',
-	'pidgincredentialproviderrow.c',
-	'pidgincredentialspage.c',
 	'pidgindebug.c',
 	'pidgindialog.c',
 	'pidgingdkpixbuf.c',
@@ -66,6 +63,9 @@ libpidgin_SOURCES = [
 	'pidgintalkatu.c',
 	'pidgintooltip.c',
 	'pidginwindow.c',
+	'prefs/pidginprefs.c',
+	'prefs/pidgincredentialproviderrow.c',
+	'prefs/pidgincredentialspage.c',
 ]
 
 libpidgin_headers = [
@@ -82,7 +82,6 @@ libpidgin_headers = [
 	'gtkmedia.h',
 	'gtknotify.h',
 	'gtkpluginpref.h',
-	'gtkprefs.h',
 	'gtkprivacy.h',
 	'gtkrequest.h',
 	'gtkroomlist.h',
@@ -114,8 +113,6 @@ libpidgin_headers = [
 	'pidginconversationwindow.h',
 	'pidgincontactlist.h',
 	'pidgincore.h',
-	'pidgincredentialproviderrow.h',
-	'pidgincredentialspage.h',
 	'pidgindialog.h',
 	'pidgindebug.h',
 	'pidgingdkpixbuf.h',
@@ -139,6 +136,12 @@ libpidgin_headers = [
 	'pidginwindow.h',
 ]
 
+libpidgin_prefs_headers = [
+	'prefs/pidginprefs.h',
+	'prefs/pidgincredentialproviderrow.h',
+	'prefs/pidgincredentialspage.h',
+]
+
 libpidgin_enum_headers = [
 	'gtkaccount.h',
 	'gtkblist.h',
@@ -200,7 +203,7 @@ if ENABLE_GTK
 	libpidgin_enums_h = libpidgin_enums[1]
 
 	PIDGIN_H_INCLUDES = []
-	foreach header : libpidgin_headers + ['pidginenums.h']
+	foreach header : libpidgin_headers + libpidgin_prefs_headers + ['pidginenums.h']
 		PIDGIN_H_INCLUDES += '#include <pidgin/@0@>'.format(header)
 	endforeach
 	pidgin_h_conf = configuration_data()
@@ -212,6 +215,7 @@ if ENABLE_GTK
 	                          install_dir : get_option('includedir') / pidgin_filebase)
 
 	install_headers(libpidgin_headers, subdir : pidgin_include_base)
+	install_headers(libpidgin_prefs_headers, subdir : pidgin_include_base / 'prefs')
 
 	_libpidgin_dependencies = [
 		glib,
@@ -245,7 +249,7 @@ if ENABLE_GTK
 	    libpidgin_SOURCES + libpidgin_built_sources + libpidgin_built_headers + ['pidginprivate.h'],
 	    package_revision,
 	    c_args : ['-DPIDGIN_COMPILATION', '-DG_LOG_DOMAIN="Pidgin"'],
-	    include_directories : [toplevel_inc],
+	    include_directories : [toplevel_inc, include_directories('prefs')],
 	    version : PURPLE_LIB_VERSION,
 	    dependencies : _libpidgin_dependencies,
 	    install : true)
@@ -311,7 +315,7 @@ if ENABLE_GTK
 	endif  # INSTALL_I18N
 
 	if enable_introspection
-		introspection_sources = libpidgin_headers
+		introspection_sources = libpidgin_headers + libpidgin_prefs_headers
 
 		Pidgin_gir_includes = [
 			'GObject-2.0', 'Gtk-3.0',
diff --git a/pidgin/pidginapplication.c b/pidgin/pidginapplication.c
--- a/pidgin/pidginapplication.c
+++ b/pidgin/pidginapplication.c
@@ -38,7 +38,6 @@
 #include "gtkaccount.h"
 #include "gtkblist.h"
 #include "gtkdialogs.h"
-#include "gtkprefs.h"
 #include "gtkprivacy.h"
 #include "gtkroomlist.h"
 #include "gtksmiley-manager.h"
@@ -49,6 +48,7 @@
 #include "pidginlog.h"
 #include "pidginmooddialog.h"
 #include "pidgin/pidginpluginsdialog.h"
+#include "pidginprefs.h"
 
 struct _PidginApplication {
 	GtkApplication parent;
diff --git a/pidgin/pidgincredentialproviderrow.h b/pidgin/prefs/pidgincredentialproviderrow.h
rename from pidgin/pidgincredentialproviderrow.h
rename to pidgin/prefs/pidgincredentialproviderrow.h
diff --git a/pidgin/pidgincredentialproviderrow.c b/pidgin/prefs/pidgincredentialproviderrow.c
rename from pidgin/pidgincredentialproviderrow.c
rename to pidgin/prefs/pidgincredentialproviderrow.c
diff --git a/pidgin/pidgincredentialspage.h b/pidgin/prefs/pidgincredentialspage.h
rename from pidgin/pidgincredentialspage.h
rename to pidgin/prefs/pidgincredentialspage.h
diff --git a/pidgin/pidgincredentialspage.c b/pidgin/prefs/pidgincredentialspage.c
rename from pidgin/pidgincredentialspage.c
rename to pidgin/prefs/pidgincredentialspage.c
diff --git a/po/POTFILES.in b/po/POTFILES.in
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -320,7 +320,6 @@ pidgin/gtkidle.c
 pidgin/gtkmedia.c
 pidgin/gtknotify.c
 pidgin/gtkpluginpref.c
-pidgin/gtkprefs.c
 pidgin/gtkprivacy.c
 pidgin/gtkrequest.c
 pidgin/gtkroomlist.c
@@ -353,8 +352,6 @@ pidgin/pidgincommands.c
 pidgin/pidgincontactcompletion.c
 pidgin/pidgincontactlist.c
 pidgin/pidginconversationwindow.c
-pidgin/pidgincredentialproviderrow.c
-pidgin/pidgincredentialspage.c
 pidgin/pidgindebug.c
 pidgin/pidgindialog.c
 pidgin/pidgingdkpixbuf.c
@@ -391,6 +388,9 @@ pidgin/plugins/transparency.c
 pidgin/plugins/unity.c
 pidgin/plugins/xmppconsole/console.ui
 pidgin/plugins/xmppconsole/xmppconsole.c
+pidgin/prefs/pidgincredentialproviderrow.c
+pidgin/prefs/pidgincredentialspage.c
+pidgin/prefs/pidginprefs.c
 pidgin/resources/About/about.ui
 pidgin/resources/Accounts/actionsmenu.ui
 pidgin/resources/Accounts/chooser.ui
