diff --git a/glade/vte.xml.in.in b/glade/vte.xml.in.in
index 26c823a..da2d39d 100644
--- a/glade/vte.xml.in.in
+++ b/glade/vte.xml.in.in
@@ -34,6 +34,7 @@
         <property id="vadjustment" />
         <property id="vscroll-policy" />
         <property id="window-title" />
+        <property id="word-char-exceptions" />
       </properties>
     </glade-widget-class>
   </glade-widget-classes>
diff --git a/src/vte.c b/src/vte.c
index d49fccd..ee5288d 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -82,7 +82,7 @@ typedef gunichar wint_t;
 #define howmany(x, y) (((x) + ((y) - 1)) / (y))
 #endif
 
-#define WORD_CHAR_ASCII_PUNCT "-,.;/?%&#_=+@~"
+#define WORD_CHAR_EXCEPTIONS_DEFAULT "-,.;/?%&#_=+@~"
 
 static int _vte_unichar_width(gunichar c, int utf8_ambiguous_width);
 static void vte_terminal_set_visibility (VteTerminal *terminal, GdkVisibilityState state);
@@ -5246,18 +5246,19 @@ vte_terminal_key_release(GtkWidget *widget, GdkEventKey *event)
  * @terminal: a #VteTerminal
  * @c: a candidate Unicode code point
  *
- * Checks if a particular character is considered to be part of a word or not.
+ * Checks if a particular character is considered to be part of a word or not,
+ * based on the values last passed to vte_terminal_set_word_char_exceptions().
  *
  * Returns: %TRUE if the character is considered to be part of a word
  */
 gboolean
 _vte_terminal_is_word_char(VteTerminal *terminal, gunichar c)
 {
+        gboolean is_exception = terminal->pvt->word_char_exceptions != NULL &&
+                                g_utf8_strchr(terminal->pvt->word_char_exceptions, -1, c) != NULL;
+
 	return g_unichar_isgraph(c) &&
-               (g_unichar_isalnum(c) ||
-                (g_unichar_ispunct(c) &&
-                 (c >= 0x80 ||
-                  strchr (WORD_CHAR_ASCII_PUNCT, (int) c) != NULL)));
+               (g_unichar_isalnum(c) ^ is_exception);
 }
 
 /* Check if the characters in the two given locations are in the same class
@@ -8112,6 +8113,9 @@ vte_terminal_init(VteTerminal *terminal)
         pvt->scrollback_lines = -1; /* force update in vte_terminal_set_scrollback_lines */
 	vte_terminal_set_scrollback_lines(terminal, VTE_SCROLLBACK_INIT);
 
+	/* Selection info. */
+	vte_terminal_set_word_char_exceptions(terminal, WORD_CHAR_EXCEPTIONS_DEFAULT);
+
 	/* Miscellaneous options. */
 	vte_terminal_set_backspace_binding(terminal, VTE_ERASE_AUTO);
 	vte_terminal_set_delete_binding(terminal, VTE_ERASE_AUTO);
@@ -11134,7 +11138,7 @@ vte_terminal_class_init(VteTerminalClass *klass)
                 (gobject_class,
                  PROP_WORD_CHAR_EXCEPTIONS,
                  g_param_spec_string ("word-char-exceptions", NULL, NULL,
-                                      NULL,
+                                      WORD_CHAR_EXCEPTIONS_DEFAULT,
                                       G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY));
 
 	/* Disable GtkWidget's keybindings except for Shift-F10 and MenuKey
