Added the --experimental option
diff --git a/CHANGES b/CHANGES
index 482dab7..53f5063 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,9 @@
 
-####################### V 1.7.4.5:
+Features:
+	Added the --experimental option that enables use of features that might
+	change in the future.
+
+####################### V 1.7.4.5 (not released):
 
 Corrections:
 	On connect() failure and in some other situations Socat tries to get
diff --git a/VERSION b/VERSION
index e17e390..ceaf471 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-"1.7.4.5"
+"1.7.4.5+"
diff --git a/configure.ac b/configure.ac
index 7c7b1f1..693ab3d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -472,8 +472,8 @@
   CFLAGS_ORIG=$CFLAGS
   LIBS_ORIG=$LIBS
   sc_usable_readline_found=
-  
-  for D in "" "/usr/local" "/opt/local" "/sw" "/opt/freeware" "/usr/sfw"; do    
+
+  for D in "" "/usr/local" "/opt/local" "/sw" "/opt/freeware" "/usr/sfw"; do
     if test -n "$D" ; then
       CPPFLAGS="$CPPFLAGS -I$D/include"
       CFLAGS="$CFLAGS -L$D/lib"
@@ -482,12 +482,12 @@
       DLOC="in default location"
     fi
     AC_MSG_CHECKING(for usable readline $DLOC)
-    
+
     # Some systems require -lcurses, some require -lncurses.
     # Mac OS X 10.4 (and others) ships with libedit masquerading as readline,
     # but it doesn't work well with socat. It can be recognized by the absence
     # of append_history.
-    
+
     for L in "" "-lcurses" "-lncurses"; do
       LIBS="$LIBS_ORIG -lreadline $L"
       AC_TRY_LINK(
@@ -499,7 +499,7 @@
         [ sc_usable_readline_found=1
           break ])
     done
-    
+
     if test -n "$sc_usable_readline_found"; then
       AC_MSG_RESULT(yes)
       AC_DEFINE(HAVE_READLINE_READLINE_H,1)
@@ -514,7 +514,7 @@
       LIBS=$LIBS_ORIG
     fi
   done
-  
+
   if test -z "$sc_usable_readline_found"; then
     AC_MSG_WARN([no suitable version of readline found; perhaps you need to install a newer version])
   fi
@@ -1161,7 +1161,7 @@
  AC_MSG_RESULT($ac_cv__posix_pthread_semantics)
 fi
 
- 
+
 # struct timespec
 AC_MSG_CHECKING(for struct timespec)
 AC_CACHE_VAL(sc_cv_struct_timespec,
@@ -1540,7 +1540,7 @@
 dnl Search for SSLv2_client_method, SSLv2_server_method
 AC_CHECK_FUNC(SSLv2_client_method, AC_DEFINE(HAVE_SSLv2_client_method), AC_CHECK_LIB(crypt, SSLv2_client_method, [LIBS=-lcrypt $LIBS]))
 AC_CHECK_FUNC(SSLv2_server_method, AC_DEFINE(HAVE_SSLv2_server_method), AC_CHECK_LIB(crypt, SSLv2_server_method, [LIBS=-lcrypt $LIBS]))
-dnl 
+dnl
 AC_CHECK_FUNC(SSLv3_client_method, AC_DEFINE(HAVE_SSLv3_client_method), AC_CHECK_LIB(crypt, SSLv3_client_method, [LIBS=-lcrypt $LIBS]))
 AC_CHECK_FUNC(SSLv3_server_method, AC_DEFINE(HAVE_SSLv3_server_method), AC_CHECK_LIB(crypt, SSLv3_server_method, [LIBS=-lcrypt $LIBS]))
 AC_CHECK_FUNC(SSLv23_client_method, AC_DEFINE(HAVE_SSLv23_client_method), AC_CHECK_LIB(crypt, SSLv23_client_method, [LIBS=-lcrypt $LIBS]))
@@ -1675,7 +1675,7 @@
 dnl If this method does not seem to work we run test programs that print the
 dnl length and signedness of the type.
 
-dnl do we have a -Werror option? 
+dnl do we have a -Werror option?
 dnl Does the test code compile with -Werror when types fit?
 CHANCE_TO_TYPECHECK=1
 CFLAGS1="$CFLAGS"; CFLAGS="$ERRONWARN $(echo "$CFLAGS1" | sed -e 's@-Wall@@g')"
@@ -2089,7 +2089,7 @@
   fi
   AC_MSG_RESULT($sc_cv_have_hosts_allow_table)
 fi # test -n "$WITH_LIBWRAP"
-  
+
 
 if test "$GCC" = yes; then
    CFLAGS="$CFLAGS"
diff --git a/doc/socat.yo b/doc/socat.yo
index 64c1851..02a70c0 100644
--- a/doc/socat.yo
+++ b/doc/socat.yo
@@ -118,6 +118,9 @@
    messages. 
 dit(bf(tt(-D)))
    Logs information about file descriptors before starting the transfer phase.
+dit(bf(tt(--experimental)))
+   New features that are not well tested or are subject to change in the future
+   must me explicitely enabled using this option.
 dit(bf(tt(-ly[<facility>])))
    Writes messages to syslog instead of stderr; severity as defined with -d
    option. With optional link(<facility>)(TYPE_FACILITY), the syslog type can
diff --git a/socat.c b/socat.c
index 44b7f64..664dc37 100644
--- a/socat.c
+++ b/socat.c
@@ -264,8 +264,9 @@
 	    }
 	 }
 	 break;
