diff --git a/configs/res_odbc.conf.sample b/configs/res_odbc.conf.sample
index 097849dd73491fa5ca46236dfcab715f3904e1e7..c40b47e3ef96121532e7afa83e70c1548a7be95b 100644
--- a/configs/res_odbc.conf.sample
+++ b/configs/res_odbc.conf.sample
@@ -4,8 +4,9 @@
 ; Note that all environmental variables can be seen by all connections,
 ; so you can't have different values for different connections.
 [ENV]
-INFORMIXSERVER => my_special_database
-INFORMIXDIR => /opt/informix
+;INFORMIXSERVER => my_special_database
+;INFORMIXDIR => /opt/informix
+;ORACLE_HOME => /home/oracle
 
 ; All other sections are arbitrary names for database connections.
 
@@ -15,6 +16,7 @@ dsn => asterisk
 ;username => myuser
 ;password => mypass
 pre-connect => yes
+;
 ; What should we execute to ensure that our connection is still alive?  The
 ; statement should return a non-zero value in the first field of its first
 ; record.  The default is "select 1".
@@ -34,17 +36,18 @@ pre-connect => yes
 ;idlecheck => 3600
 
 ; Certain servers, such as MS SQL Server and Sybase use the TDS protocol, which
-; limits the number of active queries per connection to 1.  By setting up pools
-; of connections, Asterisk can be made to work with these servers.
+; limits the number of active queries per connection to 1.  By telling res_odbc
+; not to share connections, Asterisk can be made to work with these servers.
 [sqlserver]
 enabled => no
 dsn => mickeysoft
-pooling => yes
+share_connections => no
 limit => 5
 username => oscar
 password => thegrouch
 pre-connect => yes
 sanitysql => select count(*) from systables
+;
 ; Many databases have a default of '\' to escape special characters.  MS SQL
 ; Server does not.
 backslash_is_escape => no
diff --git a/res/res_odbc.c b/res/res_odbc.c
index 201cf77b938bdc802684a649a0c0a6f0b437dd1f..34d905b555e95aa4d36976cff0d157268e90c4e5 100644
--- a/res/res_odbc.c
+++ b/res/res_odbc.c
@@ -262,6 +262,10 @@ static int load_odbc_config(void)
 				if (!strcasecmp(v->name, "pooling")) {
 					if (ast_true(v->value))
 						pooling = 1;
+				} else if (!strncasecmp(v->name, "share", 5)) {
+					/* "shareconnections" is a little clearer in meaning than "pooling" */
+					if (ast_false(v->value))
+						pooling = 1;
 				} else if (!strcasecmp(v->name, "limit")) {
 					sscanf(v->value, "%d", &limit);
 					if (ast_true(v->value) && !limit) {
@@ -633,7 +637,12 @@ static int reload(void)
 				bse = 1;
 				for (v = ast_variable_browse(config, cat); v; v = v->next) {
 					if (!strcasecmp(v->name, "pooling")) {
-						pooling = 1;
+						if (ast_true(v->value))
+							pooling = 1;
+					} else if (!strncasecmp(v->name, "share", 5)) {
+						/* "shareconnections" is a little clearer in meaning than "pooling" */
+						if (ast_false(v->value))
+							pooling = 1;
 					} else if (!strcasecmp(v->name, "limit")) {
 						sscanf(v->value, "%d", &limit);
 						if (ast_true(v->value) && !limit) {