-----------------------------------------------------------------------------
 MANIFEST          |   62 +++++++--------
 Makefile          |    4 -
 configure         |    2 
 configure.in      |    2 
 doc/CHANGES       |   44 ++++++++++-
 doc/TODO          |   23 -----
 doc/tin.1         |  118 +++++++++++++++---------------
 doc/tin.5         |    2 
 include/proto.h   |    5 -
 include/tin.h     |   15 +++
 include/version.h |    6 -
 po/de.gmo         |binary
 po/de.po          |   17 ++--
 po/en_GB.gmo      |binary
 po/en_GB.po       |   12 +--
 po/et.gmo         |binary
 po/et.po          |   15 ++-
 po/fr.gmo         |binary
 po/fr.po          |   17 ++--
 po/messages       |binary
 po/tin.pot        |   12 +--
 src/art.c         |    4 -
 src/config.c      |   54 ++++++-------
 src/cook.c        |    3 
 src/feed.c        |    4 -
 src/init.c        |    3 
 src/lang.c        |    4 -
 src/mimetypes.c   |    3 
 src/misc.c        |   28 +++----
 src/open.c        |    4 -
 src/page.c        |    4 -
 src/post.c        |    7 +
 src/rfc1524.c     |  204 ++++++++++++++++++++++------------------------------
 src/rfc2046.c     |  134 +++++++++++++++++++++++++++++-----
 src/save.c        |   22 +----
 35 files changed, 471 insertions, 363 deletions
-----------------------------------------------------------------------------
diff -Nurp tin-1.6.1/MANIFEST tin-1.6.2/MANIFEST
--- tin-1.6.1/MANIFEST	Sun Aug 10 14:54:18 2003
+++ tin-1.6.2/MANIFEST	Wed Sep 10 17:10:28 2003
@@ -1,4 +1,4 @@
-MANIFEST for tin-1.6.1 (Sun Aug 10 14:54:18 CEST 2003)
+MANIFEST for tin-1.6.2 (Wed Sep 10 17:10:27 CEST 2003)
 ----------------------------------------------------
   13085 ./Makefile
    7531 ./MANIFEST
@@ -16,11 +16,11 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54
     777 ./mkdirs.sh
    1505 ./tin.spec
   18847 ./doc/ABOUT-NLS
-   2296 ./doc/CHANGES
+   3839 ./doc/CHANGES
  226345 ./doc/CHANGES.old
    1469 ./doc/DEBUG_REFS
   29430 ./doc/INSTALL
-  31380 ./doc/TODO
+  30582 ./doc/TODO
    3302 ./doc/WHATSNEW
    2617 ./doc/art_handling.txt
    3862 ./doc/auth.txt
@@ -46,7 +46,7 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54
    4168 ./doc/mmdf.5
    2128 ./doc/newsoverview.5
    6963 ./doc/plp_snprintf.3
- 120218 ./doc/tin.1
+ 120237 ./doc/tin.1
   69817 ./doc/tin.5
    4733 ./doc/w2r.1
    2196 ./doc/wildmat.3
@@ -67,27 +67,27 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54
    6539 ./include/nntplib.h
     665 ./include/plp_snprintf.h
   11836 ./include/policy.h
-  29869 ./include/proto.h
+  29936 ./include/proto.h
    5047 ./include/rfc2046.h
    3373 ./include/stpwatch.h
    5400 ./include/tcurses.h
-  66312 ./include/tin.h
+  66419 ./include/tin.h
   12814 ./include/tinrc.h
    5736 ./include/tnntp.h
    2256 ./include/trace.h
-   2686 ./include/version.h
+   2684 ./include/version.h
   24977 ./src/active.c
-  50476 ./src/art.c
+  50517 ./src/art.c
   30113 ./src/attrib.c
   12301 ./src/auth.c
   13846 ./src/charset.c
    5981 ./src/color.c
-  85273 ./src/config.c
-  29286 ./src/cook.c
+  85294 ./src/config.c
+  29311 ./src/cook.c
   34665 ./src/curses.c
    9928 ./src/debug.c
    3414 ./src/envarg.c
-  25208 ./src/feed.c
+  25215 ./src/feed.c
   52178 ./src/filter.c
   17968 ./src/getline.c
    7254 ./src/global.c
@@ -96,10 +96,10 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54
    9671 ./src/header.c
   27952 ./src/help.c
   13778 ./src/inews.c
-  31889 ./src/init.c
+  31918 ./src/init.c
    2845 ./src/joinpath.c
   38017 ./src/keymap.c
- 113887 ./src/lang.c
+ 113904 ./src/lang.c
    4310 ./src/langinfo.c
    7033 ./src/list.c
    6672 ./src/lock.c
@@ -107,26 +107,26 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54
   26791 ./src/main.c
   10227 ./src/makecfg.c
   12207 ./src/memory.c
-   5222 ./src/mimetypes.c
-  83791 ./src/misc.c
+   5257 ./src/mimetypes.c
+  83905 ./src/misc.c
   37475 ./src/newsrc.c
   27739 ./src/nntplib.c
    7248 ./src/nrctbl.c
-  26546 ./src/open.c
-  55079 ./src/page.c
+  26600 ./src/open.c
+  55142 ./src/page.c
   24132 ./src/parsdate.y
   16966 ./src/plp_snprintf.c
   12670 ./src/pgp.c
- 130358 ./src/post.c
+ 130410 ./src/post.c
   13850 ./src/prompt.c
   10822 ./src/read.c
   24976 ./src/refs.c
    4621 ./src/regex.c
-  14215 ./src/rfc1524.c
+  14487 ./src/rfc1524.c
    5553 ./src/rfc2045.c
-  26708 ./src/rfc2046.c
+  28567 ./src/rfc2046.c
   23766 ./src/rfc2047.c
-  36925 ./src/save.c
+  36896 ./src/save.c
   11495 ./src/screen.c
   12769 ./src/search.c
   30574 ./src/select.c
@@ -281,13 +281,13 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54
      41 ./intl/VERSION
    4962 ./po/Makefile.inn
     839 ./po/POTFILES.in
- 120802 ./po/tin.pot
- 164538 ./po/de.gmo
- 195132 ./po/de.po
-   7445 ./po/en_GB.gmo
- 123327 ./po/en_GB.po
- 157074 ./po/et.gmo
- 187218 ./po/et.po
- 104613 ./po/fr.gmo
- 165617 ./po/fr.po
-5913370 total
+ 120825 ./po/tin.pot
+ 164392 ./po/de.gmo
+ 195103 ./po/de.po
+   7444 ./po/en_GB.gmo
+ 123344 ./po/en_GB.po
+ 156928 ./po/et.gmo
+ 187188 ./po/et.po
+ 104476 ./po/fr.gmo
+ 165597 ./po/fr.po
+5916397 total
diff -Nurp tin-1.6.1/Makefile tin-1.6.2/Makefile
--- tin-1.6.1/Makefile	Sun Aug 10 14:54:16 2003
+++ tin-1.6.2/Makefile	Wed Sep 10 17:10:24 2003
@@ -7,9 +7,9 @@
 PROJECT	= tin
 LVER	= 1
 PVER	= 6
-SVER	= 1
+SVER	= 2
 VER	= $(LVER).$(PVER).$(SVER)
-DVER	= 20030810
+DVER	= 20030910
 EXE	= tin
 
 # directory structure
diff -Nurp tin-1.6.1/configure tin-1.6.2/configure
--- tin-1.6.1/configure	Sun Aug 10 14:54:18 2003
+++ tin-1.6.2/configure	Wed Sep 10 17:10:27 2003
@@ -617,7 +617,7 @@ fi
 
 
 PACKAGE=tin
-VERSION=1.6.1
+VERSION=1.6.2
 cat >> confdefs.h <<EOF
 #define PACKAGE "$PACKAGE"
 EOF
diff -Nurp tin-1.6.1/configure.in tin-1.6.2/configure.in
--- tin-1.6.1/configure.in	Sun Aug 10 14:54:16 2003
+++ tin-1.6.2/configure.in	Wed Sep 10 17:10:24 2003
@@ -44,7 +44,7 @@ AC_PREFIX_DEFAULT(/usr/local)
 
 dnl PACKAGE is required for GNU gettext
 PACKAGE=tin
-VERSION=1.6.1
+VERSION=1.6.2
 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
 AC_SUBST(PACKAGE)
diff -Nurp tin-1.6.1/doc/CHANGES tin-1.6.2/doc/CHANGES
--- tin-1.6.1/doc/CHANGES	Sun Aug 10 03:39:59 2003
+++ tin-1.6.2/doc/CHANGES	Wed Sep 10 16:55:56 2003
@@ -1,3 +1,45 @@
+-- 1.6.2 release 20030910 "Pabbay" --
+
+ 013) Joshua Crawford <mortarn@softhome.net>
+      BUG. thinko in read_server_config()
+      FIX. config.c
+
+ 012) Urs Janssen <urs@tin.org>
+      BUG. overview data wasn't unfolded before storing it
+      BUG. mem-leak in free_and_init_header()
+      BUG. "domainname missing" warning was displayed too short
+      BUG. allowed spaces in username/password portion of URLs
+      FIX. tin.h art.c, init.c, lang.c, rfc2046.c
+
+ 011) Dirk Nimmich <nimmich@muenster.de>
+      BUG. 'V' didn't work with one multimedia part only
+      BUG. possible buffer overrun in escape_shell_meta()
+      BUG. mailcap command expansion didn't take shell meta characters into
+           account
+      BUG. mailcap nametemplate expansion took place twice
+      BUG. MIME Content-Type parameters parsed incorrectly
+      BUG. didn't refresh screen after viewing files and URLs
+      BUG. mem-leak in _lookup_mimetype
+      BUG. mem-leak in new_uu()
+      FIX. proto.h, tin.h, cook.c, mimetypes.c, misc.c, page.c, rfc1524.c
+           rfc2046.c, save.c
+
+ 010) Michael Bienia <michael@vorlon.ping.de>
+      BUG. source and destination overlap in strncpy
+      FIX. config.c
+
+ 009) Dirk Nimmich <nimmich@muenster.de>
+      BUG. doesn't try to reconnect after a 205 response
+      FIX. open.c
+
+ 008) Darrell Tangman <dgtangman@acm.org>
+      BUG. refine txt_help_thread_mark_article_read
+      FIX. lang.c
+
+ 007) Dirk Nimmich <nimmich@muenster.de>
+      BUG. attributes were ignored when mailing
+      FIX. proto.h, feed.c, post.c
+
 -- 1.6.1 release 20030810 "Mingulay" --
 
  006) Darrell Tangman <dgtangman@acm.org>