-      case 'W': if (socat_opts.lock.lockfile)
+      case 'W': if (socat_opts.lock.lockfile) {
 	    Error("only one -L and -W option allowed");
+	 }
 	 if (arg1[0][2]) {
 	    socat_opts.lock.lockfile = *arg1+2;
 	 } else {
@@ -291,6 +292,13 @@
 	 xioopts.preferred_ip = arg1[0][1];
 	 break;
 #endif /* WITH_IP4 || WITH_IP6 */
+      case '-':
+	 if (!strcmp("experimental", &arg1[0][2])) {
+	    xioopts.experimental = true;
+	 } else {
+	    Error1("unknown option \"%s\"; use option \"-h\" for help", arg1[0]);
+	 }
+	 break;
       case '\0':
       case ',':
       case ':':
@@ -389,6 +397,7 @@
 #if WITH_FILAN
    fputs("      -D     analyze file descriptors before loop\n", fd);
 #endif
+   fputs("      --experimental enable experimental features\n", fd);
    fputs("      -ly[facility]  log to syslog, using facility (default is daemon)\n", fd);
    fputs("      -lf<logfile>   log to file\n", fd);
    fputs("      -ls            log to stderr (default if no other log)\n", fd);
diff --git a/xio-readline.c b/xio-readline.c
index 0fbbb88..96e21f7 100644
--- a/xio-readline.c
+++ b/xio-readline.c
@@ -30,8 +30,7 @@
 			    int dummy1, int dummy2, int dummy3);
 
 
-const struct addrdesc addr_readline = {
-   "readline", 3, xioopen_readline, GROUP_FD|GROUP_TERMIOS|GROUP_READLINE, 0, 0, 0 HELP(NULL) };
+const struct addrdesc addr_readline = { "readline", 3, xioopen_readline, GROUP_FD|GROUP_TERMIOS|GROUP_READLINE, 0, 0, 0 HELP(NULL) };
 
 const struct optdesc opt_history_file = { "history-file", "history", OPT_HISTORY_FILE, GROUP_READLINE, PH_LATE, TYPE_STRING, OFUNC_OFFSET, XIO_OFFSETOF(para.readline.history_file) };
 const struct optdesc opt_prompt       = { "prompt",       NULL,      OPT_PROMPT,       GROUP_READLINE, PH_LATE, TYPE_STRING, OFUNC_OFFSET, XIO_OFFSETOF(para.readline.prompt) };
diff --git a/xio.h b/xio.h
index 0f89e55..fad024d 100644
--- a/xio.h
+++ b/xio.h
@@ -102,6 +102,7 @@
    char default_ip;	/* default prot.fam for IP based listen ('4' or '6') */
    char preferred_ip;	/* preferred prot.fam. for name resolution ('0' for
 			   unspecified, '4', or '6') */
+   bool experimental;	/* enable some features */
 } xioopts_t;
 
 /* pack the description of a lock file */
diff --git a/xioparam.c b/xioparam.c
index e225a3c..132cf34 100644
--- a/xioparam.c
+++ b/xioparam.c
@@ -20,7 +20,8 @@
    '\0',	/* logopt */
    NULL,	/* syslogfac */
    '4',		/* default_ip */
-   '4'		/* preferred_ip */
+   '4',		/* preferred_ip */
+   false 	/* experimental */
 } ;