@@ -8,7 +50,7 @@
  005) Dirk Nimmich <nimmich@muenster.de>
       BUG. make install_sysdefs didn't honor $DESTDIR
       BUG. filter on References didn't work on deep threads
-      BUG. upgrading from use_metamail=ON could lead to 
+      BUG. upgrading from use_metamail=ON could lead to
            metamail_prog=--internal
       BUG. lines that were exactly cCOLS bytes long introduced an extra line in
            raw mode
diff -Nurp tin-1.6.1/doc/TODO tin-1.6.2/doc/TODO
--- tin-1.6.1/doc/TODO	Tue Aug  5 12:27:20 2003
+++ tin-1.6.2/doc/TODO	Tue Aug 26 15:09:58 2003
@@ -16,19 +16,9 @@ o  Changes to int/bool tinrc variables i
    flashing changes to all affected groups and remove the reread of the
    attributes file from select.c
 
-o  single quotes in attachment names aren't escaped
-   (see <nntp://news.tin.org/20030511065405.GA14493@Ado.student.utwente.nl>)
-
 o  'C'atchup in pager is still not correct (we don't ever enter the next group)
    [20030515 Urs Janssen <urs@tin.org>]
 
-o  reconnect problem reported in debian bug #188052
-   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=188052>
-   [probabely fixed]
-
-o  reconnect problem reported in debian bug #143417
-   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=143417>
-
 o  'article loss' reported in
    <nntp://news.tin.org/20020915165856.GA1541@martinkl.dialup.fu-berlin.de>
 
@@ -41,10 +31,6 @@ o  better integrate saving of MIME/non-M
    [mostly done]
    [Jason Faultless <jason@altarstone.com>]
 
-o  attributes are ignored for mail-actions (except mail_to_author())
-   cause mail_loop() usualy doesn't know the group we are in.
-   [20020211 Andreas Metzler <tin-dev@downhill.at.eu.org>]
-
 o  reusing p'o'stponed articles in mailing_list groups doesn't work
    (possible fix: store Newsgroups (and other infos) via msg_add_header()
     (to overwrite any old values) in X-Tin-Postponed:-header and remove it
@@ -69,7 +55,7 @@ o  '-s' cmd-line switch implicitly chang
 o  add version number to other config-files (e.g. tin.defaults,
    keymap) and do the same checks as for TINRC_VERSION/tinrc. for the
    filter (and attributes) file also store the editor offset (different
-   languages do use different headres) and the filter method used
+   languages do use different headers) and the filter method used
    (wildmat or regexp) and the charset the file is written in (e.g.
    ISO-8859-x vs. unicode)
    [Urs Janssen <urs@tin.org>]
@@ -102,11 +88,6 @@ o  tin uses the first sig-isolator as re
 o  iso2asc conversion is missing for 'internal' strings (e.g. 'M'enu)
    [20020319 Urs Janssen <urs@tin.org>]
 
-o  fix the outstandig mem-leaks, see
-   <nntp://news.tin.org/20030504190113.A21736@akk3.akk.org> and
-   <nntp://news.tin.org/20030504224555.GA18249@akk10.akk.uni-karlsruhe.de>
-   for details [20030504 Urs Janssen <urs@tin.org>]
-
 Pager Problems
 --------------
 o  raw mode loses (illegal) chars in multibyte based groups
@@ -342,7 +323,7 @@ o  Additions to the thread menu:
      ';'  (mark unread arts as hot if >= 1 art in thread is hot)
      '+'  (mark thread as hot)
      '='  (mark pattern as hot)
-     'Y'  (check for new articles in thead)
+     'Y'  (check for new articles in thread)
      '%'  (toggle rot13 encoding of screen content)
      'o'  (print)
      'x'  (repost)
diff -Nurp tin-1.6.1/doc/tin.1 tin-1.6.2/doc/tin.1
--- tin-1.6.1/doc/tin.1	Sun Aug 10 03:35:36 2003
+++ tin-1.6.2/doc/tin.1	Mon Sep  1 00:42:09 2003
@@ -3,13 +3,13 @@
 .\" Module    : tin.1
 .\" Author    : I. Lea, U. Janssen
 .\" Created   : 1991-08-23
-.\" Updated   : 2003-08-10
+.\" Updated   : 2003-09-01
 .\" Notes     : use american english; still needs some work, i.e.:
 .\"             - document authorization (.newsauth)
 .\"             - document random organization feature
 .\"
 .\"
-.TH tin 1 "August 10th, 2003" "1.6.1" "A Usenet newsreader"
+.TH tin 1 "September 1st, 2003" "1.6.2" "A Usenet newsreader"
 .\"
 .\"
 .SH NAME
@@ -3205,63 +3205,63 @@ Brolik, Herman ten Brugge, Martin Buck, 
 Burrell-Davis, Sean Casey, Peter Castro, Troy Cauble, Andrey A.
 Chernov, Albert Chin-A-Young, Park Chong-Dae, Tan Kwee Chuan,
 Boleslaw Ciesielski, Robert Claeson, Steven Cogswell, Don Costello,
-Bryan Curnutt, Ned Danieley, Lars Dannenberg, Chris Davies, John
-Davis, Borislav Deianov, Thomas E. Dickey, Martin Dickopp, Olaf
-Dietrich, Herbert Martin Dietze, Theo Van Dinter, Ralf Doeblitz,
-Bryan Dongray, Michael Douglass, Nickolay Dudorov, Craig Durland,
-Bernd Eckenfels, Phil Edge, Kirk Edson, Nick Efthymiou, Stefan Elf,
-Nigel Ellis, L. Scott Emmons, Rob Engle, Olle Eriksson, Brent
-Ermlick, Bernd Ernesti, Ragnar Hojland Espinosa, Jason Faultless,
-Michael Faurot, Werner Fleck, John M. Flinchbaugh, Andy Gabor,
-Christian Garbs, Torsten Gesang, Ruediger Geys, Callum Gibson, Mike
-Glendinning, Igor Goryachev, Philippe Goujard, Dan Greenspan, Karlo
-Gross, Carl Hage, Piers Haken, Paul Halsema, Ed Hanway, Scott Hauck,
-Christian Haul, James Hawtin, Per Headland, Arnold Hendriks, Daniel
-Hermans, Jose Herrero, Dave Hill, Tom Hite, Torsten Homeyer, Ulli
-Horlacher, Keith Howell, Tommy Hsieh, Shih-Kun Huang, Steve Hunt,
-Jeff Hurwitt, Jeon Hyoung-Jo, Pieter Immelman, Jarkko Isokungas,
-Patrick St. Jean, Hal Jespersen, Park Sang Jin, Robbin Johnson,
-Jarkko Jormanainen, Yury July, Nelson Kading, Geoffrey Keating,
-Karsten Keil, Charles S. Kerr, Fritz Kleeman, Andreas Kies, Janne
-Kiviluoto, Tomasz Kloczko, Dwarven Knight, Thomas Koenig, Karl-Koenig
-Koenigsson, Martin Kraemer, Gerald Krause, Thomas Kroener, Florian
-Kuehnert, Bernd Kuemmerlen, Kris Kugel, Stephan Kulow, Manoj Kumar,
-Dawid Kuroczko, Yuri Kuzmenko, Olivier Lacroix, Geoff Lane, Alex
-Lange, Alain Lasserre, Stanislav Latishko, Hannu Laurila, Yen-Ming
-Lee, Vincent Lefevre, Alexander Lehmann, Marty Leisner, Thomas
-Leitner, Hakan Lennestal, Kevin Lentin, Chua Choon Leong, Chris
-Lewis, Andreas Ley, David-Michael Lincke, Otto Lind, Richard Lloyd,
-Florian Lohoff, Reinhard Luebke, Clifford Luke, Michael Lupp, David
-MacKenzie, Hugh Mahon, Giuseppe De Marco, Scott Marovich, Dmitri A.
-Martynoff, Kazushi Marukawa, Timur Maryin, William McBrine, Owen
-Medd, Philipp Mergenthaler, Andreas Metzler, Arkadiusz Miskiewicz,
-Soren Moller, Bruce Momjian, Sergio Morales, Michael Morrell, Klaus
-Mueller, Mike Muise, Udo Munk, John R. Myers, Daniel Naber, Torsten
-Neumann, Dirk Nimmich, James Nugen, David E. O'Brien, Michael
-O'Reilly, Oleg Ohotnikov, Ronald Orr, Julien Oster, Guido Ostkamp,
-Philip Paeps, Jeb Palmer, Neil Parker, Joseph Parmelee, Tom Parry,
-Jim Patterson, Sven Paulus, Walter Pelissero, Cameron Perkins, Colin
-Perkins, Eric Peterson, Tim Pierce, Bill Poitras, Scott W. Powers,
-Wolfgang Prediger, Marc Prud'hommeaux, GianPiero Puccioni, Thomas
-Quinot, Stefan Rapp, Martin Reising, Kyle Rhorer, Ted Richards, Steve
-Robbins, Ollivier Robert, Branden Robinson, Jim Robinson, Thomas
-Roessler, Erik van Roode, Meelis Roos, Stephen Roseman, Roland
-Rosenfeld, Peter Van Rossem, Clifton Royston, Juergen Salk, Rich
-Salz, Gary Sanders, Nickolay Saukh, John Sauter, Christopher Sawtell,
-Holger Schif, Volker Schmidt, John Schmitz, Torsten Schneider, Stefan
-Scholl, Rainer Scholz, Juergen Schroeder, Larry Schwimmer, Randy
-Scott, Bart Sears, Karl-Olav Serrander, Doug Sewell, Philip Shearer,
-Jungshik Shin, Sergey Shkonda, Andreas Siegert, Mark Smith, Toomas
-Soome, Steve Spearman, Helmut Springer, Cliff Stanford, Steve Starck,
-Jason Steiner, Ralf Stephan, Michael Stenns, Helmrich Streitmatter,
-Hans Werner Strube, Dieter Stueken, Ed Sznyter, Lech Szychowski, Dean
-Takemori, Darrell Tangman, Derek Terveer, Carsten Theis, Julian
-Thompson, David Tiller, Andry Timonin, Mark Tomlin, Michael Traub,
-Mark Trumbull, Alex Vasylenko, Michael Velten, Adri Verhoef, Paul
-Vickers, Corinna Vinschen, Oliver B. Warzecha, Jason Wessel, Cary
-Whitney, Henrik Wist, Greg Woods, Andreas Wrede, Lloyd Wright, Jens
-Wuepper, Billy Y., Hideaki Yoshfuji, Nickolai Zeldovich, Zbigniew
-Zych
+Joshua Crawford, Bryan Curnutt, Ned Danieley, Lars Dannenberg, Chris
+Davies, John Davis, Borislav Deianov, Thomas E. Dickey, Martin
+Dickopp, Olaf Dietrich, Herbert Martin Dietze, Theo Van Dinter, Ralf
+Doeblitz, Bryan Dongray, Michael Douglass, Nickolay Dudorov, Craig
+Durland, Bernd Eckenfels, Phil Edge, Kirk Edson, Nick Efthymiou,
+Stefan Elf, Nigel Ellis, L. Scott Emmons, Rob Engle, Olle Eriksson,
+Brent Ermlick, Bernd Ernesti, Ragnar Hojland Espinosa, Jason
+Faultless, Michael Faurot, Werner Fleck, John M. Flinchbaugh, Andy
+Gabor, Christian Garbs, Torsten Gesang, Ruediger Geys, Callum Gibson,
+Mike Glendinning, Igor Goryachev, Philippe Goujard, Dan Greenspan,
+Karlo Gross, Carl Hage, Piers Haken, Paul Halsema, Ed Hanway, Scott
+Hauck, Christian Haul, James Hawtin, Per Headland, Arnold Hendriks,
+Daniel Hermans, Jose Herrero, Dave Hill, Tom Hite, Torsten Homeyer,
+Ulli Horlacher, Keith Howell, Tommy Hsieh, Shih-Kun Huang, Steve
+Hunt, Jeff Hurwitt, Jeon Hyoung-Jo, Pieter Immelman, Jarkko
+Isokungas, Patrick St. Jean, Hal Jespersen, Park Sang Jin, Robbin
+Johnson, Jarkko Jormanainen, Yury July, Nelson Kading, Geoffrey
+Keating, Karsten Keil, Charles S. Kerr, Fritz Kleeman, Andreas Kies,
+Janne Kiviluoto, Tomasz Kloczko, Dwarven Knight, Thomas Koenig,
+Karl-Koenig Koenigsson, Martin Kraemer, Gerald Krause, Thomas
+Kroener, Florian Kuehnert, Bernd Kuemmerlen, Kris Kugel, Stephan
+Kulow, Manoj Kumar, Dawid Kuroczko, Yuri Kuzmenko, Olivier Lacroix,
+Geoff Lane, Alex Lange, Alain Lasserre, Stanislav Latishko, Hannu
+Laurila, Yen-Ming Lee, Vincent Lefevre, Alexander Lehmann, Marty
+Leisner, Thomas Leitner, Hakan Lennestal, Kevin Lentin, Chua Choon
+Leong, Chris Lewis, Andreas Ley, David-Michael Lincke, Otto Lind,
+Richard Lloyd, Florian Lohoff, Reinhard Luebke, Clifford Luke,
+Michael Lupp, David MacKenzie, Hugh Mahon, Giuseppe De Marco, Scott
+Marovich, Dmitri A. Martynoff, Kazushi Marukawa, Timur Maryin,
+William McBrine, Owen Medd, Philipp Mergenthaler, Andreas Metzler,
+Arkadiusz Miskiewicz, Soren Moller, Bruce Momjian, Sergio Morales,
+Michael Morrell, Klaus Mueller, Mike Muise, Udo Munk, John R. Myers,
+Daniel Naber, Torsten Neumann, Dirk Nimmich, James Nugen, David E.
+O'Brien, Michael O'Reilly, Oleg Ohotnikov, Ronald Orr, Julien Oster,
+Guido Ostkamp, Philip Paeps, Jeb Palmer, Neil Parker, Joseph
+Parmelee, Tom Parry, Jim Patterson, Sven Paulus, Walter Pelissero,
+Cameron Perkins, Colin Perkins, Eric Peterson, Tim Pierce, Bill
+Poitras, Scott W. Powers, Wolfgang Prediger, Marc Prud'hommeaux,
+GianPiero Puccioni, Thomas Quinot, Stefan Rapp, Martin Reising, Kyle
+Rhorer, Ted Richards, Steve Robbins, Ollivier Robert, Branden
+Robinson, Jim Robinson, Thomas Roessler, Erik van Roode, Meelis Roos,
+Stephen Roseman, Roland Rosenfeld, Peter Van Rossem, Clifton Royston,
+Juergen Salk, Rich Salz, Gary Sanders, Nickolay Saukh, John Sauter,
+Christopher Sawtell, Holger Schif, Volker Schmidt, John Schmitz,
+Torsten Schneider, Stefan Scholl, Rainer Scholz, Juergen Schroeder,
+Larry Schwimmer, Randy Scott, Bart Sears, Karl-Olav Serrander, Doug
+Sewell, Philip Shearer, Jungshik Shin, Sergey Shkonda, Andreas
+Siegert, Mark Smith, Toomas Soome, Steve Spearman, Helmut Springer,
+Cliff Stanford, Steve Starck, Jason Steiner, Ralf Stephan, Michael
+Stenns, Helmrich Streitmatter, Hans Werner Strube, Dieter Stueken, Ed
+Sznyter, Lech Szychowski, Dean Takemori, Darrell Tangman, Derek
+Terveer, Carsten Theis, Julian Thompson, David Tiller, Andry Timonin,
+Mark Tomlin, Michael Traub, Mark Trumbull, Alex Vasylenko, Michael
+Velten, Adri Verhoef, Paul Vickers, Corinna Vinschen, Oliver B.
+Warzecha, Jason Wessel, Cary Whitney, Henrik Wist, Greg Woods,
+Andreas Wrede, Lloyd Wright, Jens Wuepper, Billy Y., Hideaki
+Yoshfuji, Nickolai Zeldovich, Zbigniew Zych
 .\"
 .\"
 .SH AUTHOR
diff -Nurp tin-1.6.1/doc/tin.5 tin-1.6.2/doc/tin.5
--- tin-1.6.1/doc/tin.5	Sun Aug 10 03:36:51 2003
+++ tin-1.6.2/doc/tin.5	Fri Aug 15 21:21:20 2003
@@ -5,7 +5,7 @@
 .\" Updated   : 2003-08-10
 .\" Notes     : needs a some work
 .\"
-.TH tin 5 "August 10th, 2003" "1.6.1" "A Usenet newsreader"
+.TH tin 5 "August 10th, 2003" "1.6.2" "A Usenet newsreader"
 
 .SH NAME
 tin, rtin \- related files
diff -Nurp tin-1.6.1/include/proto.h tin-1.6.2/include/proto.h
--- tin-1.6.1/include/proto.h	Tue Jul 22 17:34:02 2003
+++ tin-1.6.2/include/proto.h	Tue Aug 26 15:10:18 2003
@@ -3,7 +3,7 @@
  *  Module    : proto.h
  *  Author    : Urs Janssen <urs@tin.org>
  *  Created   :
- *  Updated   : 2003-06-29
+ *  Updated   : 2003-08-26
  *  Notes     :
  *
  * Copyright (c) 1997-2003 Urs Janssen <urs@tin.org>
@@ -472,7 +472,7 @@ extern time_t parsedate(char *p, TIMEINF
 /* post.c */
 extern int count_postponed_articles(void);
 extern int mail_to_author(const char *group, int respnum, t_bool copy_text, t_bool with_headers, t_bool raw_data);
-extern int mail_to_someone(const char *address, t_bool confirm_to_mail, t_openartinfo *artinfo);
+extern int mail_to_someone(const char *address, t_bool confirm_to_mail, t_openartinfo *artinfo, const struct t_group *group);
 extern int post_response(const char *group, int respnum, t_bool copy_text, t_bool with_headers, t_bool raw_data);
 extern int repost_article(const char *group, int respnum, t_bool supersede, t_openartinfo *artinfo);
 extern t_bool cancel_article(struct t_group *group, struct t_article *art, int respnum);
@@ -542,6 +542,7 @@ extern int parse_rfc822_headers(struct t
 extern t_part *new_part(t_part *part);
 extern void art_close(t_openartinfo *artinfo);
 extern void free_and_init_header(struct t_header *hdr);
+extern void free_list(t_param *list);
 extern void free_parts(t_part *ptr);
 extern void unfold_header(char *line);
 
diff -Nurp tin-1.6.1/include/tin.h tin-1.6.2/include/tin.h
--- tin-1.6.1/include/tin.h	Mon Jul 28 12:55:24 2003
+++ tin-1.6.2/include/tin.h	Fri Sep  5 17:55:45 2003
@@ -3,7 +3,7 @@
  *  Module    : tin.h
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2003-07-28
+ *  Updated   : 2003-09-05
  *  Notes     : #include files, #defines & struct's
  *
  * Copyright (c) 1997-2003 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -768,9 +768,9 @@ enum rc_state { RC_IGNORE, RC_CHECK, RC_
  * NOTE: the "-(?!-)" assertion must be removed when IDN is introduced
  */
 #if 0 /* this one is ok for IPv4 */
-#	define URL_REGEX	"\\b(?:https?|ftp|gopher)://(?:[^:@/]*(?::[^:@/]*)?@)?(?:(?:[^\\W_](?:(?:-(?!-)|[^\\W_]){0,61}[^\\W_])?\\.)+[a-z]{2,6}\\.?|localhost|(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?))(?::\\d+)?(?:/[^)\\>\"\\s]*|$|(?=[)\\>\"\\s]))"
+#	define URL_REGEX	"\\b(?:https?|ftp|gopher)://(?:[^:@/\\s]*(?::[^:@/\\s]*)?@)?(?:(?:[^\\W_](?:(?:-(?!-)|[^\\W_]){0,61}[^\\W_])?\\.)+[a-z]{2,6}\\.?|localhost|(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?))(?::\\d+)?(?:/[^)\\>\"\\s]*|$|(?=[)\\>\"\\s]))"
 #else	/* this one should be IPv6 safe - test me! */
-#	define URL_REGEX	"\\b(?:https?|ftp|gopher)://(?:[^:@/]*(?::[^:@/]*)?@)?(?:(?:[^\\W_](?:(?:-(?!-)|[^\\W_]){0,61}[^\\W_])?\\.)+[a-z]{2,6}\\.?|localhost|(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)|\\[(?:(?:[0-9A-F]{0,4}:){1,7}[0-9A-F]{1,4}|(?:[0-9A-F]{0,4}:){1,3}(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?))\\])(?::\\d+)?(?:/[^)\\>\"\\s]*|$|(?=[)\\>\"\\s]))"
+#	define URL_REGEX	"\\b(?:https?|ftp|gopher)://(?:[^:@/\\s]*(?::[^:@/\\s]*)?@)?(?:(?:[^\\W_](?:(?:-(?!-)|[^\\W_]){0,61}[^\\W_])?\\.)+[a-z]{2,6}\\.?|localhost|(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)|\\[(?:(?:[0-9A-F]{0,4}:){1,7}[0-9A-F]{1,4}|(?:[0-9A-F]{0,4}:){1,3}(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?))\\])(?::\\d+)?(?:/[^)\\>\"\\s]*|$|(?=[)\\>\"\\s]))"
 #endif /* 0 */
 /*
  * case insensitive
@@ -1262,6 +1262,15 @@ enum rc_state { RC_IGNORE, RC_CHECK, RC_
 #define UUE_NO			0		/* Don't hide uue data */
 #define UUE_YES			1		/* Hide uue data */
 #define UUE_ALL			2		/* Hide uue data harder */
+
+/*
+ * used in misc.c/rfc1524.c
+ */
+enum quote_enum {
+	no_quote = 0,
+	dbl_quote,
+	sgl_quote
+};
 
 
 /*
diff -Nurp tin-1.6.1/include/version.h tin-1.6.2/include/version.h
--- tin-1.6.1/include/version.h	Sun Aug 10 14:54:16 2003
+++ tin-1.6.2/include/version.h	Wed Sep 10 17:10:24 2003
@@ -40,10 +40,10 @@
 
 #	define PRODUCT		"tin"
 #	ifndef TIN_AUTOCONF_H
-#		define VERSION		"1.6.1"
+#		define VERSION		"1.6.2"
 #	endif /* !TIN_AUTOCONF_H */
-#	define RELEASEDATE	"20030810"
-#	define RELEASENAME	"Mingulay"
+#	define RELEASEDATE	"20030910"
+#	define RELEASENAME	"Pabbay"
 /* config-file versions - must by dotted triples */
 #	define TINRC_VERSION	"1.3.6"
 #	define ATTRIBUTES_VERSION	"1.0.0"
Binary files tin-1.6.1/po/de.gmo and tin-1.6.2/po/de.gmo differ
diff -Nurp tin-1.6.1/po/de.po tin-1.6.2/po/de.po
--- tin-1.6.1/po/de.po	Sun Aug 10 14:53:40 2003
+++ tin-1.6.2/po/de.po	Wed Sep 10 17:08:19 2003
@@ -5,8 +5,8 @@
 # Christian Garbs <tin-dev@cgarbs.de>, 2003
 #
 msgid	""
-msgstr	"Project-Id-Version: tin 1.6.0\n"
-	"POT-Creation-Date: 2003-08-10 03:49+0200\n"
+msgstr	"Project-Id-Version: tin 1.6.2\n"
+	"POT-Creation-Date: 2003-09-10 17:05+0200\n"
 	"PO-Revision-Date: 2003-03-13 04:15+0200\n"
 	"Last-Translator: Sven Hartge <oweh@ds9.argh.org>, Kai Bojens "
 	"<kbojens@on-luebeck.de>\n"
@@ -261,7 +261,7 @@ msgstr	"# in *binaries* Nachbearbeitung,
 msgid	"# and set Followup-To: poster\n"
 msgstr	"# und Antwort per EMail (Followup-To: poster) anfordern\n"
 
-#: src/cook.c:798
+#: src/cook.c:799
 msgid	"(unknown)"
 msgstr	"(unbekannt)"
 
@@ -942,8 +942,8 @@ msgid	"MIME parse error: Start boundary 
 msgstr	""
 
 #: src/lang.c:203
-msgid	"Can't get a (fully-qualified) domain-name!\n"
-msgstr	"Kann keinen (vollqualifizierten) Domainnamen finden!\n"
+msgid	"Can't get a (fully-qualified) domain-name!"
+msgstr	"Kann keinen (vollqualifizierten) Domainnamen finden!"
 
 #: src/lang.c:204
 #, c-format
@@ -1738,9 +1738,10 @@ msgstr	"wähle ersten Artikel in der List
 msgid	"choose last article in list"
 msgstr	"wähle letzten Artikel in der Liste"
 
+# TRANSLATION MISSING
 #: src/lang.c:408
-msgid	"mark article as read and move cursor to next unread article"
-msgstr	"markiert Artikel als gelesen geht zum nächsten ungelesenen Artikel"
+msgid	"mark article or tagged articles as read and move cursor to next unread article"
+msgstr	""
 
 #: src/lang.c:411
 msgid	"Display properties\n"
@@ -6258,7 +6259,7 @@ msgid	"Posting: %.*s ..."
 msgstr	"Poste: %.*s ..."
 
 #. TODO: -> lang.c
-#: src/post.c:4037
+#: src/post.c:4038
 #, c-format
 msgid	"Rereading %s..."
 msgstr	"Lese %s..."
Binary files tin-1.6.1/po/en_GB.gmo and tin-1.6.2/po/en_GB.gmo differ
diff -Nurp tin-1.6.1/po/en_GB.po tin-1.6.2/po/en_GB.po
--- tin-1.6.1/po/en_GB.po	Sun Aug 10 14:54:02 2003
+++ tin-1.6.2/po/en_GB.po	Wed Sep 10 17:08:58 2003
@@ -2,8 +2,8 @@
 # Robert Brady <rwb197@ecs.soton.ac.uk>, 2000-2002
 #
 msgid	""
-msgstr	"Project-Id-Version: tin 1.6.0\n"
-	"POT-Creation-Date: 2003-08-10 03:49+0200\n"
+msgstr	"Project-Id-Version: tin 1.6.2\n"
+	"POT-Creation-Date: 2003-09-10 17:05+0200\n"
 	"PO-Revision-Date: 2002-11-15 20:10+0000\n"
 	"Last-Translator: Robert Brady <rwb197@zepler.org>\n"
 	"Language-Team: \n"
@@ -207,7 +207,7 @@ msgstr	""
 msgid	"# and set Followup-To: poster\n"
 msgstr	""
 
-#: src/cook.c:798
+#: src/cook.c:799
 msgid	"(unknown)"
 msgstr	""
 
@@ -852,7 +852,7 @@ msgid	"MIME parse error: Start boundary 
 msgstr	""
 
 #: src/lang.c:203
-msgid	"Can't get a (fully-qualified) domain-name!\n"
+msgid	"Can't get a (fully-qualified) domain-name!"
 msgstr	""
 
 #: src/lang.c:204
@@ -1604,7 +1604,7 @@ msgid	"choose last article in list"
 msgstr	""
 
 #: src/lang.c:408
-msgid	"mark article as read and move cursor to next unread article"
+msgid	"mark article or tagged articles as read and move cursor to next unread article"
 msgstr	""
 
 #: src/lang.c:411
@@ -5808,7 +5808,7 @@ msgid	"Posting: %.*s ..."
 msgstr	""
 
 #. TODO: -> lang.c
-#: src/post.c:4037
+#: src/post.c:4038
 #, c-format
 msgid	"Rereading %s..."
 msgstr	""
Binary files tin-1.6.1/po/et.gmo and tin-1.6.2/po/et.gmo differ
diff -Nurp tin-1.6.1/po/et.po tin-1.6.2/po/et.po
--- tin-1.6.1/po/et.po	Sun Aug 10 03:52:20 2003
+++ tin-1.6.2/po/et.po	Wed Sep 10 17:07:56 2003
@@ -4,7 +4,7 @@
 #
 msgid	""
 msgstr	"Project-Id-Version: tin 1.6.0\n"
-	"POT-Creation-Date: 2003-08-10 03:49+0200\n"
+	"POT-Creation-Date: 2003-09-10 17:05+0200\n"
 	"PO-Revision-Date: 2003-07-15 11:07+0300\n"
 	"Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
 	"Language-Team: Estonian <et@li.org>\n"
@@ -213,7 +213,7 @@ msgstr	"# *binaarfailidel* sea täielik j
 msgid	"# and set Followup-To: poster\n"
 msgstr	"# ja sea Followup-To: postitaja\n"
 
-#: src/cook.c:798
+#: src/cook.c:799
 msgid	"(unknown)"
 msgstr	"(tundmatu)"
 
@@ -894,8 +894,8 @@ msgid	"MIME parse error: Start boundary 
 msgstr	"MIME parsimise viga: Algas eraldaja aga loen alles päiseid"
 
 #: src/lang.c:203
-msgid	"Can't get a (fully-qualified) domain-name!\n"
-msgstr	"Ei õnnestu saada (täis) doomeninime!\n"
+msgid	"Can't get a (fully-qualified) domain-name!"
+msgstr	"Ei õnnestu saada (täis) doomeninime!"
 
 #: src/lang.c:204
 #, c-format
@@ -1679,9 +1679,10 @@ msgstr	"vali loendis esimene artikkel"
 msgid	"choose last article in list"
 msgstr	"vali loendis viimane artikkel"
 
+# TRANSLATION MISSING
 #: src/lang.c:408
-msgid	"mark article as read and move cursor to next unread article"
-msgstr	"märgi artikkel loetuks ja liigu edasi järgmisele lugemata artiklile"
+msgid	"mark article or tagged articles as read and move cursor to next unread article"
+msgstr	""
 
 #: src/lang.c:411
 msgid	"Display properties\n"
@@ -6193,7 +6194,7 @@ msgid	"Posting: %.*s ..."
 msgstr	"Postitan: %.*s ..."
 
 #. TODO: -> lang.c
-#: src/post.c:4037
+#: src/post.c:4038
 #, c-format
 msgid	"Rereading %s..."
 msgstr	"Loen %s uuesti..."
Binary files tin-1.6.1/po/fr.gmo and tin-1.6.2/po/fr.gmo differ
diff -Nurp tin-1.6.1/po/fr.po tin-1.6.2/po/fr.po
--- tin-1.6.1/po/fr.po	Sun Aug 10 14:53:51 2003
+++ tin-1.6.2/po/fr.po	Wed Sep 10 17:08:26 2003
@@ -2,8 +2,8 @@
 # Matt Anton <tin@syrius.org>, 2003
 #
 msgid	""
-msgstr	"Project-Id-Version: 1.6.0\n"
-	"POT-Creation-Date: 2003-08-10 03:49+0200\n"
+msgstr	"Project-Id-Version: 1.6.2\n"
+	"POT-Creation-Date: 2003-09-10 17:05+0200\n"
 	"PO-Revision-Date: 2003-07-04 04:15+0200\n"
 	"Last-Translator: Matt Anton <tin@syrius.org\n"
 	"Language-Team: French <tin@syrius.org>\n"
@@ -212,7 +212,7 @@ msgstr	"# dans *binaries* faire traiteme
 msgid	"# and set Followup-To: poster\n"
 msgstr	"# et utiliser Followup-To: poster\n"
 
-#: src/cook.c:798
+#: src/cook.c:799
 msgid	"(unknown)"
 msgstr	"(inconnu)"
 
@@ -900,8 +900,8 @@ msgid	"MIME parse error: Start boundary 
 msgstr	"Erreur MIME : Début de la borne lors de la lecture des en-têtes"
 
 #: src/lang.c:203
-msgid	"Can't get a (fully-qualified) domain-name!\n"
-msgstr	"Nom de domaine (qualifié) introuvable !\n"
+msgid	"Can't get a (fully-qualified) domain-name!"
+msgstr	"Nom de domaine (qualifié) introuvable !"
 
 #: src/lang.c:204
 #, c-format
@@ -1658,9 +1658,10 @@ msgstr	"choisir le 1er article dans la l
 msgid	"choose last article in list"
 msgstr	"choisir le dernier article dans la liste"
 
+# TRANSLATION MISSING
 #: src/lang.c:408
-msgid	"mark article as read and move cursor to next unread article"
-msgstr	"marquer article comme lu et voir l'article non lu suivant"
+msgid	"mark article or tagged articles as read and move cursor to next unread article"
+msgstr	""
 
 #: src/lang.c:411
 msgid	"Display properties\n"
@@ -6068,7 +6069,7 @@ msgstr	"Postage : %.*s ..."
 
 # TRANSLATION MISSING
 #. TODO: -> lang.c
-#: src/post.c:4037
+#: src/post.c:4038
 #, c-format
 msgid	"Rereading %s..."
 msgstr	""
Binary files tin-1.6.1/po/messages and tin-1.6.2/po/messages differ
diff -Nurp tin-1.6.1/po/tin.pot tin-1.6.2/po/tin.pot
--- tin-1.6.1/po/tin.pot	Sun Aug 10 03:49:58 2003
+++ tin-1.6.2/po/tin.pot	Wed Sep 10 17:05:47 2003
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2003-08-10 03:49+0200\n"
+"POT-Creation-Date: 2003-09-10 17:05+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -214,7 +214,7 @@ msgstr ""
 msgid "# and set Followup-To: poster\n"
 msgstr ""
 
-#: src/cook.c:798
+#: src/cook.c:799
 msgid "(unknown)"
 msgstr ""
 
@@ -887,7 +887,7 @@ msgid "MIME parse error: Start boundary 
 msgstr ""
 
 #: src/lang.c:203
-msgid "Can't get a (fully-qualified) domain-name!\n"
+msgid "Can't get a (fully-qualified) domain-name!"
 msgstr ""
 
 #: src/lang.c:204
@@ -1651,7 +1651,9 @@ msgid "choose last article in list"
 msgstr ""
 
 #: src/lang.c:408
-msgid "mark article as read and move cursor to next unread article"
+msgid ""
+"mark article or tagged articles as read and move cursor to next unread "
+"article"
 msgstr ""
 
 #: src/lang.c:411
@@ -6019,7 +6021,7 @@ msgid "Posting: %.*s ..."
 msgstr ""
 
 #. TODO: -> lang.c
-#: src/post.c:4037
+#: src/post.c:4038
 #, c-format
 msgid "Rereading %s..."
 msgstr ""
diff -Nurp tin-1.6.1/src/art.c tin-1.6.2/src/art.c
--- tin-1.6.1/src/art.c	Sat Jul 12 15:49:46 2003
+++ tin-1.6.2/src/art.c	Tue Aug 26 15:11:35 2003
@@ -3,7 +3,7 @@
  *  Module    : art.c
  *  Author    : I.Lea & R.Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2003-06-29
+ *  Updated   : 2003-08-23
  *  Notes     :
  *
  * Copyright (c) 1991-2003 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -1415,6 +1415,7 @@ write_nov_file(
 			 *       ignore stuff like this.
 			 */
 			p = rfc1522_encode(article->subject, tinrc.mm_local_charset, FALSE);
+			unfold_header(p);
 
 			/*
 			 * replace any '\t's with ' ' in the references-data
@@ -1970,6 +1971,7 @@ print_from(
 
 	if (article->name != NULL) {
 		p = rfc1522_encode(article->name, tinrc.mm_local_charset, FALSE);
+		unfold_header(p);
 		if (strpbrk(article->name, "\".:;<>@[]()\\") != NULL && article->name[0] != '"' && article->name[strlen(article->name)] != '"')
 			snprintf(from, sizeof(from), "\"%s\" <%s>", tinrc.post_8bit_header ? article->name : p, article->from);
 		else
diff -Nurp tin-1.6.1/src/config.c tin-1.6.2/src/config.c
--- tin-1.6.1/src/config.c	Sun Aug 10 03:37:22 2003
+++ tin-1.6.2/src/config.c	Mon Sep  1 00:39:42 2003
@@ -3,7 +3,7 @@
  *  Module    : config.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2003-08-10
+ *  Updated   : 2003-09-01
  *  Notes     : Configuration file routines
  *
  * Copyright (c) 1991-2003 Iain Lea <iain@bricbrac.de>
@@ -94,7 +94,7 @@ read_config_file(
 {
 	FILE *fp;
 	char newnews_info[PATH_LEN];
-	char buf[LEN];
+	char buf[LEN], tmp[LEN];
 	int upgrade = RC_CHECK;
 
 	if ((fp = fopen(file, "r")) == NULL)
@@ -128,48 +128,48 @@ read_config_file(
 			if (match_boolean(buf, "alternative_handling=", &tinrc.alternative_handling))
 				break;
 
-			if (match_string(buf, "art_marked_deleted=", buf, sizeof(buf))) {
-				tinrc.art_marked_deleted = !buf[0] ? ART_MARK_DELETED : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_deleted=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_deleted = !tmp[0] ? ART_MARK_DELETED : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
-			if (match_string(buf, "art_marked_inrange=", buf, sizeof(buf))) {
-				tinrc.art_marked_inrange = !buf[0] ? MARK_INRANGE : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_inrange=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_inrange = !tmp[0] ? MARK_INRANGE : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
-			if (match_string(buf, "art_marked_killed=", buf, sizeof(buf))) {
-				tinrc.art_marked_killed = !buf[0] ? ART_MARK_KILLED : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_killed=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_killed = !tmp[0] ? ART_MARK_KILLED : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
-			if (match_string(buf, "art_marked_read=", buf, sizeof(buf))) {
-				tinrc.art_marked_read = !buf[0] ? ART_MARK_READ : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_read=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_read = !tmp[0] ? ART_MARK_READ : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
-			if (match_string(buf, "art_marked_read_selected=", buf, sizeof(buf))) {
-				tinrc.art_marked_read_selected = !buf[0] ? ART_MARK_READ_SELECTED : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_read_selected=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_read_selected = !tmp[0] ? ART_MARK_READ_SELECTED : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
-			if (match_string(buf, "art_marked_recent=", buf, sizeof(buf))) {
-				tinrc.art_marked_recent = !buf[0] ? ART_MARK_RECENT : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_recent=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_recent = !tmp[0] ? ART_MARK_RECENT : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
-			if (match_string(buf, "art_marked_return=", buf, sizeof(buf))) {
-				tinrc.art_marked_return = !buf[0] ? ART_MARK_RETURN : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_return=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_return = !tmp[0] ? ART_MARK_RETURN : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
-			if (match_string(buf, "art_marked_selected=", buf, sizeof(buf))) {
-				tinrc.art_marked_selected = !buf[0] ? ART_MARK_SELECTED : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_selected=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_selected = !tmp[0] ? ART_MARK_SELECTED : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
-			if (match_string(buf, "art_marked_unread=", buf, sizeof(buf))) {
-				tinrc.art_marked_unread = !buf[0] ? ART_MARK_UNREAD : DASH_TO_SPACE(buf[0]);
+			if (match_string(buf, "art_marked_unread=", tmp, sizeof(tmp))) {
+				tinrc.art_marked_unread = !tmp[0] ? ART_MARK_UNREAD : DASH_TO_SPACE(tmp[0]);
 				break;
 			}
 
@@ -340,8 +340,8 @@ read_config_file(
 			if (match_boolean(buf, "default_filter_select_expire=", &tinrc.default_filter_select_expire))
 				break;
 
-			if (match_string(buf, "default_save_mode=", buf, sizeof(buf))) {
-				tinrc.default_save_mode = buf[0];
+			if (match_string(buf, "default_save_mode=", tmp, sizeof(tmp))) {
+				tinrc.default_save_mode = tmp[0];
 				break;
 			}
 
@@ -2880,19 +2880,19 @@ read_server_config(
 			snprintf(tmp_info, tmp_len, "%s %s", nntp_server, newnews_info);
 			load_newnews_info(tmp_info);
 			free(tmp_info);
-			break;
+			continue;
 		}
 		if (match_string(line, "version=", version, sizeof(version))) {
 			if (RC_CHECK != upgrade)
-				/* ignore duplicate version lines; first match counts */
-				break;
+				/* ignore duplicate version lines; last match counts */
+				continue;
 			upgrade = check_upgrade(line, "version=", SERVERCONFIG_VERSION);
 			if (RC_IGNORE == upgrade)
 				/* Expected version number; nothing to do -> continue */
-				break;
+				continue;
 
 			/* Nothing to do yet for RC_UPGRADE and RC_DOWNGRADE */
-			break;
+			continue;
 		}
 	}
 	fclose(fp);
diff -Nurp tin-1.6.1/src/cook.c tin-1.6.2/src/cook.c
--- tin-1.6.1/src/cook.c	Mon Jul 21 00:20:57 2003
+++ tin-1.6.2/src/cook.c	Tue Aug 26 14:34:07 2003
@@ -3,7 +3,7 @@
  *  Module    : cook.c
  *  Author    : J. Faultless
  *  Created   : 2000-03-08
- *  Updated   : 2003-07-21
+ *  Updated   : 2003-08-26
  *  Notes     : Split from page.c
  *
  * Copyright (c) 2000-2003 Jason Faultless <jason@altarstone.com>
@@ -573,6 +573,7 @@ new_uue(
 	if (!(*part)->uue)			/* new_part() is simple and doesn't attach list heads */
 		(*part)->uue = ptr;
 
+	free_list(ptr->params);
 	/*
 	 * Load the name into the parameter list
 	 */
diff -Nurp tin-1.6.1/src/feed.c tin-1.6.2/src/feed.c
--- tin-1.6.1/src/feed.c	Sun Jul 20 12:48:06 2003
+++ tin-1.6.2/src/feed.c	Sun Aug 10 15:31:13 2003
@@ -3,7 +3,7 @@
  *  Module    : feed.c
  *  Author    : I. Lea
  *  Created   : 1991-08-31
- *  Updated   : 2003-07-19
+ *  Updated   : 2003-08-10
  *  Notes     : provides same interface to mail,pipe,print,save & repost commands
  *
  * Copyright (c) 1991-2003 Iain Lea <iain@bricbrac.de>
@@ -408,7 +408,7 @@ feed_article(
 
 	switch (function) {
 		case FEED_MAIL:
-			switch (mail_to_someone(tinrc.default_mail_address, confirm, openartptr)) {
+			switch (mail_to_someone(tinrc.default_mail_address, confirm, openartptr, group)) {
 				case POSTED_REDRAW:
 					redraw_screen = TRUE;
 					/* FALLTHROUGH */
diff -Nurp tin-1.6.1/src/init.c tin-1.6.2/src/init.c
--- tin-1.6.1/src/init.c	Sun Aug 10 03:37:40 2003
+++ tin-1.6.2/src/init.c	Wed Aug 27 23:16:56 2003
@@ -674,10 +674,11 @@ init_selfinfo(
 
 	/*
 	 * the site_config-file was the last chance to set the domainname
-	 * if it's still unset exit tin.
+	 * if it's still unset fall into no posting mode.
 	 */
 	if (domain_name[0] == '\0') {
 		error_message(_(txt_error_no_domain_name));
+		sleep(2);
 		force_no_post = TRUE;
 	}
 
diff -Nurp tin-1.6.1/src/lang.c tin-1.6.2/src/lang.c
--- tin-1.6.1/src/lang.c	Sun Aug 10 03:37:54 2003
+++ tin-1.6.2/src/lang.c	Wed Aug 27 23:17:21 2003
@@ -200,7 +200,7 @@ constext txt_error_invalid_response_to_g
 constext txt_error_locale[] = "Can't set the specified locale!";
 constext txt_error_mime_end[] = N_("MIME parse error: Unexpected end of %s/%s article");
 constext txt_error_mime_start[] = N_("MIME parse error: Start boundary whilst reading headers");
-constext txt_error_no_domain_name[] = N_("Can't get a (fully-qualified) domain-name!\n");
+constext txt_error_no_domain_name[] = N_("Can't get a (fully-qualified) domain-name!");
 constext txt_error_no_enter_permission[] = N_("No permissions to go into %s\n");
 constext txt_error_no_from[] = N_("\nError: From: line missing.\n");
 constext txt_error_no_read_permission[] = N_("No read permissions for %s\n");
@@ -405,7 +405,7 @@ constext txt_help_thread_catchup[] = N_(
 constext txt_help_thread_catchup_next_unread[] = N_("mark thread as read and enter next unread thread or group");
 constext txt_help_thread_first_article[] = N_("choose first article in list");
 constext txt_help_thread_last_article[] = N_("choose last article in list");
-constext txt_help_thread_mark_article_read[] = N_("mark article as read and move cursor to next unread article");
+constext txt_help_thread_mark_article_read[] = N_("mark article or tagged articles as read and move cursor to next unread article");
 constext txt_help_thread_read_article[] = N_("read chosen article");
 constext txt_help_thread_toggle_subj_display[] = N_("cycle the display of authors email address, real name, both or neither");
 constext txt_help_title_disp[] = N_("Display properties\n------------------");
diff -Nurp tin-1.6.1/src/mimetypes.c tin-1.6.2/src/mimetypes.c
--- tin-1.6.1/src/mimetypes.c	Sat Jul 12 15:49:46 2003
+++ tin-1.6.2/src/mimetypes.c	Tue Aug 26 14:36:27 2003
@@ -3,7 +3,7 @@
  *  Module    : mimetypes.c
  *  Author    : J. Faultless
  *  Created   : 2000-03-31
- *  Updated   : 2003-04-10
+ *  Updated   : 2003-08-26
  *  Notes     : mime.types handling
  *
  * Copyright (c) 2000-2003 Jason Faultless <jason@altarstone.com>
@@ -77,6 +77,7 @@ _lookup_mimetype(
 				if ((i = content_type(strtok(buf, "/"))) != -1) {
 					if ((ptr = strtok(NULL, "\n")) != NULL) {
 						part->type = i;
+						FreeIfNeeded(part->subtype);
 						part->subtype = my_strdup(ptr);
 						fclose(fp);
 						return TRUE;
diff -Nurp tin-1.6.1/src/misc.c tin-1.6.2/src/misc.c
--- tin-1.6.1/src/misc.c	Sat Jul 12 15:49:46 2003
+++ tin-1.6.2/src/misc.c	Sun Aug 24 02:42:38 2003
@@ -3,7 +3,7 @@
  *  Module    : misc.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2003-06-17
+ *  Updated   : 2003-08-24
  *  Notes     :
  *
  * Copyright (c) 1991-2003 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -1697,13 +1697,6 @@ strfpath(
 }
 
 
-enum quote_enum {
-	no_quote = 0,
-	dbl_quote,
-	sgl_quote
-};
-
-
 /*
  * TODO: Properly explain this
  */
@@ -1714,37 +1707,46 @@ escape_shell_meta(
 {
 	static char buf[PATH_LEN];
 	char *dest = buf;
+	int space = sizeof(buf) - 2;
 
 	switch (quote_area) {
 		case no_quote:
-			while (*source) {
+			while (*source && (space > 0)) {
 				if (*source == '\'' || *source == '\\' || *source == '"' ||
 					*source == '$' || *source == '`' || *source == '*' ||
 					*source == '&' || *source == '|' || *source == '<' ||
 					*source == '>' || *source == ';' || *source == '(' ||
-					*source == ')')
+					*source == ')') {
 					*dest++ = '\\';
+					space--;
+				}
 				*dest++ = *source++;
+				space--;
 			}
 			break;
 
 		case dbl_quote:
-			while (*source) {
+			while (*source && (space > 0)) {
 				if (*source == '\\' || *source == '"' || *source == '$' ||
-					*source == '`')
+					*source == '`') {
 					*dest++ = '\\';
+					space--;
+				}
 				*dest++ = *source++;
+				space--;
 			}
 			break;
 
 		case sgl_quote:
-			while (*source) {
+			while (*source && (space > 4)) {
 				if (*source == '\'') {
 					*dest++ = '\'';
 					*dest++ = '\\';
 					*dest++ = '\'';
+					space -= 3;
 				}
 				*dest++ = *source++;
+				space--;
 			}
 			break;
 
diff -Nurp tin-1.6.1/src/open.c tin-1.6.2/src/open.c
--- tin-1.6.1/src/open.c	Tue Jul 22 16:18:36 2003
+++ tin-1.6.2/src/open.c	Fri Aug 15 17:45:27 2003
@@ -3,7 +3,7 @@
  *  Module    : open.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2003-07-22
+ *  Updated   : 2003-08-15
  *  Notes     : Routines to make reading news locally (ie. /var/spool/news)
  *              or via NNTP transparent
  *
@@ -406,7 +406,7 @@ get_only_respcode(
 	DEBUG_IO((stderr, "get_only_respcode(%d)\n", respcode));
 
 	/* TODO: reconnect on ERR_FAULT? */
-	if ((respcode == ERR_FAULT || respcode == ERR_GOODBYE) && last_put[0] != '\0') {
+	if ((respcode == ERR_FAULT || respcode == ERR_GOODBYE || respcode == OK_GOODBYE) && last_put[0] != '\0' && strcmp(last_put, "QUIT")) {
 		/*
 		 * Maybe server timed out.
 		 * If so, retrying will force a reconnect.
diff -Nurp tin-1.6.1/src/page.c tin-1.6.2/src/page.c
--- tin-1.6.1/src/page.c	Sun Aug  3 20:51:38 2003
+++ tin-1.6.2/src/page.c	Sun Aug 24 02:43:09 2003
@@ -3,7 +3,7 @@
  *  Module    : page.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2003-08-03
+ *  Updated   : 2003-08-24
  *  Notes     :
  *
  * Copyright (c) 1991-2003 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -993,6 +993,7 @@ return_to_index:
 			case iKeyPageViewAttach:
 				XFACE_SUPPRESS();
 				decode_save_mime(&pgart, FALSE);
+				draw_page(group->name, 0);
 				XFACE_SHOW();
 				break;
 
@@ -1002,6 +1003,7 @@ return_to_index:
 					resize_article(FALSE, &pgart); /* umbreak long lines */
 					process_url();
 					resize_article(TRUE, &pgart); /* rebreak long lines */
+					draw_page(group->name, 0);
 					XFACE_SHOW();
 				}
 				break;
diff -Nurp tin-1.6.1/src/post.c tin-1.6.2/src/post.c
--- tin-1.6.1/src/post.c	Sun Jul 27 14:21:59 2003
+++ tin-1.6.2/src/post.c	Sun Aug 10 15:31:03 2003
@@ -3,7 +3,7 @@
  *  Module    : post.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2003-06-18
+ *  Updated   : 2003-08-10
  *  Notes     : mail/post/replyto/followup/repost & cancel articles
  *
  * Copyright (c) 1991-2003 Iain Lea <iain@bricbrac.de>
@@ -2898,7 +2898,8 @@ int
 mail_to_someone(
 	const char *address,
 	t_bool confirm_to_mail,
-	t_openartinfo *artinfo)
+	t_openartinfo *artinfo,
+	const struct t_group *group)
 {
 	FILE *fp;
 	char ch = iKeyPostSend;
@@ -2943,7 +2944,7 @@ mail_to_someone(
 	} else {
 		if (confirm_to_mail)
 			ch = prompt_to_send(subject);
-		ret_code = mail_loop(nam, ch, subject, NULL, NULL);
+		ret_code = mail_loop(nam, ch, subject, group ? group->name : NULL, NULL);
 	}
 
 	if (tinrc.unlink_article)
diff -Nurp tin-1.6.1/src/rfc1524.c tin-1.6.2/src/rfc1524.c
--- tin-1.6.1/src/rfc1524.c	Sat Jul 12 15:49:46 2003
+++ tin-1.6.2/src/rfc1524.c	Sun Aug 24 02:43:01 2003
@@ -3,7 +3,7 @@
  *  Module    : rfc1524.c
  *  Author    : Urs Janssen <urs@tin.org>, Jason Faultless <jason@altarstone.com>
  *  Created   : 2000-05-15
- *  Updated   : 2002-06-18
+ *  Updated   : 2002-08-24
  *  Notes     : mailcap parsing as defined in RFC 1524
  *
  * Copyright (c) 2000-2003 Urs Janssen <urs@tin.org>, Jason Faultless <jason@altarstone.com>
@@ -48,7 +48,7 @@
 #define MAILCAPFIELDS 13
 
 /* local prototypes */
-static char *expand_mailcap_meta(const char *mailcap, t_part *part, char *nametemplate, const char *path);
+static char *expand_mailcap_meta(const char *mailcap, t_part *part, t_bool escape_shell_meta_chars, const char *path);
 static char *get_mailcap_field(char *mailcap);
 static t_mailcap *parse_mailcap_line(const char *mailcap, t_part *part, const char *path);
 
@@ -208,7 +208,7 @@ parse_mailcap_line(
 			ptr += strlen(ptr) + 1;
 		}
 		if (!strncasecmp(ptr, "nametemplate=", 13)) {
-			tmailcap->nametemplate = expand_mailcap_meta(ptr + 13, part, (char *) 0, path);
+			tmailcap->nametemplate = expand_mailcap_meta(ptr + 13, part, FALSE, path);
 			ptr += strlen(ptr) + 1;
 		}
 		if (!strncasecmp(ptr, "test=", 5)) {
@@ -246,21 +246,21 @@ parse_mailcap_line(
 	 * nametemplate
 	 */
 	if (tmailcap->command != NULL)
-		tmailcap->command = expand_mailcap_meta(tmailcap->command, part, tmailcap->nametemplate, path);
+		tmailcap->command = expand_mailcap_meta(tmailcap->command, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path);
 	if (tmailcap->description != NULL)
-		tmailcap->description = expand_mailcap_meta(tmailcap->description, part, tmailcap->nametemplate, path);
+		tmailcap->description = expand_mailcap_meta(tmailcap->description, part, FALSE, tmailcap->nametemplate ? tmailcap->nametemplate : path);
 	if (tmailcap->test != NULL)
-		tmailcap->test = expand_mailcap_meta(tmailcap->test, part, tmailcap->nametemplate, path);
+		tmailcap->test = expand_mailcap_meta(tmailcap->test, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path);
 	if (tmailcap->compose != NULL)
-		tmailcap->compose = expand_mailcap_meta(tmailcap->compose, part, tmailcap->nametemplate, path);
+		tmailcap->compose = expand_mailcap_meta(tmailcap->compose, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path);
 	if (tmailcap->composetyped != NULL)
-		tmailcap->composetyped = expand_mailcap_meta(tmailcap->composetyped, part, tmailcap->nametemplate, path);
+		tmailcap->composetyped = expand_mailcap_meta(tmailcap->composetyped, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path);
 	if (tmailcap->edit != NULL)
-		tmailcap->edit = expand_mailcap_meta(tmailcap->edit, part, tmailcap->nametemplate, path);
+		tmailcap->edit = expand_mailcap_meta(tmailcap->edit, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path);
 	if (tmailcap->print != NULL)
-		tmailcap->print = expand_mailcap_meta(tmailcap->print, part, tmailcap->nametemplate, path);
+		tmailcap->print = expand_mailcap_meta(tmailcap->print, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path);
 	if (tmailcap->x11bitmap != NULL)
-		tmailcap->x11bitmap = expand_mailcap_meta(tmailcap->x11bitmap, part, tmailcap->nametemplate, path);
+		tmailcap->x11bitmap = expand_mailcap_meta(tmailcap->x11bitmap, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path);
 
 	free(optr);
 
@@ -345,13 +345,12 @@ static char *
 expand_mailcap_meta(
 	const char *mailcap,
 	t_part *part,
-	char *nametemplate,
+	t_bool escape_shell_meta_chars,
 	const char *path)
 {
 	const char *ptr;
 	char *line, *lptr;
-	t_bool quote = FALSE;
-	t_bool percent = FALSE;
+	int quote = no_quote;
 	size_t linelen, space, olen;
 
 	if ((ptr = strchr(mailcap, '%')) == NULL) /* nothing to expand */
@@ -377,116 +376,87 @@ expand_mailcap_meta(
 			lptr = line + olen;		/* adjust pointer to current position */
 		}
 
-		switch (*ptr) {
-			case '\\':
-				quote = bool_not(quote);
-				break;
-
-			case '%':
-				if (!quote)
-					percent = TRUE;
-				else {
-					*lptr++ = '%';
-					space--;
-					quote = FALSE;
-				}
-				break;
-
-			case '{':
-				if (percent) {
-					char *end;
-
-					percent = FALSE;
-					if ((end = strchr(ptr, '}')) != NULL) {
-						if (part->params != NULL) {
-							char *parameter;
-							const char *value;
-
-							parameter = my_calloc(1, end - ptr + 1);
-							strncpy(parameter, ptr + 1, end - ptr - 1); /* extract paramter name */
-
-							if ((value = get_param(part->params, parameter)) != NULL) { /* match? */
-								CHECK_SPACE(strlen(value));
-								strcat(line, value);
-								lptr = line + strlen(line);
-								space -= strlen(line);
-							}
-						free(parameter);
+		if ('\\' == *ptr) {
+			ptr++;
+			if (('\\' == *ptr) || ('%' == *ptr)) {
+				*lptr++ = *ptr++;
+				space--;
+			}
+			continue;
+		}
+		if ('%' == *ptr) {
+			ptr++;
+			if ('{' == *ptr) {	/* Content-Type parameter */
+				char *end;
+
+				if ((end = strchr(ptr, '}')) != NULL) {
+					if (part->params != NULL) {
+						char *parameter;
+						const char *value;
+
+						parameter = my_calloc(1, end - ptr + 1);
+						strncpy(parameter, ptr + 1, end - ptr - 1);	/* extract paramter name */
+						if ((value = get_param(part->params, parameter)) != NULL) { /* match? */
+							const char *nptr = escape_shell_meta_chars ? escape_shell_meta(value, quote) : value;
+
+							CHECK_SPACE(strlen(nptr));
+							strcat(line, nptr);
+							lptr = line + strlen(line);
+							space -= strlen(line);
 						}
-						ptr = end;	/* skip past closing } */
+						free(parameter);
 					}
-					break; /* full %{...} */
-				}
-				/* FALLTHROUGH */
-
-#if 0 /* TODO: */
-			case 'F':
-				if (percent) {
-					percent = FALSE;
-					break;
-				}
-				/* FALLTHROUGH */
-
-			case 'n':
-				if (percent) {
-					percent = FALSE;
-					break;
+					ptr = end;	/* skip past closing } */
+					ptr++;
+				} else {
+					/* sequence broken, output literally */
+					*lptr++ = '%';
+					*lptr++ = *ptr++;
+					space -= 2;
 				}
-				/* FALLTHROUGH */
+				continue;
+#if 0 /* TODO */
+			} else if ('F' == *ptr) {	/* Content-Types and Filenames of sub parts */
+			} else if ('n' == *ptr) {	/* Number of sub parts */
+			}
 #endif /* 0 */
+			} else if ('s' == *ptr) {	/* Filename */
+				const char *nptr = escape_shell_meta_chars ? escape_shell_meta(path, quote) : path;
 
-			case 's':
-				if (percent) {
-					char *nptr = (char *) 0;
-
-					if (nametemplate && (nptr = expand_mailcap_meta(nametemplate, part, (char *) 0, path)) != 0) {
-						CHECK_SPACE(strlen(nptr) + 2);
-						strcat(line, nptr);
-						free(nptr);
-					} else {
-						CHECK_SPACE(strlen(path) + 2);
-						strcat(line, path);
-					}
-
-					lptr = line + strlen(line);
-					space -= strlen(line);
-					percent = FALSE;
-					break;
-				}
-				/* FALLTHROUGH */
-
-			case 't':
-				if (percent) {
-					CHECK_SPACE((strlen(content_types[part->type]) + 1 + strlen(part->subtype)));
-					strcat(line, content_types[part->type]);
-					strcat(line, "/");
-					strcat(line, part->subtype);
-					lptr = line + strlen(line);
-					space -= strlen(line);
-					percent = FALSE;
-					break;
-				}
-				/* FALLTHROUGH */
-
-			default:
-				if (quote) { /* last char was \ */
-					*lptr = '\\';
-					lptr++;
-					space--;
-					quote = FALSE;
-				}
-				if (percent) { /* unknow %x sequence */
-					*lptr = '%';
-					lptr++;
-					space--;
-					percent = FALSE;
-					quote = FALSE;
-				}
-				*lptr = *ptr;
-				lptr++;
+				CHECK_SPACE(strlen(nptr) + 2);
+				strcat(line, nptr);
+				lptr = line + strlen(line);
+				space -= strlen(line);
+				ptr++;
+				continue;
+			} else if ('t' == *ptr) {	/* Content-Type */
+				const char *nptr = escape_shell_meta_chars ? escape_shell_meta(part->subtype, quote) : part->subtype;
+
+				CHECK_SPACE((strlen(content_types[part->type]) + 1 + strlen(nptr)));
+				strcat(line, content_types[part->type]);
+				strcat(line, "/");
+				strcat(line, nptr);
+				lptr = line + strlen(line);
+				space -= strlen(line);
+				ptr++;
+				continue;
+			} else {	/* unknown % sequence */
+				*lptr++ = '%';
 				space--;
+				continue;
+			}
 		}
-		ptr++;
+
+		if (escape_shell_meta_chars) {
+			if (('\'' == *ptr) && (quote != dbl_quote))
+				quote = (quote == no_quote ? sgl_quote : no_quote);
+			else if (('"' == *ptr) && (quote != sgl_quote))
+				quote = (quote == no_quote ? dbl_quote : no_quote);
+		}
+
+		/* any other char */
+		*lptr++ = *ptr++;
+		space--;
 	}
 	return line;
 }
diff -Nurp tin-1.6.1/src/rfc2046.c tin-1.6.2/src/rfc2046.c
--- tin-1.6.1/src/rfc2046.c	Sat Jul 12 15:49:46 2003
+++ tin-1.6.2/src/rfc2046.c	Tue Aug 26 15:14:34 2003
@@ -3,7 +3,7 @@
  *  Module    : rfc2046.c
  *  Author    : Jason Faultless <jason@altarstone.com>
  *  Created   : 2000-02-18
- *  Updated   : 2003-06-09
+ *  Updated   : 2003-08-26
  *  Notes     : RFC 2046 MIME article parsing
  *
  * Copyright (c) 2000-2003 Jason Faultless <jason@altarstone.com>
@@ -46,13 +46,16 @@
 /*
  * local prototypes
  */
+static char *get_quoted_string(char *source, char **dest);
+static char *get_token(const char *source);
+static char *skip_equal_sign(char *source);
+static char *skip_space(char *source);
 static int boundary_cmp(const char *line, const char *boundary);
 static int count_lines(char *line);
 static int parse_multipart_article(FILE *infile, t_openartinfo *artinfo, t_part *part, int depth, t_bool show_progress_meter);
 static int parse_normal_article(FILE *in, t_openartinfo *artinfo, t_bool show_progress_meter);
 static int parse_rfc2045_article(FILE *infile, int line_count, t_openartinfo *artinfo, t_bool show_progress_meter);
 static unsigned int parse_content_encoding(const char *encoding);
-static void free_list(t_param *list);
 static void parse_content_type(char *type, t_part *content);
 static void parse_content_disposition(char *disp, t_part *part);
 static void parse_params(char *params, t_part *content);
@@ -173,6 +176,79 @@ boundary_check(
 }
 
 
+#define ATTRIBUTE_DELIMS "()<>@,;:\\\"/[]?="
+
+static char *
+skip_space(
+	char *source)
+{
+	while ((*source) && ((' ' == *source) || ('\t' == *source)))
+		source++;
+	return *source ? source : NULL;
+}
+
+
+static char *
+get_token(
+	const char *source)
+{
+	char *dest = my_strdup(source);
+	char *ptr = dest;
+
+	while (isascii(*ptr) && isprint(*ptr) && *ptr != ' ' && !strchr(ATTRIBUTE_DELIMS, *ptr))
+		ptr++;
+	*ptr = '\0';
+
+	return my_realloc(dest, strlen(dest) + 1);
+}
+
+
+static char *
+get_quoted_string(
+	char *source,
+	char **dest)
+{
+	char *ptr;
+	t_bool quote = FALSE;
+
+	*dest = my_malloc(strlen(source));
+	ptr = *dest;
+	source++; /* skip over double quote */
+	while (*source) {
+		if ('\\' == *source) {
+			quote = TRUE;	/* next char as-is */
+			source++;
+			continue;
+		}
+		if (('"' == *source) && !quote)
+			break;	/* end of quoted-string */
+		*ptr++ = *source++;
+		quote = FALSE;
+	}
+	*ptr = '\0';
+	*dest = my_realloc(*dest, strlen(*dest) + 1);
+	return *source ? source++ : source;
+}
+
+
+/*
+ * Skip equal sign and (non compliant) white space around it
+ */
+static char *
+skip_equal_sign(
+	char *source)
+{
+	if (!(source = skip_space(source)))
+		return NULL;
+
+	if ('=' != *source++)
+		/* no equal sign, invalid header, stop parsing here */
+		return NULL;
+
+	return skip_space(source);
+}
+
+
 /*
  * Parse a Content-* parameter list into a linked list
  * Ensure the ->params element is correctly initialised before calling
@@ -183,27 +259,49 @@ parse_params(
 	char *params,
 	t_part *content)
 {
-	char *eql, *param;
+	char *name, *param, *value;
 	t_param *ptr;
 
-	for (param = strtok(params, ";"); param; param = strtok(NULL, PARAM_SEP)) {
-		if ((eql = strchr(param, '=')) == NULL)
-			continue;						/* No =, Malformed param */
+	param = params;
+	while (*param) {
+		/* Skip over white space */
+		if (!(param = skip_space(param)))
+			break;
 
-		*eql++ = '\0';						/* Split at = */
+		/* catch parameter name */
+		name = get_token(param);
+		param += strlen(name);
+		if (!*param) {
+			/* Nothing follows, invalid, stop here */
+			FreeIfNeeded(name);
+			break;
+		}
 
-		ptr = my_malloc(sizeof(t_param));
-		str_trim(param);
-		ptr->name = my_strdup(param);
+		if (!(param = skip_equal_sign(param))) {
+			FreeIfNeeded(name);
+			break;
+		}
 
-		str_trim(eql);						/* See if in "" */
-		if (*eql == '"' && (param = strrchr(eql, '"')) != NULL) {
-			eql++;
-			*param = '\0';
+		/* catch parameter value; may be surrounded by double quotes */
+		if ('"' == *param)	/* parse quoted-string */
+			param = get_quoted_string(param, &value);
+		else {
+			/* parse token */
+			value = get_token(param);
+			param += strlen(value);
 		}
-		ptr->value = my_strdup(rfc1522_decode(eql));
+
+		ptr = my_malloc(sizeof(t_param));
+		ptr->name = name;
+		ptr->value = value;	/* TODO don't RFC1522 decode, parameter encoding is per RFC2231 (not implemented yet) */
 		ptr->next = content->params;		/* Push onto start of list */
 		content->params = ptr;
+
+		/* advance pointer to next parameter */
+		while ((*param) && (';' != *param))
+			param++;
+		if (';' == *param)
+			param++;
 	}
 }
 
@@ -211,7 +309,7 @@ parse_params(
 /*
  * Free up a generic list object
  */
-static void
+void
 free_list(
 	t_param *list)
 {
@@ -414,8 +512,6 @@ new_part(
 
 /*
  * Free a linked list of t_part
- *
- * TODO: plug mem leak: ptr->uue is not entirely freed
  */
 void
 free_parts(
@@ -445,6 +541,8 @@ free_and_init_header(
 	 */
 	FreeAndNull(hdr->from);
 	FreeAndNull(hdr->to);
+	FreeAndNull(hdr->cc);
+	FreeAndNull(hdr->bcc);
 	FreeAndNull(hdr->date);
 	FreeAndNull(hdr->subj);
 	FreeAndNull(hdr->org);
diff -Nurp tin-1.6.1/src/save.c tin-1.6.2/src/save.c
--- tin-1.6.1/src/save.c	Sun Aug  3 20:23:21 2003
+++ tin-1.6.2/src/save.c	Tue Aug 26 20:26:16 2003
@@ -3,7 +3,7 @@
  *  Module    : save.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2003-08-03
+ *  Updated   : 2003-08-26
  *  Notes     :
  *
  * Copyright (c) 1991-2003 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -1430,20 +1430,9 @@ decode_save_mime(
 	t_part *ptr, *uueptr;
 
 	/*
-	 * Process only the uue part in the 'main' article to prevent saving out the
-	 * preamble as a text section etc..
-	 */
-	if (!postproc) {
-		for (uueptr = art->hdr.ext->uue; uueptr != NULL; uueptr = uueptr->next) {
-			if (!(decode_save_one(uueptr, art->raw, postproc)))
-				break;
-		}
-	}
-
-	/*
 	 * Iterate over all the attachments
 	 */
-	for (ptr = art->hdr.ext->next; ptr != NULL; ptr = ptr->next) {
+	for (ptr = art->hdr.ext; ptr != NULL; ptr = ptr->next) {
 		/*
 		 * Handle uuencoded sections in this message part.
 		 * Only works when the uuencoded file is entirely within the current
@@ -1459,9 +1448,12 @@ decode_save_mime(
 		}
 
 		/*
-		 * TYPE_MULTIPART is an envelope type, don't process it
+		 * TYPE_MULTIPART is an envelope type, don't process it.
+		 * If we had an UUE part, the "surrounding" text/plain plays
+		 * the role of a multipart part. Check to see if we want to
+		 * save text and if not, skip this part.
 		 */
-		if (ptr->type == TYPE_MULTIPART)
+		if ((ptr->type == TYPE_MULTIPART || ((NULL != ptr->uue) && (!check_save_mime_type(ptr, CURR_GROUP.attribute->mime_types_to_save)))))
 			continue;
 
 		if (!(decode_save_one(ptr, art->raw, postproc)))
