diff --git a/src/bin/pgaccess/README.pga b/src/bin/pgaccess/README.pga
index 8e5abc0c9482a6015f52cc8cdfc2550d6cb988e1..b19c313c39f440b1b5f25d1ba4af1b97b21b8ffb 100644
--- a/src/bin/pgaccess/README.pga
+++ b/src/bin/pgaccess/README.pga
@@ -22,7 +22,7 @@ PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 ---------------------------------------------------------------------------
 
 
-PGACCESS 0.91 1 November 1998
+PGACCESS 0.93 10 December 1998
 ================================
 I dedicate this program to my little daughters Ana-Maria and Emilia and to my
 wife for their understanding. I hope they will forgive me for spending so many
@@ -55,8 +55,17 @@ loadable object file, because libpgtcl is a collection of object files.
 
 Under Linux, this is called libpgtcl.so.  You will find a pre-compiled
 copy of it for Linux i386 systems at : http://www.flex.ro/pgaccess. 
-Just copy libpgtcl.so into your system library director (/usr/lib) and
-go for it.
+Just copy libpgtcl.so into your system library directory /usr/lib or
+/lib and go for it.
+
+Under Windows, copy libpgtcl.dll and libpq.dll into C:\WINDOWS\SYSTEM directory.
+Make sure you have Tcl/Tk at least version 8.0.0 for Microsoft Windows 95 & NT.
+PgAccess has been checked with Tcl/Tk 8.0.4 version on Windows95 and Windows98
+platforms.
+
+Tcl/Tk 8.0.4 for Windows95 & NT can be downloaded from 
+ftp://ftp.scriptics.com/pub/tcl/tcl8_0/tcl804.exe
+It is 1833712 bytes long.
 
 
 3.How to run it?
@@ -79,10 +88,10 @@ pgaccess.tcl file.
 
 - Opens any database on a specified host at the specified port, username and password
 - Perform vacuum command.
-- Saves preferences in ~/pgaccessrc file
+- Saves preferences in ~/.pgaccessrc file
 
 Tables
-- opening tables for viewing, max 200 records
+- opening multiple tables for viewing, max n records (configurable)
 - column resizing by dragging the vertical grid lines
 - text will wrap in cells now
 - dynamic row height when editing
@@ -135,7 +144,6 @@ Scripts
 
 5.What it should do in the future ?
 
-- table design (add new fields, renaming, etc)
 - sequence and function renaming
 - more powerful report generator and viewer
 - help on line
diff --git a/src/bin/pgaccess/index.html b/src/bin/pgaccess/index.html
index e943fe402bd75987a2166cb3d7e619a8507ba259..57b1dc59ae5c1aeecaf3744e7153bc35b80a482c 100644
--- a/src/bin/pgaccess/index.html
+++ b/src/bin/pgaccess/index.html
@@ -1,144 +1,129 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <HTML>
 <HEAD>
-   <TITLE>PgAccess - a Tcl/Tk PostgreSQL interface</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-   <META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.33 i586) [Netscape]">
+   <META NAME="GENERATOR" CONTENT="Mozilla/4.07 [en] (X11; I; Linux 2.0.36 i586) [Netscape]">
+   <TITLE>PgAccess - a Tcl/Tk PostgreSQL interface</TITLE>
 </HEAD>
 <BODY BGCOLOR="#FFFFFF">
 
-<H1>PgAccess - a free database management tool for <A HREF="http://www.postgreSQL.org">PostgreSQL</A></H1>
-
-<P>
-<HR></P>
-
-<LI><A HREF="pgaccess-0.91.tar.gz">Download the last version of PgAccess
-(press shift and click this link)</A>.</LI>
-
-<CENTER><P>Latest version of PgAccess is 0.91 , 1 November 1998 ! <BR>
-<BR>
-&nbsp; <B><FONT COLOR="#FF0000">NEW * NEW * NEW *</FONT></B> <B><FONT COLOR="#FF0000">
-NEW *</FONT></B> ==== &gt; <B><FONT SIZE=+1>QUERY PARAMETERS</FONT></B>
-(see section Queries below)<BR>
-<BR>
-Precompiled libpgtcl and libpq binaries for i386 are <A HREF="ftp://ftp.flex.ro/pub/pgaccess">here
-</A>!!! <BR>
-&nbsp; </P></CENTER>
-
-<CENTER><TABLE BORDER=3 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BGCOLOR="#FFB6C1" >
-<TR>
-<TD>
-<CENTER><P><B><FONT SIZE=+2>PgAccess can now design <A HREF="forms.html">Forms</A></FONT></B>,
-<B><FONT SIZE=+2><A HREF="pga-rad.html">Reports and Scripts</A></FONT></B>&nbsp;
-</P></CENTER>
-</TD>
-</TR>
-</TABLE></CENTER>
-
-<H3><FONT COLOR="#000080">Installation problems</FONT></H3>
+<H1>
+PgAccess - a free database management tool for <A HREF="http://www.postgreSQL.org">PostgreSQL</A></H1>
+
+<HR>
+<LI>
+Download the last version of PgAccess <A HREF="pgaccess-0.93.tar.gz">(press
+shift and click this link) (tar.gz file)</A>&nbsp; or&nbsp;&nbsp; <A HREF="pgaccess.zip">this
+one (zip file for Windows)</A></LI>
+
+<CENTER>
+<P><BR>Latest stable version of PgAccess is 0.93 , released 10 December
+1998 !
+<P><FONT SIZE=+2><B><FONT COLOR="#FF0000">NEW *</FONT></B> <B><FONT COLOR="#FF0000">NEW
+*</FONT></B></FONT><B><FONT COLOR="#FF0000">&nbsp;</FONT><FONT COLOR="#000000"><FONT SIZE=+1>
+==> </FONT><FONT SIZE=+2>Microsoft Windows compatible version</FONT></FONT></B>
+<P>&nbsp; <B><FONT COLOR="#FF0000">NEW *</FONT></B> ==== > <B>PostgreSQL
+user management, multiple table views</B>,. <B>Query parameters</B> (see
+section Queries below)
+<P>Precompiled libpgtcl and libpq binaries and dll's for i386 are <A HREF="ftp://ftp.flex.ro/pub/pgaccess">here
+</A>!!!</CENTER>
+
+<BR>&nbsp;
+<H3>
+<FONT COLOR="#000080">Installation problems</FONT></H3>
 
 <UL>
-<LI>Some problems related with locale special characters could be solved
-by this <A HREF="specialchars.html">simple patch</A></LI>
+<LI>
+Some problems related with locale special characters could be solved by
+this <A HREF="specialchars.html">simple patch</A></LI>
 
-<LI>I think that there were some problems loading libpgtcl library. I invite
+<LI>
+I think that there were some problems loading libpgtcl library. I invite
 you to read a <A HREF="index.html#libpgtcl">special section concerning
 libpgtcl</A></LI>
 
-<LI>For Silicon Graphics Indigo computers, Irix operating system, there
-is a <A HREF="irix.html">HOWTO make PgAccess to work</A></LI>
+<LI>
+For Silicon Graphics Indigo computers, Irix operating system, there is
+a <A HREF="irix.html">HOWTO make PgAccess to work</A></LI>
 </UL>
 
-<H3><FONT COLOR="#191970">What does PgAccess now!</FONT></H3>
-
-<P>Here are some screenshots from PgAccess windows : <A HREF="pic-pga-1.gif">Main
+<H3>
+<FONT COLOR="#191970">What does PgAccess now!</FONT></H3>
+Here are some screenshots from PgAccess windows : <A HREF="pic-pga-1.gif">Main
 window </A>, <A HREF="pic-pga-2.gif">table builder </A>, <A HREF="pic-pga-4.gif">table(query)
-view </A>, <A HREF="pic-pga-3.gif">visual query builder </A>. </P>
-
-<P><B>Tables</B> <BR>
-- opening tables for viewing, max. 200 records (changed by preferences
-menu) <BR>
-- column resizing, dragging the vertical grid line (better in table space
-rather than in the table header) <BR>
-- text wrap in cells - layout saved for every table <BR>
-- import/export to external files (SDF,CSV) <BR>
-- filter capabilities (enter filter like (price&gt;3.14) <BR>
-- sort order capabilities (enter manually the sort field(s)) <BR>
-- editing in place <BR>
-- improved table generator assistant <BR>
-- improved field editing <BR>
-<B>Queries</B> <BR>
-- define , edit and stores &quot;user defined queries&quot; <BR>
-- store queries as views <BR>
-- execution of queries with optional user input parameters ( select * from
-invoices where year=[parameter &quot;Year of selection&quot;] )<BR>
-- viewing of select type queries result <BR>
-- query deleting and renaming <BR>
-- visual query builder with drag &amp; drop capabilities. For any of you
-who had installed the Tcl/Tk plugin for Netscape Navigator, you can see
-it at work <A HREF="qbtclet.html">clicking here</A> <BR>
-<B>Sequences</B> <BR>
-- defines sequences, delete them and inspect them <BR>
-<B>Functions</B> <BR>
-- define, inspect and delete functions in SQL language <BR>
-<B>Reports</B> <BR>
-- design and display simple reports from tables <BR>
-- fields and labels, font changing, style and size <BR>
-- saves and loads report description from database <BR>
-- show report previews, sample postscript output file <BR>
-<B>Forms</B> <BR>
-- open user defined forms <BR>
-- form design module available <BR>
-- query widget available, controls bound to query results <BR>
-- <A HREF="forms.html">click here</A> for a description of forms and how
-they can be used <BR>
-<B>Scripts</B> <BR>
-- define, modify and call user defined scripts <BR>
-Here is <A HREF="pga-rad.html">a special section concerning forms and scripts</A>
-. </P>
-
-<P>On the TO-DO list! <BR>
-- table design (add new fields, renaming, etc.) </P>
-
+view </A>, <A HREF="pic-pga-3.gif">visual query builder </A>.
+<P><B>Tables</B>
+<BR>- opening multiple tables for viewing, max. n records (changed by preferences
+menu)
+<BR>- column resizing, dragging the vertical grid line (better in table
+space rather than in the table header)
+<BR>- text wrap in cells - layout saved for every table
+<BR>- import/export to external files (SDF,CSV)
+<BR>- filter capabilities (enter filter like (price>3.14)
+<BR>- sort order capabilities (enter manually the sort field(s))
+<BR>- editing in place
+<BR>- improved table generator assistant
+<BR>- improved field editing
+<BR><B>Queries</B>
+<BR>- define , edit and stores "user defined queries"
+<BR>- store queries as views
+<BR>- execution of queries with optional user input parameters ( select
+* from invoices where year=[parameter "Year of selection"] )
+<BR>- viewing of select type queries result
+<BR>- query deleting and renaming
+<BR>- visual query builder with drag &amp; drop capabilities. For any of
+you who had installed the Tcl/Tk plugin for Netscape Navigator, you can
+see it at work <A HREF="qbtclet.html">clicking here</A>
+<BR><B>Sequences</B>
+<BR>- defines sequences, delete them and inspect them
+<BR><B>Functions</B>
+<BR>- define, inspect and delete functions in SQL language
+<BR><B>Reports</B>
+<BR>- design and display simple reports from tables
+<BR>- fields and labels, font changing, style and size
+<BR>- saves and loads report description from database
+<BR>- show report previews, sample postscript output file
+<BR><B>Forms</B>
+<BR>- open user defined forms
+<BR>- form design module available
+<BR>- query widget available, controls bound to query results
+<BR>- <A HREF="forms.html">click here</A> for a description of forms and
+how they can be used
+<BR><B>Scripts</B>
+<BR>- define, modify and call user defined scripts
+<BR><B>Users</B>
+<BR>- define and modify user parameters
+<P>Here is <A HREF="pga-rad.html">a special section concerning forms and
+scripts</A> .
 <P>This program is protected by the following <A HREF="copyright.html">copyright</A>
-</P>
-
 <P>If you have any comment, suggestion for improvements, please feel free
-to e-mail to : <A HREF="mailto:teo@flex.ro">teo@flex.ro&nbsp;</A> </P>
-
+to e-mail to : <A HREF="mailto:teo@flex.ro">teo@flex.ro</A>
 <P><B><FONT COLOR="#FF1493"><FONT SIZE=+2>Mailing list for PgAccess </FONT></FONT></B><A HREF="maillist.html">Here
-you will find how to subscribe to this mailing list</A>. </P>
-
+you will find how to subscribe to this mailing list</A>.
 <P>
-<HR></P>
-
-<H1>More information about libpgtcl - downloads</H1>
-
-<P>&nbsp;&nbsp;&nbsp;&nbsp; Also, you will need the PostgreSQL to Tcl interface
+<HR>
+<H1>
+More information about libpgtcl - downloads</H1>
+&nbsp;&nbsp;&nbsp;&nbsp; Also, you will need the PostgreSQL to Tcl interface
 library, lined as a Tcl/Tk 'load'-able module. It is called libpgtcl and
 the source is located in the PostgreSQL directory /src/interfaces/libpgtcl.
 Specifically, you will need a libpgtcl library that is 'load'-able from
 Tcl/Tk.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This is technically different from
 an ordinary PostgreSQL loadable object file, because libpgtcl is a collection
-of object files. Under Linux, this is called libpgtcl.so. <BR>
-&nbsp;&nbsp;&nbsp;&nbsp; You can download <B><A HREF="lib-pg63-redhat42.tar.gz">from
-here</A></B>&nbsp; libpgtcl.so and libpq.so compiled for PostgreSQL 6.3
-version running on a Linux RedHat 4.2 i386 systems. Just copy libpgtcl.so
-and libpq.so into your system library directory (/usr/lib or /lib) and
-go for it. </P>
-
+of object files. Under Linux, this is called libpgtcl.so.
 <P>&nbsp;&nbsp;&nbsp;&nbsp; One of the solutions is to remove from the
 source the line containing <B>load libpgtcl.so </B>and to load pgaccess.tcl
 not with wish, but with pgwish (or wishpg) that wish that was linked with
-libpgtcl library! I do not recommend this one. </P>
-
-<P>&nbsp;&nbsp;&nbsp;&nbsp; If you have installed RedHat 5.0, you should
+libpgtcl library! I do not recommend this one.
+<P>&nbsp;&nbsp;&nbsp;&nbsp; If you have installed RedHat 5.x, you should
 get the last distribution kit of PostgreSQL and compile it from scratch.
-RedHat 5.0 is using some new versions of libraries and you have to compile
+RedHat 5.x is using some new versions of libraries and you have to compile
 and install again at least <B>libpq </B>and <B><TT>libpgtcl </TT></B>libraries.
-</P>
-
-<P>However, the application should work without problems! </P>
-
+<P>&nbsp;&nbsp;&nbsp; PostgreSQL 6.4 release has a minor bug. I does not
+includ by default the crypt lib when compiling libpgtcl. So, you will need
+to manually add a -lcrypt to SHLIB line in Makefile in src/interfaces/libpgtcl
+and then make clean and make again. The new libpgtcl.so library is properly
+configured to run pgaccess.
+<BR>&nbsp;
 </BODY>
 </HTML>
diff --git a/src/bin/pgaccess/libpgtcl.dll b/src/bin/pgaccess/libpgtcl.dll
new file mode 100644
index 0000000000000000000000000000000000000000..3e631d501708bff7406352c1968c61948ab771d6
Binary files /dev/null and b/src/bin/pgaccess/libpgtcl.dll differ
diff --git a/src/bin/pgaccess/libpq.dll b/src/bin/pgaccess/libpq.dll
new file mode 100644
index 0000000000000000000000000000000000000000..1079f2fa7786ee1335efc58533b21e3451cb523f
Binary files /dev/null and b/src/bin/pgaccess/libpq.dll differ
diff --git a/src/bin/pgaccess/pgaccess.tcl b/src/bin/pgaccess/pgaccess.tcl
index 78079b39e3da77ca60cf2978a47c0f70be0e1b1e..c8d73aaabfa85d2f2f39625ba4a94af2f49e169f 100644
--- a/src/bin/pgaccess/pgaccess.tcl
+++ b/src/bin/pgaccess/pgaccess.tcl
@@ -1,46 +1,74 @@
 #!/usr/bin/wish
-#############################################################################
-# Visual Tcl v1.11 Project
-#
 
-#################################
-# GLOBAL VARIABLES
-#
-global activetab; 
-global dbc; 
-global username;
-global password;
-global dbname; 
-global host; 
-global mw; 
-global newdbname; 
-global newhost; 
-global newpport; 
-global newusername;
-global newpassword;
-global pport; 
-global pref; 
-global qlvar; 
-global sdbname; 
-global tablist; 
 global widget;
 
-#################################
-# USER DEFINED PROCEDURES
-#
-proc init {argc argv} {
-global dbc host pport tablist mw fldval activetab qlvar
+image create bitmap dnarw -data  {
+#define down_arrow_width 15
+#define down_arrow_height 15
+static char down_arrow_bits[] = {
+	0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
+	0x00,0x80,0xf8,0x8f,0xf0,0x87,0xe0,0x83,
+	0xc0,0x81,0x80,0x80,0x00,0x80,0x00,0x80,
+	0x00,0x80,0x00,0x80,0x00,0x80
+	}
+}
+
+proc {set_default_fonts} {} {
+global pref tcl_platform
+if {[string toupper $tcl_platform(platform)]=="WINDOWS"} {
+	set pref(font_normal) {"MS Sans Serif" 8}
+	set pref(font_bold) {"MS Sans Serif" 8 bold}
+	set pref(font_fix) {Terminal 8}
+	set pref(font_italic) {"MS Sans Serif" 8 italic}
+} else {
+	set pref(font_normal) -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+	set pref(font_bold) -Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-*
+	set pref(font_italic) -Adobe-Helvetica-Medium-O-Normal-*-*-120-*-*-*-*-*
+	set pref(font_fix) -*-Clean-Medium-R-Normal-*-*-130-*-*-*-*-*
+}
+}
+
+proc {set_gui_pref} {} {
+global pref
 foreach wid {Label Text Button Listbox Checkbutton Radiobutton} {
-	option add *$wid.font  -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+	option add *$wid.font $pref(font_normal)
 }
+option add *Entry.background #fefefe
+option add *Entry.foreground #000000
+}
+
+proc {load_pref} {} {
+global pref
+set_default_fonts
+set_gui_pref
+set retval [catch {set fid [open "~/.pgaccessrc" r]}]
+if {$retval} {
+	set pref(rows) 200
+	set pref(tvfont) clean
+	set pref(autoload) 1
+	set pref(lastdb) {}
+	set pref(lasthost) localhost
+	set pref(lastport) 5432
+	set pref(username) {}
+	set pref(password) {}
+} else {
+	while {![eof $fid]} {
+		set pair [gets $fid]
+		set pref([lindex $pair 0]) [lindex $pair 1]
+	}
+	close $fid
+	set_gui_pref
+}
+}
+
+proc init {argc argv} {
+global dbc host pport tablist mw fldval activetab qlvar mwcount pref
+load_pref
 set host localhost
 set pport 5432
 set dbc {}
-set tablist [list Tables Queries Views Sequences Functions Reports Forms Scripts]
+set tablist [list Tables Queries Views Sequences Functions Reports Forms Scripts Users]
 set activetab {}
-set mw(dirtyrec) 0
-set mw(id_edited) {}
-catch {unset qlvar}
 set qlvar(yoffs) 360
 set qlvar(xoffs) 50
 set qlvar(reswidth) 150
@@ -52,6 +80,7 @@ set qlvar(critedit) 0
 set qlvar(links) {}
 set qlvar(ntables) 0
 set qlvar(newtablename) {}
+set mwcount 0
 }
 
 init $argc $argv
@@ -68,6 +97,9 @@ proc {sqlw_display} {msg} {
 
 proc {wpg_exec} {db cmd} {
 global pgsql
+	set pgsql(cmd) "never executed"
+	set pgsql(status) "no status yet"
+	set pgsql(errmsg) "no error message yet"
 	if {[catch {
 		sqlw_display $cmd
 		set pgsql(cmd) $cmd
@@ -86,6 +118,27 @@ proc {wpg_select} {args} {
 	uplevel pg_select $args
 }
 
+proc {anfw:add} {} {
+global anfw pgsql tiw
+	if {$anfw(name)==""} {
+		show_error "Empty field name ?"
+		focus .anfw.e1
+		return
+	}		
+	if {$anfw(type)==""} {
+		show_error "No field type ?"
+		focus .anfw.e2
+		return
+	}
+	if {![sql_exec quiet "alter table \"$tiw(tablename)\" add column \"$anfw(name)\" $anfw(type)"]} {
+		show_error "Cannot add column\n\nPostgreSQL error: $pgsql(errmsg)"
+		return
+	}
+	Window destroy .anfw
+	sql_exec quiet "update pga_layout set colnames=colnames || ' {$anfw(name)}', colwidth=colwidth || ' 150',nrcols=nrcols+1 where tablename='$tiw(tablename)'"
+	show_table_information $tiw(tablename)
+}
+
 proc {add_new_field} {} {
 global ntw
 if {$ntw(fldname)==""} {
@@ -110,7 +163,7 @@ set inspos end
 for {set i 0} {$i<[.nt.lb size]} {incr i} {
 	set linie [.nt.lb get $i]
 	if {$ntw(fldname)==[string trim [string range $linie 2 33]]} {
-		if {[tk_messageBox -title Warning -message "There is another field with the same name: \"$ntw(fldname)\"!\n\nReplace it ?" -type yesno -default yes]=="no"} return
+		if {[tk_messageBox -title Warning -parent .nt -message "There is another field with the same name: \"$ntw(fldname)\"!\n\nReplace it ?" -type yesno -default yes]=="no"} return
 		.nt.lb delete $i
 		set inspos $i
 		break
@@ -167,62 +220,68 @@ if {$objtodelete==""} return;
 set temp {}
 switch $activetab {
 	Tables {
-		if {[tk_messageBox -title "FINAL WARNING" -message "You are going to delete table:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete table:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
 			sql_exec noquiet "drop table \"$objtodelete\""
 			sql_exec quiet "delete from pga_layout where tablename='$objtodelete'"
 			cmd_Tables
 		}
 	}
 	Views {
-		if {[tk_messageBox -title "FINAL WARNING" -message "You are going to delete view:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
-			sql_exec noquiet "drop view $objtodelete"
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete view:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+			sql_exec noquiet "drop view \"$objtodelete\""
 			sql_exec quiet "delete from pga_layout where tablename='$objtodelete'"
 			cmd_Views
 		}
 	}
 	Queries {
-		if {[tk_messageBox -title "FINAL WARNING" -message "You are going to delete query:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete query:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
 			sql_exec quiet "delete from pga_queries where queryname='$objtodelete'"
 			sql_exec quiet "delete from pga_layout where tablename='$objtodelete'"
 			cmd_Queries
 		}
 	}
 	Scripts {
-		if {[tk_messageBox -title "FINAL WARNING" -message "You are going to delete script:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete script:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
 			sql_exec quiet "delete from pga_scripts where scriptname='$objtodelete'"
 			cmd_Scripts
 		}
 	}
 	Forms {
-		if {[tk_messageBox -title "FINAL WARNING" -message "You are going to delete form:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete form:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
 			sql_exec quiet "delete from pga_forms where formname='$objtodelete'"
 			cmd_Forms
 		}
 	}
 	Sequences {
-		if {[tk_messageBox -title "FINAL WARNING" -message "You are going to delete sequence:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
-			sql_exec quiet "drop sequence $objtodelete"
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete sequence:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+			sql_exec quiet "drop sequence \"$objtodelete\""
 			cmd_Sequences
 		}
 	}
 	Functions {
-		if {[tk_messageBox -title "FINAL WARNING" -message "You are going to delete function:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete function:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
 			delete_function $objtodelete
 			cmd_Functions
 		}
 	}
 	Reports {
-		if {[tk_messageBox -title "FINAL WARNING" -message "You are going to delete report:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete report:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
 			sql_exec noquiet "delete from pga_reports where reportname='$objtodelete'"
 			cmd_Reports
 		}
 	}
+	Users {
+		if {[tk_messageBox -title "FINAL WARNING" -parent .dw -message "You are going to delete user:\n\n$objtodelete\n\nProceed ?" -type yesno -default no]=="yes"} {
+			sql_exec noquiet "drop user \"$objtodelete\""
+			cmd_Users
+		}
+	}
 }
 if {$temp==""} return;
 }
 
 proc {cmd_Design} {} {
-global dbc activetab tablename rbvar
+global dbc activetab rbvar uw
 if {$dbc==""} return;
 if {[.dw.lb curselection]==""} return;
 set objname [.dw.lb get [.dw.lb curselection]]
@@ -232,12 +291,40 @@ switch $activetab {
 	Scripts {design_script $objname}
 	Forms {fd_load_form $objname design}
 	Reports {
-	Window show .rb
-	tkwait visibility .rb
-	rb_init
-	set rbvar(reportname) $objname
-	rb_load_report
-	set rbvar(justpreview) 0
+		Window show .rb
+		tkwait visibility .rb
+		rb_init
+		set rbvar(reportname) $objname
+		rb_load_report
+		set rbvar(justpreview) 0
+	}
+	Users {
+		Window show .uw
+		tkwait visibility .uw
+		wm transient .uw .dw
+		wm title .uw "Design user"
+		set uw(username) $objname
+		set uw(password) {} ; set uw(verify) {}
+		pg_select $dbc "select *,date(valuntil) as valdata from pg_user where usename='$objname'" tup {
+			if {$tup(usesuper)=="t"} {
+				set uw(createuser) CREATEUSER
+			} else {
+				set uw(createuser) NOCREATEUSER
+			}
+			if {$tup(usecreatedb)=="t"} {
+				set uw(createdb) CREATEDB
+			} else {
+				set uw(createdb) NOCREATEDB
+			}
+			if {$tup(valuntil)!=""} {
+				set uw(valid) $tup(valdata)
+			} else {
+				set uw(valid) {}
+			}
+		}
+		.uw.e1 configure -state disabled
+		.uw.b1 configure -text Alter
+		focus .uw.e2
 	}
 }
 }
@@ -299,19 +386,30 @@ show_table_information [get_dwlb_Selection]
 }
 
 proc {cmd_New} {} {
-global dbc activetab queryname queryoid cbv funcpar funcname funcret rbvar
+global dbc activetab queryname queryoid cbv funcpar funcname funcret rbvar uw
 if {$dbc==""} return;
 switch $activetab {
 	Tables {
-	Window show .nt
-	focus .nt.etabn
+		Window show .nt
+		focus .nt.etabn
 	}
 	Queries {
-	Window show .qb
-	set queryoid 0
-	set queryname {}
-		set cbv 0
-	.qb.cbv configure -state normal
+		Window show .qb
+		set queryoid 0
+		set queryname {}
+			set cbv 0
+		.qb.cbv configure -state normal
+	}
+	Users {
+		Window show .uw
+		wm transient .uw .dw
+		set uw(username) {}
+		set uw(password) {}
+		set uw(createdb) NOCREATEDB
+		set uw(createuser) NOCREATEUSER
+		set uw(verify) {}
+		set uw(valid) {}
+		focus .uw.e1
 	}
 	Views {
 	set queryoid 0
@@ -336,7 +434,7 @@ switch $activetab {
 		fd_init
 	}
 	Scripts {
-	design_script {}
+		design_script {}
 	}
 	Functions {
 	Window show .fw
@@ -377,21 +475,52 @@ proc {cmd_Queries} {} {
 global dbc
 .dw.lb delete 0 end
 catch {
-	wpg_select $dbc "select * from pga_queries order by queryname" rec {
+	wpg_select $dbc "select queryname from pga_queries order by queryname" rec {
 		.dw.lb insert end $rec(queryname)
 	}
 }
 }
 
+proc {uw:create_user} {} {
+global dbc uw
+set uw(username) [string trim $uw(username)]
+set uw(password) [string trim $uw(password)]
+set uw(verify) [string trim $uw(verify)]
+if {$uw(username)==""} {
+	show_error "User without name!"
+	focus .uw.e1
+	return
+}
+if {$uw(password)!=$uw(verify)} {
+	show_error "Passwords do not match!"
+	set uw(password) {} ; set uw(verify) {}
+	focus .uw.e2
+	return
+}
+set cmd "[.uw.b1 cget -text] user \"$uw(username)\""
+if {$uw(password)!=""} {
+	set cmd "$cmd WITH PASSWORD \"$uw(password)\" "
+}
+set cmd "$cmd $uw(createdb) $uw(createuser)"
+if {$uw(valid)!=""} {
+	set cmd "$cmd VALID UNTIL '$uw(valid)'"
+}
+if {[sql_exec noquiet $cmd]} {
+	Window destroy .uw
+	cmd_Users
+}
+}
+
 proc {cmd_Rename} {} {
 global dbc oldobjname activetab
 if {$dbc==""} return;
 if {$activetab=="Views"} return;
 if {$activetab=="Sequences"} return;
 if {$activetab=="Functions"} return;
+if {$activetab=="Users"} return;
 set temp [get_dwlb_Selection]
 if {$temp==""} {
-	tk_messageBox -title Warning -message "Please select an object first !"
+	tk_messageBox -title Warning -parent .dw -message "Please select an object first !"
 	return;
 }
 set oldobjname $temp
@@ -402,19 +531,31 @@ proc {cmd_Reports} {} {
 global dbc
 cursor_clock
 catch {
-	wpg_select $dbc "select * from pga_reports order by reportname" rec {
+	wpg_select $dbc "select reportname from pga_reports order by reportname" rec {
 	.dw.lb insert end "$rec(reportname)"
 	}
 }
 cursor_normal
 }
 
+proc {cmd_Users} {} {
+global dbc
+cursor_clock
+.dw.lb delete 0 end
+catch {
+	wpg_select $dbc "select * from pg_user order by usename" rec {
+		.dw.lb insert end $rec(usename)
+	}
+}
+cursor_normal
+}
+
 proc {cmd_Scripts} {} {
 global dbc
 cursor_clock
 .dw.lb delete 0 end
 catch {
-	wpg_select $dbc "select * from pga_scripts order by scriptname" rec {
+	wpg_select $dbc "select scriptname from pga_scripts order by scriptname" rec {
 	.dw.lb insert end $rec(scriptname)
 	}
 }
@@ -427,7 +568,7 @@ global dbc
 cursor_clock
 .dw.lb delete 0 end
 catch {
-	wpg_select $dbc "select * from pg_class where (relname not like 'pg_%') and (relkind='S') order by relname" rec {
+	wpg_select $dbc "select relname from pg_class where (relname not like 'pg_%') and (relkind='S') order by relname" rec {
 		.dw.lb insert end $rec(relname)
 	}
 }
@@ -448,7 +589,7 @@ global dbc
 cursor_clock
 .dw.lb delete 0 end
 catch {
-	wpg_select $dbc "select * from pg_class where (relname !~ '^pg_') and (relkind='r') and (relhasrules) order by relname" rec {
+	wpg_select $dbc "select relname from pg_class where (relname !~ '^pg_') and (relkind='r') and (relhasrules) order by relname" rec {
 		.dw.lb insert end $rec(relname)
 	}
 }
@@ -456,11 +597,12 @@ cursor_normal
 }
 
 proc {create_drop_down} {base x y w} {
+global pref
 if {[winfo exists $base.ddf]} {
     return
 }
 frame $base.ddf -borderwidth 1 -height 75 -relief raised -width 55
-listbox $base.ddf.lb -background #fefefe -borderwidth 1  -font -*-Clean-medium-R-Normal--*-130-*-*-*-*-*-*  -highlightthickness 0 -selectborderwidth 0 -yscrollcommand [subst {$base.ddf.sb set}]
+listbox $base.ddf.lb -background #fefefe -borderwidth 1  -font $pref(font_normal)  -highlightthickness 0 -selectborderwidth 0 -yscrollcommand [subst {$base.ddf.sb set}]
 scrollbar $base.ddf.sb -borderwidth 1 -command [subst {$base.ddf.lb yview}] -highlightthickness 0 -orient vert
 place $base.ddf -x $x -y $y -width $w -height 185 -anchor nw -bordermode ignore
 place $base.ddf.lb -x 1 -y 1 -width [expr $w-18] -height 182 -anchor nw -bordermode ignore
@@ -469,7 +611,7 @@ place $base.ddf.sb -x [expr $w-15] -y 1 -width 14 -height 183 -anchor nw -border
 
 proc {cursor_normal} {} {
 	foreach wn [winfo children .] {
-		catch {$wn configure -cursor top_left_arrow}
+		catch {$wn configure -cursor left_ptr}
 	}
 	update ; update idletasks 
 }
@@ -483,7 +625,7 @@ proc {cursor_clock} {} {
 
 proc {delete_function} {objname} {
 global dbc
-wpg_select $dbc "select * from pg_proc where proname='$objname'" rec {
+wpg_select $dbc "select proargtypes,pronargs from pg_proc where proname='$objname'" rec {
 	set funcpar $rec(proargtypes)
 	set nrpar $rec(pronargs)
 }
@@ -519,46 +661,46 @@ global draglocation
 	}
 }
 
-proc {drag_start} {w x y} {
+proc {drag_start} {wn w x y} {
 global draglocation
 catch {unset draglocation}
 set object [$w find closest $x $y]
-if {[lsearch [.mw.c gettags $object] movable]==-1} return;
-.mw.c bind movable <Leave> {}
+if {[lsearch [$wn.c gettags $object] movable]==-1} return;
+$wn.c bind movable <Leave> {}
 set draglocation(obj) $object
 set draglocation(x) $x
 set draglocation(y) $y
 set draglocation(start) $x
 }
 
-proc {drag_stop} {w x y} {
+proc {drag_stop} {wn w x y} {
 global draglocation mw dbc
 	set dlo ""
 	catch { set dlo $draglocation(obj) }
 	if {$dlo != ""} {
-		.mw.c bind movable <Leave> {.mw configure -cursor top_left_arrow}
-		.mw configure -cursor top_left_arrow
-		set ctr [get_tag_info $draglocation(obj) v]
+		$wn.c bind movable <Leave> "$wn configure -cursor left_ptr"
+		$wn configure -cursor left_ptr
+		set ctr [get_tag_info $wn $draglocation(obj) v]
 		set diff [expr $x-$draglocation(start)]
 		if {$diff==0} return;
 		set newcw {}
-		for {set i 0} {$i<$mw(colcount)} {incr i} {
+		for {set i 0} {$i<$mw($wn,colcount)} {incr i} {
 			if {$i==$ctr} {
-				lappend newcw [expr [lindex $mw(colwidth) $i]+$diff]
+				lappend newcw [expr [lindex $mw($wn,colwidth) $i]+$diff]
 			} else {
-				lappend newcw [lindex $mw(colwidth) $i]
+				lappend newcw [lindex $mw($wn,colwidth) $i]
 			}
 		}
-		set mw(colwidth) $newcw
-		.mw.c itemconfigure c$ctr -width [expr [lindex $mw(colwidth) $ctr]-5]
-		mw_draw_headers
-		mw_draw_hgrid
-		if {$mw(crtrow)!=""} {mw_show_record $mw(crtrow)}
-		for {set i [expr $ctr+1]} {$i<$mw(colcount)} {incr i} {
-			.mw.c move c$i $diff 0
+		set mw($wn,colwidth) $newcw
+		$wn.c itemconfigure c$ctr -width [expr [lindex $mw($wn,colwidth) $ctr]-5]
+		mw_draw_headers $wn
+		mw_draw_hgrid $wn
+		if {$mw($wn,crtrow)!=""} {mw_show_record $wn $mw($wn,crtrow)}
+		for {set i [expr $ctr+1]} {$i<$mw($wn,colcount)} {incr i} {
+			$wn.c move c$i $diff 0
 		}
 		cursor_clock
-		sql_exec quiet "update pga_layout set colwidth='$mw(colwidth)' where tablename='$mw(layout_name)'"
+		sql_exec quiet "update pga_layout set colwidth='$mw($wn,colwidth)' where tablename='$mw($wn,layout_name)'"
 		cursor_normal
 	}
 }
@@ -567,7 +709,7 @@ proc {draw_tabs} {} {
 global tablist activetab
 set ypos 85
 foreach tab $tablist {
-	label .dw.tab$tab -borderwidth 1  -anchor w -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -relief raised -text $tab
+	label .dw.tab$tab -borderwidth 1  -anchor w -relief raised -text $tab
 	place .dw.tab$tab -x 10 -y $ypos -height 25 -width 82 -anchor nw -bordermode ignore
 	lower .dw.tab$tab
 	bind .dw.tab$tab <Button-1> {tab_click %W}
@@ -622,32 +764,32 @@ fd_draw_hook $x2 $y2
 }
 
 proc {fd_draw_object} {i} {
-global fdvar fdobj
+global fdvar fdobj pref
 set c $fdobj($i,c)
 foreach {x1 y1 x2 y2} $c {}
 .fd.c delete o$i
 switch $fdobj($i,t) {
 	button {
 		fd_draw_rectangle $x1 $y1 $x2 $y2 raised #a0a0a0 o$i
-		.fd.c create text [expr ($x1+$x2)/2] [expr ($y1+$y2)/2] -text $fdobj($i,l) -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags o$i
+		.fd.c create text [expr ($x1+$x2)/2] [expr ($y1+$y2)/2] -text $fdobj($i,l) -font $pref(font_normal) -tags o$i
 	}
 	entry {
 		fd_draw_rectangle $x1 $y1 $x2 $y2 sunken white o$i
 	}
 	label {
-		.fd.c create text $x1 $y1 -text $fdobj($i,l) -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -tags o$i
+		.fd.c create text $x1 $y1 -text $fdobj($i,l) -font $pref(font_normal) -anchor nw -tags o$i
 	}
 	checkbox {
 		fd_draw_rectangle [expr $x1+2] [expr $y1+5] [expr $x1+12] [expr $y1+15] raised #a0a0a0 o$i
-		.fd.c create text [expr $x1+20] [expr $y1+3] -text $fdobj($i,l) -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags o$i
+		.fd.c create text [expr $x1+20] [expr $y1+3] -text $fdobj($i,l) -anchor nw -font $pref(font_normal) -tags o$i
 	}
 	radio {
 		.fd.c create oval [expr $x1+4] [expr $y1+5] [expr $x1+14] [expr $y1+15] -fill white -tags o$i
-		.fd.c create text [expr $x1+24] [expr $y1+3] -text $fdobj($i,l) -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags o$i
+		.fd.c create text [expr $x1+24] [expr $y1+3] -text $fdobj($i,l) -anchor nw -font $pref(font_normal) -tags o$i
 	}
 	query {
 		.fd.c create oval $x1 $y1 [expr $x1+20] [expr $y1+20] -fill white -tags o$i
-		.fd.c create text [expr $x1+5] [expr $y1+4] -text Q  -anchor nw -font -Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-* -tags o$i
+		.fd.c create text [expr $x1+5] [expr $y1+4] -text Q  -anchor nw -font $pref(font_normal) -tags o$i
 	}
 	listbox {
 		fd_draw_rectangle $x1 $y1 [expr $x2-12] $y2 sunken white o$i
@@ -889,7 +1031,7 @@ catch {set fdvar(c_text) $fdobj($i,l)}
 }
 
 proc {fd_test} {} {
-global fdvar fdobj dbc datasets
+global fdvar fdobj dbc datasets pref
 set basewp $fdvar(forminame)
 set base .$fdvar(forminame)
 if {[winfo exists $base]} {
@@ -913,10 +1055,10 @@ switch $fdobj($item,t) {
 	button {
 		set cmd {}
 		catch {set cmd $fdobj($item,x)}
-		button $base.$name  -borderwidth 1 -padx 0 -pady 0 -text "$fdobj($item,l)" -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -command [subst {$cmd}]
+		button $base.$name  -borderwidth 1 -padx 0 -pady 0 -text "$fdobj($item,l)" -font $pref(font_normal) -command [subst {$cmd}]
 	}
 	checkbox {
-		checkbutton  $base.$name -onvalue t -offvalue f -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -text "$fdobj($item,l)" -variable "$fdobj($item,v)" -borderwidth 1
+		checkbutton  $base.$name -onvalue t -offvalue f -font $pref(font_normal) -text "$fdobj($item,l)" -variable "$fdobj($item,v)" -borderwidth 1
 		set wh {}
 	}
 	query {
@@ -991,7 +1133,7 @@ switch $fdobj($item,t) {
 		}"
 	}
 	radio {
-		radiobutton  $base.$name -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -text "$fdobj($item,l)" -variable "$fdobj($item,v)" -value "$name" -borderwidth 1
+		radiobutton  $base.$name -font $pref(font_normal) -text "$fdobj($item,l)" -variable "$fdobj($item,v)" -value "$name" -borderwidth 1
 		set wh {}
 	}
 	entry {
@@ -1001,12 +1143,12 @@ switch $fdobj($item,t) {
 	}
 	label {
 		set wh {}
-		label $base.$name -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -padx 0 -pady 0 -text $fdobj($item,l)
+		label $base.$name -font $pref(font_normal) -anchor nw -padx 0 -pady 0 -text $fdobj($item,l)
 	set var {} ; catch {set var $fdobj($item,v)}
 	if {$var!=""} {$base.$name configure -textvar $var}
 	}
 	listbox {
-		listbox $base.$name -borderwidth 1 -background white  -highlightthickness 0 -selectborderwidth 0 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -yscrollcommand [subst {$base.sb$name set}]
+		listbox $base.$name -borderwidth 1 -background white  -highlightthickness 0 -selectborderwidth 0 -font $pref(font_normal) -yscrollcommand [subst {$base.sb$name set}]
 	scrollbar $base.sb$name -borderwidth 1 -command [subst {$base.$name yview}] -orient vert  -highlightthickness 0
 	eval [subst "place $base.sb$name -x [expr [lindex $coord 2]-14] -y [expr [lindex $coord 1]-1] -width 16 -height [expr 3+[lindex $coord 3]-[lindex $coord 1]] -anchor nw -bordermode ignore"]
 	}
@@ -1036,248 +1178,224 @@ proc {get_tables} {} {
 global dbc
 set tbl {}
 catch {
-	wpg_select $dbc "select * from pg_class where (relname !~ '^pg_') and (relkind='r') and (not relhasrules) order by relname" rec {
+	wpg_select $dbc "select * from pg_class where (relname !~ '^pg_') and (relkind='r') order by relname" rec {
 		if {![regexp "^pga_" $rec(relname)]} then {lappend tbl $rec(relname)}
 	}
 }
 return $tbl
 }
 
-proc {get_tag_info} {itemid prefix} {
-set taglist [.mw.c itemcget $itemid -tags]
+proc {get_tag_info} {wn itemid prefix} {
+set taglist [$wn.c itemcget $itemid -tags]
 set i [lsearch -glob $taglist $prefix*]
 set thetag [lindex $taglist $i]
 return [string range $thetag 1 end]
 }
 
-proc {load_pref} {} {
-global pref
-set retval [catch {set fid [open "~/.pgaccessrc" r]}]
-if {$retval} {
-	set pref(rows) 200
-	set pref(tvfont) clean
-	set pref(autoload) 1
-	set pref(lastdb) {}
-	set pref(lasthost) localhost
-	set pref(lastport) 5432
-	set pref(username) {}
-	set pref(password) {}
-} else {
-	while {![eof $fid]} {
-		set pair [gets $fid]
-		set pref([lindex $pair 0]) [lindex $pair 1]
-	}
-	close $fid
-}
-}
-
-
-
-
-proc {mw_canvas_click} {x y} {
-global mw msg
-if {![mw_exit_edit]} return
+proc {mw_canvas_click} {wn x y} {
+global mw
+if {![mw_exit_edit $wn]} return
 # Determining row
-for {set row 0} {$row<$mw(nrecs)} {incr row} {
-	if {[lindex $mw(rowy) $row]>$y} break
+for {set row 0} {$row<$mw($wn,nrecs)} {incr row} {
+	if {[lindex $mw($wn,rowy) $row]>$y} break
 }
 incr row -1
-if {$y>[lindex $mw(rowy) $mw(last_rownum)]} {set row $mw(last_rownum)}
+if {$y>[lindex $mw($wn,rowy) $mw($wn,last_rownum)]} {set row $mw($wn,last_rownum)}
 if {$row<0} return
-set mw(row_edited) $row
-set mw(crtrow) $row
-mw_show_record $row
-if {$mw(errorsavingnew)} return
+set mw($wn,row_edited) $row
+set mw($wn,crtrow) $row
+mw_show_record $wn $row
+if {$mw($wn,errorsavingnew)} return
 # Determining column
-set posx [expr -$mw(leftoffset)]
+set posx [expr -$mw($wn,leftoffset)]
 set col 0
-foreach cw $mw(colwidth) {
+foreach cw $mw($wn,colwidth) {
 	incr posx [expr $cw+2]
 	if {$x<$posx} break
 	incr col
 }
-set itlist [.mw.c find withtag r$row]
+set itlist [$wn.c find withtag r$row]
 foreach item $itlist {
-	if {[get_tag_info $item c]==$col} {
-		mw_start_edit $item $x $y
+	if {[get_tag_info $wn $item c]==$col} {
+		mw_start_edit $wn $item $x $y
 		break
 	}
 }
 }
 
-proc {mw_delete_record} {} {
-global dbc mw tablename
-if {!$mw(updatable)} return;
-if {![mw_exit_edit]} return;
-set taglist [.mw.c gettags hili]
+proc {mw_delete_record} {wn} {
+global dbc mw
+if {!$mw($wn,updatable)} return;
+if {![mw_exit_edit $wn]} return;
+set taglist [$wn.c gettags hili]
 if {[llength $taglist]==0} return;
 set rowtag [lindex $taglist [lsearch -regexp $taglist "^r"]]
 set row [string range $rowtag 1 end]
-set oid [lindex $mw(keylist) $row]
-if {[tk_messageBox -title "FINAL WARNING" -icon question -message "Delete current record ?" -type yesno -default no]=="no"} return
-if {[sql_exec noquiet "delete from $tablename where oid=$oid"]} {
-	.mw.c delete hili
-}
-}
-
-proc {mw_draw_headers} {} {
-global mw
-.mw.c delete header
-set posx [expr 5-$mw(leftoffset)]
-for {set i 0} {$i<$mw(colcount)} {incr i} {
-	set xf [expr $posx+[lindex $mw(colwidth) $i]]
-	.mw.c create rectangle $posx 1 $xf 22 -fill #CCCCCC -outline "" -width 0 -tags header
-	.mw.c create text [expr $posx+[lindex $mw(colwidth) $i]*1.0/2] 14 -text [lindex $mw(colnames) $i] -tags header -fill navy -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
-	.mw.c create line $posx 22 [expr $xf-1] 22 -fill #AAAAAA -tags header
-	.mw.c create line [expr $xf-1] 5 [expr $xf-1] 22 -fill #AAAAAA -tags header
-	.mw.c create line [expr $xf+1] 5 [expr $xf+1] 22 -fill white -tags header
-	.mw.c create line $xf -15000 $xf 15000 -fill #CCCCCC -tags [subst {header movable v$i}]
+set oid [lindex $mw($wn,keylist) $row]
+if {[tk_messageBox -title "FINAL WARNING" -icon question -parent $wn -message "Delete current record ?" -type yesno -default no]=="no"} return
+if {[sql_exec noquiet "delete from \"$mw($wn,tablename)\" where oid=$oid"]} {
+	$wn.c delete hili
+}
+}
+
+proc {mw_draw_headers} {wn} {
+global mw pref
+$wn.c delete header
+set posx [expr 5-$mw($wn,leftoffset)]
+for {set i 0} {$i<$mw($wn,colcount)} {incr i} {
+	set xf [expr $posx+[lindex $mw($wn,colwidth) $i]]
+	$wn.c create rectangle $posx 1 $xf 22 -fill #CCCCCC -outline "" -width 0 -tags header
+	$wn.c create text [expr $posx+[lindex $mw($wn,colwidth) $i]*1.0/2] 14 -text [lindex $mw($wn,colnames) $i] -tags header -fill navy -font $pref(font_normal)
+	$wn.c create line $posx 22 [expr $xf-1] 22 -fill #AAAAAA -tags header
+	$wn.c create line [expr $xf-1] 5 [expr $xf-1] 22 -fill #AAAAAA -tags header
+	$wn.c create line [expr $xf+1] 5 [expr $xf+1] 22 -fill white -tags header
+	$wn.c create line $xf -15000 $xf 15000 -fill #CCCCCC -tags [subst {header movable v$i}]
 	set posx [expr $xf+2]
 }
-set mw(r_edge) $posx
-.mw.c bind movable <Button-1> {drag_start %W %x %y}
-.mw.c bind movable <B1-Motion> {drag_it %W %x %y}
-.mw.c bind movable <ButtonRelease-1> {drag_stop %W %x %y}
-.mw.c bind movable <Enter> {.mw configure -cursor left_side}
-.mw.c bind movable <Leave> {.mw configure -cursor top_left_arrow}
+set mw($wn,r_edge) $posx
+$wn.c bind movable <Button-1> "drag_start $wn %W %x %y"
+$wn.c bind movable <B1-Motion> {drag_it %W %x %y}
+$wn.c bind movable <ButtonRelease-1> "drag_stop $wn %W %x %y"
+$wn.c bind movable <Enter> "$wn configure -cursor left_side"
+$wn.c bind movable <Leave> "$wn configure -cursor left_ptr"
 }
 
-proc {mw_draw_hgrid} {} {
+proc {mw_draw_hgrid} {wn} {
 global mw
-.mw.c delete hgrid
+$wn.c delete hgrid
 set posx 10
-for {set j 0} {$j<$mw(colcount)} {incr j} {
+for {set j 0} {$j<$mw($wn,colcount)} {incr j} {
 	set ledge($j) $posx
-	incr posx [expr [lindex $mw(colwidth) $j]+2]
-	set textwidth($j) [expr [lindex $mw(colwidth) $j]-5]
+	incr posx [expr [lindex $mw($wn,colwidth) $j]+2]
+	set textwidth($j) [expr [lindex $mw($wn,colwidth) $j]-5]
 }
 incr posx -6
-for {set i 0} {$i<$mw(nrecs)} {incr i} {
-	.mw.c create line [expr -$mw(leftoffset)] [lindex $mw(rowy) [expr $i+1]] [expr $posx-$mw(leftoffset)] [lindex $mw(rowy) [expr $i+1]] -fill gray -tags [subst {hgrid g$i}]
+for {set i 0} {$i<$mw($wn,nrecs)} {incr i} {
+	$wn.c create line [expr -$mw($wn,leftoffset)] [lindex $mw($wn,rowy) [expr $i+1]] [expr $posx-$mw($wn,leftoffset)] [lindex $mw($wn,rowy) [expr $i+1]] -fill gray -tags [subst {hgrid g$i}]
 }
-if {$mw(updatable)} {
-	set i $mw(nrecs)
-	set posy [expr 14+[lindex $mw(rowy) $mw(nrecs)]]
-	.mw.c create line [expr -$mw(leftoffset)] $posy [expr $posx-$mw(leftoffset)] $posy -fill gray -tags [subst {hgrid g$i}]
+if {$mw($wn,updatable)} {
+	set i $mw($wn,nrecs)
+	set posy [expr 14+[lindex $mw($wn,rowy) $mw($wn,nrecs)]]
+	$wn.c create line [expr -$mw($wn,leftoffset)] $posy [expr $posx-$mw($wn,leftoffset)] $posy -fill gray -tags [subst {hgrid g$i}]
 }
 }
 
-proc {mw_draw_new_record} {} {
-global mw pref msg
-set posx 10
-set posy [lindex $mw(rowy) $mw(last_rownum)]
+proc {mw_draw_new_record} {wn} {
+global mw pref
+set posx [expr 10-$mw($wn,leftoffset)]
+set posy [lindex $mw($wn,rowy) $mw($wn,last_rownum)]
 if {$pref(tvfont)=="helv"} {
-	set tvfont -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+	set tvfont $pref(font_normal)
 } else {
-	set tvfont -*-Clean-Medium-R-Normal-*-*-130-*-*-*-*-*
+	set tvfont $pref(font_fix)
 }
-if {$mw(updatable)} {
-  for {set j 0} {$j<$mw(colcount)} {incr j} {
-	.mw.c create text $posx $posy -text * -tags [subst {r$mw(nrecs) c$j q new unt}]  -anchor nw -font $tvfont -width [expr [lindex $mw(colwidth) $j]-5]
-	incr posx [expr [lindex $mw(colwidth) $j]+2]
+if {$mw($wn,updatable)} {
+  for {set j 0} {$j<$mw($wn,colcount)} {incr j} {
+	$wn.c create text $posx $posy -text * -tags [subst {r$mw($wn,nrecs) c$j q new unt}]  -anchor nw -font $tvfont -width [expr [lindex $mw($wn,colwidth) $j]-5]
+	incr posx [expr [lindex $mw($wn,colwidth) $j]+2]
   }
   incr posy 14
-  .mw.c create line [expr -$mw(leftoffset)] $posy [expr $mw(r_edge)-$mw(leftoffset)] $posy -fill gray -tags [subst {hgrid g$mw(nrecs)}]
+  $wn.c create line [expr -$mw($wn,leftoffset)] $posy [expr $mw($wn,r_edge)-$mw($wn,leftoffset)] $posy -fill gray -tags [subst {hgrid g$mw($wn,nrecs)}]
 }
 }
 
-proc {mw_edit_text} {c k} {
-global mw msg
-set bbin [.mw.c bbox r$mw(row_edited)]
+proc {mw_edit_text} {wn c k} {
+global mw
+set bbin [$wn.c bbox r$mw($wn,row_edited)]
 switch $k {
-	BackSpace { set dp [expr [.mw.c index $mw(id_edited) insert]-1];if {$dp>=0} {.mw.c dchars $mw(id_edited) $dp $dp; set mw(dirtyrec) 1}}
-	Home {.mw.c icursor $mw(id_edited) 0}
-	End {.mw.c icursor $mw(id_edited) end}
-	Left {.mw.c icursor $mw(id_edited) [expr [.mw.c index $mw(id_edited) insert]-1]}
+	BackSpace { set dp [expr [$wn.c index $mw($wn,id_edited) insert]-1];if {$dp>=0} {$wn.c dchars $mw($wn,id_edited) $dp $dp; set mw($wn,dirtyrec) 1}}
+	Home {$wn.c icursor $mw($wn,id_edited) 0}
+	End {$wn.c icursor $mw($wn,id_edited) end}
+	Left {$wn.c icursor $mw($wn,id_edited) [expr [$wn.c index $mw($wn,id_edited) insert]-1]}
 	Delete {}
-	Right {.mw.c icursor $mw(id_edited) [expr [.mw.c index $mw(id_edited) insert]+1]}
-	Return {if {[mw_exit_edit]} {.mw.c focus {}}}
-	Escape {set mw(dirtyrec) 0; .mw.c itemconfigure $mw(id_edited) -text $mw(text_initial_value); .mw.c focus {}}
-	default {if {[string compare $c " "]>-1} {.mw.c insert $mw(id_edited) insert $c;set mw(dirtyrec) 1}}
+	Right {$wn.c icursor $mw($wn,id_edited) [expr [$wn.c index $mw($wn,id_edited) insert]+1]}
+	Return {if {[mw_exit_edit $wn]} {$wn.c focus {}}}
+	Escape {set mw($wn,dirtyrec) 0; $wn.c itemconfigure $mw($wn,id_edited) -text $mw($wn,text_initial_value); $wn.c focus {}}
+	default {if {[string compare $c " "]>-1} {$wn.c insert $mw($wn,id_edited) insert $c;set mw($wn,dirtyrec) 1}}
 }
-set bbout [.mw.c bbox r$mw(row_edited)]
+set bbout [$wn.c bbox r$mw($wn,row_edited)]
 set dy [expr [lindex $bbout 3]-[lindex $bbin 3]]
 if {$dy==0} return
-set re $mw(row_edited)
-.mw.c move g$re 0 $dy
-for {set i [expr 1+$re]} {$i<=$mw(nrecs)} {incr i} {
-	.mw.c move r$i 0 $dy
-	.mw.c move g$i 0 $dy
-	set rh [lindex $mw(rowy) $i]
+set re $mw($wn,row_edited)
+$wn.c move g$re 0 $dy
+for {set i [expr 1+$re]} {$i<=$mw($wn,nrecs)} {incr i} {
+	$wn.c move r$i 0 $dy
+	$wn.c move g$i 0 $dy
+	set rh [lindex $mw($wn,rowy) $i]
 	incr rh $dy
-	set mw(rowy) [lreplace $mw(rowy) $i $i $rh]
+	set mw($wn,rowy) [lreplace $mw($wn,rowy) $i $i $rh]
 }
-mw_show_record $mw(row_edited)
+mw_show_record $wn $mw($wn,row_edited)
 # Delete is trapped by window interpreted as record delete
-#    Delete {.mw.c dchars $mw(id_edited) insert insert; set mw(dirtyrec) 1}
+#    Delete {$wn.c dchars $mw($wn,id_edited) insert insert; set mw($wn,dirtyrec) 1}
 }
 
-proc {mw_exit_edit} {} {
-global mw dbc msg tablename
+proc {mw_exit_edit} {wn} {
+global mw dbc
 # User has edited the text ?
-if {!$mw(dirtyrec)} {
+if {!$mw($wn,dirtyrec)} {
 	# No, unfocus text
-	.mw.c focus {}
+	$wn.c focus {}
 	# For restoring * to the new record position
-	if {$mw(id_edited)!=""} {
-		if {[lsearch [.mw.c gettags $mw(id_edited)] new]!=-1} {
-			.mw.c itemconfigure $mw(id_edited) -text $mw(text_initial_value)
+	if {$mw($wn,id_edited)!=""} {
+		if {[lsearch [$wn.c gettags $mw($wn,id_edited)] new]!=-1} {
+			$wn.c itemconfigure $mw($wn,id_edited) -text $mw($wn,text_initial_value)
 		}
 	}
-	set mw(id_edited) {};set mw(text_initial_value) {}
+	set mw($wn,id_edited) {};set mw($wn,text_initial_value) {}
 	return 1
 }
 # Trimming the spaces
-set fldval [string trim [.mw.c itemcget $mw(id_edited) -text]]
-.mw.c itemconfigure $mw(id_edited) -text $fldval
-if {[string compare $mw(text_initial_value) $fldval]==0} {
-	set mw(dirtyrec) 0
-	.mw.c focus {}
-	set mw(id_edited) {};set mw(text_initial_value) {}
+set fldval [string trim [$wn.c itemcget $mw($wn,id_edited) -text]]
+$wn.c itemconfigure $mw($wn,id_edited) -text $fldval
+if {[string compare $mw($wn,text_initial_value) $fldval]==0} {
+	set mw($wn,dirtyrec) 0
+	$wn.c focus {}
+	set mw($wn,id_edited) {};set mw($wn,text_initial_value) {}
 	return 1
 }
 cursor_clock
-set oid [lindex $mw(keylist) $mw(row_edited)]
-set fld [lindex $mw(colnames) [get_tag_info $mw(id_edited) c]]
+set oid [lindex $mw($wn,keylist) $mw($wn,row_edited)]
+set fld [lindex $mw($wn,colnames) [get_tag_info $wn $mw($wn,id_edited) c]]
 set fillcolor black
-if {$mw(row_edited)==$mw(last_rownum)} {
+if {$mw($wn,row_edited)==$mw($wn,last_rownum)} {
 	set fillcolor red
-	set sfp [lsearch $mw(newrec_fields) "\"$fld\""]
+	set sfp [lsearch $mw($wn,newrec_fields) "\"$fld\""]
 	if {$sfp>-1} {
-		set mw(newrec_fields) [lreplace $mw(newrec_fields) $sfp $sfp]
-		set mw(newrec_values) [lreplace $mw(newrec_values) $sfp $sfp]
+		set mw($wn,newrec_fields) [lreplace $mw($wn,newrec_fields) $sfp $sfp]
+		set mw($wn,newrec_values) [lreplace $mw($wn,newrec_values) $sfp $sfp]
 	}			
-	lappend mw(newrec_fields) "\"$fld\""
-	lappend mw(newrec_values) '$fldval'
+	lappend mw($wn,newrec_fields) "\"$fld\""
+	lappend mw($wn,newrec_values) '$fldval'
 	# Remove the untouched tag from the object
-	.mw.c dtag $mw(id_edited) unt
-		.mw.c itemconfigure $mw(id_edited) -fill red
+	$wn.c dtag $mw($wn,id_edited) unt
+		$wn.c itemconfigure $mw($wn,id_edited) -fill red
 	set retval 1
 } else {
-	set msg "Updating record ..."
-	after 1000 {set msg ""}
+	set mw($wn,msg) "Updating record ..."
+	after 1000 "set mw($wn,msg) {}"
 	regsub -all ' $fldval  \\' sqlfldval
-	set retval [sql_exec noquiet "update \"$tablename\" set \"$fld\"='$sqlfldval' where oid=$oid"]
+	set retval [sql_exec noquiet "update \"$mw($wn,tablename)\" set \"$fld\"='$sqlfldval' where oid=$oid"]
 }
 cursor_normal
 if {!$retval} {
-	set msg ""
-	focus .mw.c
+	set mw($wn,msg) ""
+	focus $wn.c
 	return 0
 }
-set mw(dirtyrec) 0
-.mw.c focus {}
-set mw(id_edited) {};set mw(text_initial_value) {}
+set mw($wn,dirtyrec) 0
+$wn.c focus {}
+set mw($wn,id_edited) {};set mw($wn,text_initial_value) {}
 return 1
 }
 
-proc {mw_load_layout} {tablename} {
-global dbc msg mw
+proc {mw_load_layout} {wn layoutname} {
+global dbc mw
 cursor_clock
-set mw(layout_name) $tablename
-catch {unset mw(colcount) mw(colnames) mw(colwidth)}
-set mw(layout_found) 0
-set pgres [wpg_exec $dbc "select *,oid from pga_layout where tablename='$tablename' order by oid desc"]
+set mw($wn,layout_name) $layoutname
+catch {unset mw($wn,colcount) mw($wn,colnames) mw($wn,colwidth)}
+set mw($wn,layout_found) 0
+set pgres [wpg_exec $dbc "select *,oid from pga_layout where tablename='$layoutname' order by oid desc"]
 set pgs [pg_result $pgres -status]
 if {$pgs!="PGRES_TUPLES_OK"} {
 	# Probably table pga_layout isn't yet defined
@@ -1287,119 +1405,120 @@ if {$pgs!="PGRES_TUPLES_OK"} {
 	set nrlay [pg_result $pgres -numTuples]
 	if {$nrlay>=1} {
 		set layoutinfo [pg_result $pgres -getTuple 0]
-		set mw(colcount) [lindex $layoutinfo 1]
-		set mw(colnames)  [lindex $layoutinfo 2]
-		set mw(colwidth) [lindex $layoutinfo 3]
+		set mw($wn,colcount) [lindex $layoutinfo 1]
+		set mw($wn,colnames)  [lindex $layoutinfo 2]
+		set mw($wn,colwidth) [lindex $layoutinfo 3]
 		set goodoid [lindex $layoutinfo 4]
-		set mw(layout_found) 1
+		set mw($wn,layout_found) 1
 	}
 	if {$nrlay>1} {
 		show_error "Multiple ($nrlay) layout info found\n\nPlease report the bug!"
-		sql_exec quiet "delete from pga_layout where (tablename='$tablename') and (oid<>$goodoid)"
+		sql_exec quiet "delete from pga_layout where (tablename='$mw($wn,tablename)') and (oid<>$goodoid)"
 	}
 }
 pg_result $pgres -clear
 }
 
-proc {mw_pan_left} {} {
+proc {mw_pan_left} {wn } {
 global mw
-if {![mw_exit_edit]} return;
-if {$mw(leftcol)==[expr $mw(colcount)-1]} return;
-set diff [expr 2+[lindex $mw(colwidth) $mw(leftcol)]]
-incr mw(leftcol)
-incr mw(leftoffset) $diff
-.mw.c move header -$diff 0
-.mw.c move q -$diff 0
-.mw.c move hgrid -$diff 0
+if {![mw_exit_edit $wn]} return;
+if {$mw($wn,leftcol)==[expr $mw($wn,colcount)-1]} return;
+set diff [expr 2+[lindex $mw($wn,colwidth) $mw($wn,leftcol)]]
+incr mw($wn,leftcol)
+incr mw($wn,leftoffset) $diff
+$wn.c move header -$diff 0
+$wn.c move q -$diff 0
+$wn.c move hgrid -$diff 0
 }
 
-proc {mw_pan_right} {} {
+proc {mw_pan_right} {wn} {
 global mw
-if {![mw_exit_edit]} return;
-if {$mw(leftcol)==0} return;
-incr mw(leftcol) -1
-set diff [expr 2+[lindex $mw(colwidth) $mw(leftcol)]]
-incr mw(leftoffset) -$diff
-.mw.c move header $diff 0
-.mw.c move q $diff 0
-.mw.c move hgrid $diff 0
-}
-
-proc {mw_save_new_record} {} {
-global dbc mw tablename msg
-if {![mw_exit_edit]} {return 0}
-if {$mw(newrec_fields)==""} {return 1}
-set msg "Saving new record ..."
-after 1000 {set msg ""}
-set pgres [wpg_exec $dbc "insert into \"$tablename\" ([join $mw(newrec_fields) ,]) values ([join $mw(newrec_values) ,])" ]
+if {![mw_exit_edit $wn]} return;
+if {$mw($wn,leftcol)==0} return;
+incr mw($wn,leftcol) -1
+set diff [expr 2+[lindex $mw($wn,colwidth) $mw($wn,leftcol)]]
+incr mw($wn,leftoffset) -$diff
+$wn.c move header $diff 0
+$wn.c move q $diff 0
+$wn.c move hgrid $diff 0
+}
+
+proc {mw_save_new_record} {wn} {
+global dbc mw
+if {![mw_exit_edit $wn]} {return 0}
+if {$mw($wn,newrec_fields)==""} {return 1}
+set mw($wn,msg) "Saving new record ..."
+after 1000 "set mw($wn,msg) {}"
+set pgres [wpg_exec $dbc "insert into \"$mw($wn,tablename)\" ([join $mw($wn,newrec_fields) ,]) values ([join $mw($wn,newrec_values) ,])" ]
 if {[pg_result $pgres -status]!="PGRES_COMMAND_OK"} {
 	set errmsg [pg_result $pgres -error]
 	show_error "Error inserting new record\n\n$errmsg"
 	return 0
 }
 set oid [pg_result $pgres -oid]
-lappend mw(keylist) $oid
+lappend mw($wn,keylist) $oid
 pg_result $pgres -clear
 # Get bounds of the last record
-set lrbb [.mw.c bbox new]
-lappend mw(rowy) [lindex $lrbb 3]
-.mw.c itemconfigure new -fill black
-.mw.c dtag q new
+set lrbb [$wn.c bbox new]
+lappend mw($wn,rowy) [lindex $lrbb 3]
+$wn.c itemconfigure new -fill black
+$wn.c dtag q new
 # Replace * from untouched new row elements with "  "
-foreach item [.mw.c find withtag unt] {
-	.mw.c itemconfigure $item -text "  "
-}
-.mw.c dtag q unt
-incr mw(last_rownum)
-incr mw(nrecs)
-mw_draw_new_record
-set mw(newrec_fields) {}
-set mw(newrec_values) {}
+foreach item [$wn.c find withtag unt] {
+	$wn.c itemconfigure $item -text "  "
+}
+$wn.c dtag q unt
+incr mw($wn,last_rownum)
+incr mw($wn,nrecs)
+mw_draw_new_record $wn
+set mw($wn,newrec_fields) {}
+set mw($wn,newrec_values) {}
 return 1
 }
 
-proc {mw_scroll_window} {par1 par2 args} {
+proc {mw_scroll_window} {wn par1 args} {
 global mw
-if {![mw_exit_edit]} return;
+if {![mw_exit_edit $wn]} return;
 if {$par1=="scroll"} {
-	set newtop $mw(toprec)
-	if {[lindex $args 0]=="units"} {
-		incr newtop $par2
+	set newtop $mw($wn,toprec)
+	if {[lindex $args 1]=="units"} {
+		incr newtop [lindex $args 0]
 	} else {
-		incr newtop [expr $par2*25]
+		incr newtop [expr [lindex $args 0]*25]
 		if {$newtop<0} {set newtop 0}
-		if {$newtop>=[expr $mw(nrecs)-1]} {set newtop [expr $mw(nrecs)-1]}
+		if {$newtop>=[expr $mw($wn,nrecs)-1]} {set newtop [expr $mw($wn,nrecs)-1]}
 	}
+} elseif {$par1=="moveto"} {
+	set newtop [expr int([lindex $args 0]*$mw($wn,nrecs))]
 } else {
-	set newtop [expr int($par2*$mw(nrecs))]
+	return
 }
 if {$newtop<0} return;
-if {$newtop>=[expr $mw(nrecs)-1]} return;
-set dy [expr [lindex $mw(rowy) $mw(toprec)]-[lindex $mw(rowy) $newtop]]
-.mw.c move q 0 $dy
-.mw.c move hgrid 0 $dy
+if {$newtop>=[expr $mw($wn,nrecs)-1]} return;
+set dy [expr [lindex $mw($wn,rowy) $mw($wn,toprec)]-[lindex $mw($wn,rowy) $newtop]]
+$wn.c move q 0 $dy
+$wn.c move hgrid 0 $dy
 set newrowy {}
-foreach y $mw(rowy) {lappend newrowy [expr $y+$dy]}
-set mw(rowy) $newrowy
-set mw(toprec) $newtop
-mw_set_scrollbar
-}
-
-proc {mw_select_records} {sql} {
-global dbc field mw pgsql
-global tablename msg pref
-set mw(newrec_fields) {}
-set mw(newrec_values) {}
-if {![mw_exit_edit]} return;
-.mw.c delete q
-.mw.c delete header
-.mw.c delete hgrid
-.mw.c delete new
-set mw(leftcol) 0
-set mw(leftoffset) 0
-set mw(crtrow) {}
-set msg {}
-set msg "Accessing data. Please wait ..."
+foreach y $mw($wn,rowy) {lappend newrowy [expr $y+$dy]}
+set mw($wn,rowy) $newrowy
+set mw($wn,toprec) $newtop
+mw_set_scrollbar $wn
+}
+
+proc {mw_select_records} {wn sql} {
+global dbc field mw pgsql pref
+set mw($wn,newrec_fields) {}
+set mw($wn,newrec_values) {}
+if {![mw_exit_edit $wn]} return;
+$wn.c delete q
+$wn.c delete header
+$wn.c delete hgrid
+$wn.c delete new
+set mw($wn,leftcol) 0
+set mw($wn,leftoffset) 0
+set mw($wn,crtrow) {}
+set mw($wn,msg) "Accessing data. Please wait ..."
+$wn.f1.b1 configure -state disabled
 cursor_clock
 set is_error 1
 if {[sql_exec noquiet "BEGIN"]} {
@@ -1412,145 +1531,167 @@ if {[sql_exec noquiet "BEGIN"]} {
 }
 if {$is_error} {
 	sql_exec quiet "END"
-	set msg {}
+	set mw($wn,msg) {}
+	$wn.f1.b1 configure -state normal
 	cursor_normal
-	set msg "Error executing : $sql"
+	set mw($wn,msg) "Error executing : $sql"
 	return
 }
-if {$mw(updatable)} then {set shift 1} else {set shift 0}
+if {$mw($wn,updatable)} then {set shift 1} else {set shift 0}
 #
 # checking at least the numer of fields
 set attrlist [pg_result $pgres -lAttributes]
-if {$mw(layout_found)} then {
-	if {  ($mw(colcount) != [expr [llength $attrlist]-$shift]) ||
-		  ($mw(colcount) != [llength $mw(colnames)]) ||
-		  ($mw(colcount) != [llength $mw(colwidth)]) } then {
+if {$mw($wn,layout_found)} then {
+	if {  ($mw($wn,colcount) != [expr [llength $attrlist]-$shift]) ||
+		  ($mw($wn,colcount) != [llength $mw($wn,colnames)]) ||
+		  ($mw($wn,colcount) != [llength $mw($wn,colwidth)]) } then {
 		# No. of columns don't match, something is wrong
 		# tk_messageBox -title Information -message "Layout info changed !\nRescanning..."
-		set mw(layout_found) 0
-		sql_exec quiet "delete from pga_layout where tablename='$mw(layout_name)'"
+		set mw($wn,layout_found) 0
+		sql_exec quiet "delete from pga_layout where tablename='$mw($wn,layout_name)'"
 	}
 }
 # Always take the col. names from the result
-set mw(colcount) [llength $attrlist]
-if {$mw(updatable)} then {incr mw(colcount) -1}
-set mw(colnames) {}
-# In defmw(colwidth) prepare mw(colwidth) (in case that not layout_found)
-set defmw(colwidth) {}
-for {set i 0} {$i<$mw(colcount)} {incr i} {
-	lappend mw(colnames) [lindex [lindex $attrlist [expr $i+$shift]] 0]
-	lappend defmw(colwidth) 150
-}
-if {!$mw(layout_found)} {
-	set mw(colwidth) $defmw(colwidth)
-	sql_exec quiet "insert into pga_layout values ('$mw(layout_name)',$mw(colcount),'$mw(colnames)','$mw(colwidth)')"
-	set mw(layout_found) 1
-}
-set mw(nrecs) [pg_result $pgres -numTuples]
-if {$mw(nrecs)>$pref(rows)} {
-	set msg "Only first $pref(rows) records from $mw(nrecs) have been loaded"
-	set mw(nrecs) $pref(rows)
+set mw($wn,colcount) [llength $attrlist]
+if {$mw($wn,updatable)} then {incr mw($wn,colcount) -1}
+set mw($wn,colnames) {}
+# In defmw($wn,colwidth) prepare mw($wn,colwidth) (in case that not layout_found)
+set defmw($wn,colwidth) {}
+for {set i 0} {$i<$mw($wn,colcount)} {incr i} {
+	lappend mw($wn,colnames) [lindex [lindex $attrlist [expr {$i+$shift}]] 0]
+	lappend defmw($wn,colwidth) 150
+}
+if {!$mw($wn,layout_found)} {
+	set mw($wn,colwidth) $defmw($wn,colwidth)
+	sql_exec quiet "insert into pga_layout values ('$mw($wn,layout_name)',$mw($wn,colcount),'$mw($wn,colnames)','$mw($wn,colwidth)')"
+	set mw($wn,layout_found) 1
+}
+set mw($wn,nrecs) [pg_result $pgres -numTuples]
+if {$mw($wn,nrecs)>$pref(rows)} {
+	set mw($wn,msg) "Only first $pref(rows) records from $mw($wn,nrecs) have been loaded"
+	set mw($wn,nrecs) $pref(rows)
 }
 set tagoid {}
 if {$pref(tvfont)=="helv"} {
-	set tvfont -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+	set tvfont $pref(font_normal)
 } else {
-	set tvfont -*-Clean-Medium-R-Normal-*-*-130-*-*-*-*-*
+	set tvfont $pref(font_fix)
 }
 # Computing column's left edge
 set posx 10
-for {set j 0} {$j<$mw(colcount)} {incr j} {
+for {set j 0} {$j<$mw($wn,colcount)} {incr j} {
 	set ledge($j) $posx
-	incr posx [expr [lindex $mw(colwidth) $j]+2]
-	set textwidth($j) [expr [lindex $mw(colwidth) $j]-5]
+	incr posx [expr {[lindex $mw($wn,colwidth) $j]+2}]
+	set textwidth($j) [expr {[lindex $mw($wn,colwidth) $j]-5}]
 }
 incr posx -6
 set posy 24
-mw_draw_headers
-set mw(updatekey) oid
-set mw(keylist) {}
-set mw(rowy) {24}
-set msg "Loading maximum $pref(rows) records ..."
-for {set i 0} {$i<$mw(nrecs)} {incr i} {
+mw_draw_headers $wn
+set mw($wn,updatekey) oid
+set mw($wn,keylist) {}
+set mw($wn,rowy) {24}
+set mw($wn,msg) "Loading maximum $pref(rows) records ..."
+set wupdatable $mw($wn,updatable)
+for {set i 0} {$i<$mw($wn,nrecs)} {incr i} {
 	set curtup [pg_result $pgres -getTuple $i]
-	if {$mw(updatable)} then {lappend mw(keylist) [lindex $curtup 0]}
-	for {set j 0} {$j<$mw(colcount)} {incr j} {
-		.mw.c create text $ledge($j) $posy -text [lindex $curtup [expr $j+$shift]] -tags [subst {r$i c$j q}] -anchor nw -font $tvfont -width $textwidth($j) -fill black
-	}
-	set bb [.mw.c bbox r$i]
-	incr posy [expr [lindex $bb 3]-[lindex $bb 1]]
-	lappend mw(rowy) $posy
-	.mw.c create line 0 [lindex $bb 3] $posx [lindex $bb 3] -fill gray -tags [subst {hgrid g$i}]
+	if {$wupdatable} then {lappend mw($wn,keylist) [lindex $curtup 0]}
+	for {set j 0} {$j<$mw($wn,colcount)} {incr j} {
+		$wn.c create text $ledge($j) $posy -text [lindex $curtup [expr {$j+$shift}]] -tags [subst {r$i c$j q}] -anchor nw -font $tvfont -width $textwidth($j) -fill black
+	}
+	set bb [$wn.c bbox r$i]
+	incr posy [expr {[lindex $bb 3]-[lindex $bb 1]}]
+	lappend mw($wn,rowy) $posy
+	$wn.c create line 0 [lindex $bb 3] $posx [lindex $bb 3] -fill gray -tags [subst {hgrid g$i}]
 	if {$i==25} {update; update idletasks}
 }
-after 3000 {set msg {} }
-set mw(last_rownum) $i
+after 3000 "set mw($wn,msg) {}"
+set mw($wn,last_rownum) $i
 # Defining position for input data
-mw_draw_new_record
+mw_draw_new_record $wn
 pg_result $pgres -clear
 sql_exec quiet "END"
-set mw(toprec) 0
-mw_set_scrollbar
-if {$mw(updatable)} then {
-	.mw.c bind q <Key> {mw_edit_text %A %K}
+set mw($wn,toprec) 0
+mw_set_scrollbar $wn
+if {$mw($wn,updatable)} then {
+	$wn.c bind q <Key> "mw_edit_text $wn %A %K"
 } else {
-	.mw.c bind q <Key> {}
+	$wn.c bind q <Key> {}
 }
-set mw(dirtyrec) 0
-#mw_draw_headers
-.mw.c raise header
+set mw($wn,dirtyrec) 0
+$wn.c raise header
+$wn.f1.b1 configure -state normal
 cursor_normal
 }
 
-proc {mw_set_scrollbar} {} {
+proc {mw_set_scrollbar} {wn} {
 global mw
-if {$mw(nrecs)==0} return;
-.mw.sb set [expr $mw(toprec)*1.0/$mw(nrecs)] [expr ($mw(toprec)+27.0)/$mw(nrecs)]
+if {$mw($wn,nrecs)==0} return;
+$wn.sb set [expr $mw($wn,toprec)*1.0/$mw($wn,nrecs)] [expr ($mw($wn,toprec)+27.0)/$mw($wn,nrecs)]
+}
+
+proc {mw_reload} {wn} {
+global mw
+set nq $mw($wn,query)
+if {($mw($wn,isaquery)) && ("$mw($wn,filter)$mw($wn,sortfield)"!="")} {
+	show_error "Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!"
+	set mw($wn,sortfield) {}
+	set mw($wn,filter) {}
+} else {
+	if {$mw($wn,filter)!=""} {
+		set nq "$mw($wn,query) where ($mw($wn,filter))"
+	} else {
+		set nq $mw($wn,query)
+	}
+	if {$mw($wn,sortfield)!=""} {
+		set nq "$nq order by $mw($wn,sortfield)"
+	}
+}
+if {[mw_save_new_record $wn]} {mw_select_records $wn $nq}
 }
 
-proc {mw_show_record} {row} {
-global mw msg
-set mw(errorsavingnew) 0
-if {$mw(newrec_fields)!=""} {
-	if {$row!=$mw(last_rownum)} {
-		if {![mw_save_new_record]} {
-					set mw(errorsavingnew) 1
+proc {mw_show_record} {wn row} {
+global mw
+set mw($wn,errorsavingnew) 0
+if {$mw($wn,newrec_fields)!=""} {
+	if {$row!=$mw($wn,last_rownum)} {
+		if {![mw_save_new_record $wn]} {
+					set mw($wn,errorsavingnew) 1
 					return
 				}
 	}
 }
-set y1 [lindex $mw(rowy) $row]
-set y2 [lindex $mw(rowy) [expr $row+1]]
+set y1 [lindex $mw($wn,rowy) $row]
+set y2 [lindex $mw($wn,rowy) [expr $row+1]]
 if {$y2==""} {set y2 [expr $y1+14]}
-.mw.c dtag hili hili
-.mw.c addtag hili withtag r$row
+$wn.c dtag hili hili
+$wn.c addtag hili withtag r$row
 # Making a rectangle arround the record
 set x 3
-foreach wi $mw(colwidth) {incr x [expr $wi+2]}
-.mw.c delete crtrec
-.mw.c create rectangle [expr -1-$mw(leftoffset)] $y1 [expr $x-$mw(leftoffset)] $y2 -fill #EEEEEE -outline {} -tags {q crtrec}
-.mw.c lower crtrec
+foreach wi $mw($wn,colwidth) {incr x [expr $wi+2]}
+$wn.c delete crtrec
+$wn.c create rectangle [expr -1-$mw($wn,leftoffset)] $y1 [expr $x-$mw($wn,leftoffset)] $y2 -fill #EEEEEE -outline {} -tags {q crtrec}
+$wn.c lower crtrec
 }
 
-proc {mw_start_edit} {id x y} {
-global mw msg
-if {!$mw(updatable)} return
-set mw(id_edited) $id
-set mw(dirtyrec) 0
-set mw(text_initial_value) [.mw.c itemcget $id -text]
-focus .mw.c
-.mw.c focus $id
-.mw.c icursor $id @$x,$y
-if {$mw(row_edited)==$mw(nrecs)} {
-	if {[.mw.c itemcget $id -text]=="*"} {
-		.mw.c itemconfigure $id -text ""
-		.mw.c icursor $id 0
+proc {mw_start_edit} {wn id x y} {
+global mw
+if {!$mw($wn,updatable)} return
+set mw($wn,id_edited) $id
+set mw($wn,dirtyrec) 0
+set mw($wn,text_initial_value) [$wn.c itemcget $id -text]
+focus $wn.c
+$wn.c focus $id
+$wn.c icursor $id @$x,$y
+if {$mw($wn,row_edited)==$mw($wn,nrecs)} {
+	if {[$wn.c itemcget $id -text]=="*"} {
+		$wn.c itemconfigure $id -text ""
+		$wn.c icursor $id 0
 	}
 }
 }
 
 proc {open_database} {} {
-global dbc host pport dbname username password newusername newpassword sdbname newdbname newhost newpport pref
+global dbc host pport dbname username password newusername newpassword sdbname newdbname newhost newpport pref pgsql
 cursor_clock
 if {$newusername!=""} {
 	set connres [catch {set newdbc [pg_connect -conninfo "host=$newhost port=$newpport dbname=$newdbname user=$newusername password=$newpassword"]} msg]
@@ -1559,7 +1700,8 @@ if {$newusername!=""} {
 }
 if {$connres} {
 	cursor_normal
-	show_error "Error connecting database\n$msg"
+	show_error "Error trying to connect to database \"$newdbname\" on host $newhost\n\nPostgreSQL error message: $msg"
+	return $msg
 } else {
 	catch {pg_disconnect $dbc}
 	set dbc $newdbc
@@ -1578,18 +1720,23 @@ if {$connres} {
 	tab_click .dw.tabTables
 	# Check for pga_ tables
 	foreach {table structure} { pga_queries {queryname varchar(64),querytype char(1),querycommand text} pga_forms {formname varchar(64),formsource text} pga_scripts {scriptname varchar(64),scriptsource text} pga_reports {reportname varchar(64),reportsource text,reportbody text,reportprocs text,reportoptions text}} {
-	set pgres [wpg_exec $dbc "select relname from pg_class where relname='$table'"]
-		if {[pg_result $pgres -numTuples]==0} {
+		set pgres [wpg_exec $dbc "select relname from pg_class where relname='$table'"]
+		if {$pgsql(status)!="PGRES_TUPLES_OK"} {
+			show_error "FATAL ERROR searching for PgAccess system tables : $pgsql(errmsg)\nStatus:$pgsql(status)"
+			catch {pg_disconnect $dbc}
+			exit
+		} elseif {[pg_result $pgres -numTuples]==0} {
 			pg_result $pgres -clear
 			sql_exec quiet "create table $table ($structure)"
-		sql_exec quiet "grant ALL on $table to PUBLIC"
+			sql_exec quiet "grant ALL on $table to PUBLIC"
 		}
-		catch { pg_result $pgres -clear }
+		catch {pg_result $pgres -clear}
 	}
 	# searching for autoexec script
 	wpg_select $dbc "select * from pga_scripts where scriptname ~* '^autoexec$'" recd {
 		eval $recd(scriptsource)
-	}    
+	}
+	return ""
 }
 }
 
@@ -1633,7 +1780,7 @@ rb_preview
 }
 
 proc {open_query} {how} {
-global dbc queryname mw queryoid sortfield filter
+global dbc queryname mw queryoid
 
 if {[.dw.lb curselection]==""} return;
 set queryname [.dw.lb get [.dw.lb curselection]]
@@ -1657,13 +1804,14 @@ if {$how=="design"} {
 	.qb.text1 insert end $qcmd
 } else {
 	if {$qtype=="S"} then {
-		set mw(query) [subst $qcmd]
-		set mw(updatable) 0
-		set mw(isaquery) 1
-		Window show .mw
-		wm title .mw "Query result: $queryname"
-		mw_load_layout $queryname
-		mw_select_records $mw(query)
+		set wn [mw_get_new_name]
+		set mw($wn,query) [subst $qcmd]
+		set mw($wn,updatable) 0
+		set mw($wn,isaquery) 1
+		mw_create_window
+		wm title $wn "Query result: $queryname"
+		mw_load_layout $wn $queryname
+		mw_select_records $wn $mw($wn,query)
 	} else {
 		set answ [tk_messageBox -title Warning -type yesno -message "This query is an action query!\n\n[string range $qcmd 0 30] ...\n\nDo you want to execute it?"]
 		if {$answ} {
@@ -1675,11 +1823,29 @@ if {$how=="design"} {
 }
 }
 
+proc {mw_free_variables} {wn} {
+global mw
+	foreach varname [array names mw $wn,*] {
+		unset mw($varname)
+	}
+}
+
+proc {mw_get_new_name} {} {
+global mw mwcount
+incr mwcount
+set wn .mw$mwcount
+set mw($wn,dirtyrec) 0
+set mw($wn,id_edited) {}
+set mw($wn,filter) {}
+set mw($wn,sortfield) {}
+return .mw$mwcount
+}
+
 proc {open_sequence} {objname} {
 global dbc seq_name seq_inc seq_start seq_minval seq_maxval
 Window show .sqf
 set flag 1
-wpg_select $dbc "select * from $objname" rec {
+wpg_select $dbc "select * from \"$objname\"" rec {
 	set flag 0
 	set seq_name $objname
 	set seq_inc $rec(increment_by)
@@ -1701,29 +1867,57 @@ if {$flag} {
 }
 
 proc {open_table} {objname} {
-global mw sortfield filter tablename
+global mw sortfield filter
 set sortfield {}
 set filter {}
-Window show .mw
-set tablename $objname
-mw_load_layout $objname
-set mw(query) "select oid,\"$tablename\".* from \"$objname\""
-set mw(updatable) 1
-set mw(isaquery) 0
-mw_select_records $mw(query)
-wm title .mw "Table viewer : $objname"
+set wn [mw_get_new_name]
+mw_create_window
+set mw($wn,tablename) $objname
+mw_load_layout $wn $objname
+set mw($wn,query) "select oid,\"$objname\".* from \"$objname\""
+set mw($wn,updatable) 1
+set mw($wn,isaquery) 0
+mw_select_records $wn $mw($wn,query)
+catch {wm title $wn "Table viewer : $objname"}
 }
 
 proc {open_view} {} {
 global mw
 set vn [get_dwlb_Selection]
 if {$vn==""} return;
-Window show .mw
-set mw(query) "select * from $vn"
-set mw(isaquery) 0
-set mw(updatable) 0
-mw_load_layout $vn
-mw_select_records $mw(query)
+set wn [mw_get_new_name]
+mw_create_window
+set mw($wn,query) "select * from \"$vn\""
+set mw($wn,isaquery) 0
+set mw($wn,updatable) 0
+mw_load_layout $wn $vn
+mw_select_records $wn $mw($wn,query)
+}
+
+proc {rename_column} {} {
+global dbc tiw
+	if {[string length [string trim $tiw(new_cn)]]==0} {
+		show_error "Field name not entered!"
+		return
+	}
+	set old_name [string trim [string range $tiw(old_cn) 0 31]]
+	set tiw(new_cn) [string trim $tiw(new_cn)]
+	if {$old_name == $tiw(new_cn)} {
+		show_error "New name is the same as the old one !"
+		return
+	}
+	foreach line [.tiw.lb get 0 end] {
+		if {[string trim [string range $line 0 31]]==$tiw(new_cn)} {
+			show_error "Colum name \"$tiw(new_cn)\" already exists in this table!"
+			return
+		}
+	}
+	if {[sql_exec noquiet "alter table \"$tiw(tablename)\" rename column \"$old_name\" to \"$tiw(new_cn)\""]} {
+		set temp $tiw(col_id)
+		.tiw.lb delete $temp $temp
+		.tiw.lb insert $temp "[format %-32.32s $tiw(new_cn)] [string range $tiw(old_cn) 33 end]"
+		Window destroy .rcw
+	}
 }
 
 proc {parameter} {msg} {
@@ -1824,7 +2018,7 @@ set obj [.ql.c find withtag hili]
 if {$obj==""} return
 # Is object a link ?
 if {[ql_get_tag_info $obj link]=="s"} {
-	if {[tk_messageBox -title WARNING -icon question -message "Remove link ?" -type yesno -default no]=="no"} return
+	if {[tk_messageBox -title WARNING -icon question -parent .ql -message "Remove link ?" -type yesno -default no]=="no"} return
 	set linkid [ql_get_tag_info $obj lkid]
 	set qlvar(links) [lreplace $qlvar(links) $linkid $linkid]
 	.ql.c delete links
@@ -1835,7 +2029,7 @@ if {[ql_get_tag_info $obj link]=="s"} {
 if {[ql_get_tag_info $obj res]=="f"} {
 	set col [ql_get_tag_info $obj col]
 	if {$col==""} return
-	if {[tk_messageBox -title WARNING -icon question -message "Remove field from result ?" -type yesno -default no]=="no"} return
+	if {[tk_messageBox -title WARNING -icon question -parent .ql -message "Remove field from result ?" -type yesno -default no]=="no"} return
 	set qlvar(resfields) [lreplace $qlvar(resfields) $col $col]
 	set qlvar(restables) [lreplace $qlvar(restables) $col $col]
 	set qlvar(rescriteria) [lreplace $qlvar(rescriteria) $col $col]
@@ -1846,7 +2040,7 @@ if {[ql_get_tag_info $obj res]=="f"} {
 set tablealias [ql_get_tag_info $obj tab]
 set tablename $qlvar(ali_$tablealias)
 if {"$tablename"==""} return
-if {[tk_messageBox -title WARNING -icon question -message "Remove table $tablename from query ?" -type yesno -default no]=="no"} return
+if {[tk_messageBox -title WARNING -icon question -parent .ql -message "Remove table $tablename from query ?" -type yesno -default no]=="no"} return
 for {set i [expr [llength $qlvar(restables)]-1]} {$i>=0} {incr i -1} {
 	if {"$tablename"==[lindex $qlvar(restables) $i]} {
 	   set qlvar(resfields) [lreplace $qlvar(resfields) $i $i]
@@ -1926,7 +2120,7 @@ proc {ql_dragstop} {x y} {
 global draginfo qlvar
 # when click Close, ql window is destroyed but event ButtonRelease-1 is fired
 if {![winfo exists .ql]} return;
-.ql configure -cursor top_left_arrow
+.ql configure -cursor left_ptr
 set este {}
 catch {set este $draginfo(obj)}
 if {$este==""} return
@@ -2026,7 +2220,7 @@ foreach link $qlvar(links) {
 }
 
 proc {ql_draw_lizzard} {} {
-global qlvar
+global qlvar pref
 .ql.c delete all
 set posx 20
 for {set it 0} {$it<$qlvar(ntables)} {incr it} {
@@ -2044,10 +2238,10 @@ for {set i $qlvar(xoffs)} {$i<10000} {incr i $qlvar(reswidth)} {
 # Make a marker for result panel offset calculations (due to panning)
 .ql.c create line $qlvar(xoffs) $qlvar(yoffs) $qlvar(xoffs) 500 -tags {resmarker resgrid}
 .ql.c create rectangle 0 $qlvar(yoffs) $qlvar(xoffs) 5000 -fill #EEEEEE -tags {reshdr}
-.ql.c create text 5 [expr 1+$qlvar(yoffs)] -text Field: -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags {reshdr}
-.ql.c create text 5 [expr 16+$qlvar(yoffs)] -text Table: -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags {reshdr}
-.ql.c create text 5 [expr 31+$qlvar(yoffs)] -text Sort: -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags {reshdr}
-.ql.c create text 5 [expr 46+$qlvar(yoffs)] -text Criteria: -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags {reshdr}
+.ql.c create text 5 [expr 1+$qlvar(yoffs)] -text Field: -anchor nw -font $pref(font_normal) -tags {reshdr}
+.ql.c create text 5 [expr 16+$qlvar(yoffs)] -text Table: -anchor nw -font $pref(font_normal) -tags {reshdr}
+.ql.c create text 5 [expr 31+$qlvar(yoffs)] -text Sort: -anchor nw -font $pref(font_normal) -tags {reshdr}
+.ql.c create text 5 [expr 46+$qlvar(yoffs)] -text Criteria: -anchor nw -font $pref(font_normal) -tags {reshdr}
 .ql.c bind mov <Button-1> {ql_dragstart %W %x %y}
 .ql.c bind mov <B1-Motion> {ql_dragit %W %x %y}
 bind .ql <ButtonRelease-1> {ql_dragstop %x %y}
@@ -2057,16 +2251,16 @@ bind .ql <Key-Delete> {ql_delete_object}
 }
 
 proc {ql_draw_res_panel} {} {
-global qlvar
+global qlvar pref
 # Compute the offset of the result panel due to panning
 set resoffset [expr [lindex [.ql.c bbox resmarker] 0]-$qlvar(xoffs)]
 .ql.c delete resp
 for {set i 0} {$i<[llength $qlvar(resfields)]} {incr i} {
-	.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 1+$qlvar(yoffs)] -text [lindex $qlvar(resfields) $i] -anchor nw -tags [subst {resf resp col$i}] -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
-	.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 16+$qlvar(yoffs)] -text $qlvar(ali_[lindex $qlvar(restables) $i]) -anchor nw -tags {resp rest} -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
-	.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 31+$qlvar(yoffs)] -text [lindex $qlvar(ressort) $i] -anchor nw -tags {resp sort} -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+	.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 1+$qlvar(yoffs)] -text [lindex $qlvar(resfields) $i] -anchor nw -tags [subst {resf resp col$i}] -font $pref(font_normal)
+	.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 16+$qlvar(yoffs)] -text $qlvar(ali_[lindex $qlvar(restables) $i]) -anchor nw -tags {resp rest} -font $pref(font_normal)
+	.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 31+$qlvar(yoffs)] -text [lindex $qlvar(ressort) $i] -anchor nw -tags {resp sort} -font $pref(font_normal)
 	if {[lindex $qlvar(rescriteria) $i]!=""} {
-		.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)]  [expr $qlvar(yoffs)+46+15*0] -anchor nw -text [lindex $qlvar(rescriteria) $i]  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -tags [subst {resp cr-c$i-r0}]
+		.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)]  [expr $qlvar(yoffs)+46+15*0] -anchor nw -text [lindex $qlvar(rescriteria) $i]  -font $pref(font_normal) -tags [subst {resp cr-c$i-r0}]
 	}
 }
 .ql.c raise reshdr
@@ -2075,17 +2269,17 @@ for {set i 0} {$i<[llength $qlvar(resfields)]} {incr i} {
 }
 
 proc {ql_draw_table} {it} {
-global qlvar
+global qlvar pref
 
 set posy 10
 set allbox [.ql.c bbox rect]
 if {$allbox==""} {set posx 10} else {set posx [expr 20+[lindex $allbox 2]]}
 set tablename $qlvar(tablename$it)
 set tablealias $qlvar(tablealias$it)
-.ql.c create text $posx $posy -text "$tablename" -anchor nw -tags [subst {tab$tablealias f-oid mov tableheader}] -font -Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-*
+.ql.c create text $posx $posy -text "$tablename" -anchor nw -tags [subst {tab$tablealias f-oid mov tableheader}] -font $pref(font_bold)
 incr posy 16
 foreach fld $qlvar(tablestruct$it) {
-   .ql.c create text $posx $posy -text $fld -fill #010101 -anchor nw -tags [subst {f-$fld tab$tablealias mov}] -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+   .ql.c create text $posx $posy -text $fld -fill #010101 -anchor nw -tags [subst {f-$fld tab$tablealias mov}] -font $pref(font_normal)
    incr posy 14
 }
 set reg [.ql.c bbox tab$tablealias]
@@ -2162,12 +2356,12 @@ if {[ql_get_tag_info $obj res]!="f"} return
 }
 
 proc {ql_show_sql} {} {
-global qlvar
+global qlvar pref
 
 set sqlcmd [ql_compute_sql]
 .ql.c delete sqlpage
 .ql.c create rectangle 0 0 2000 [expr $qlvar(yoffs)-1] -fill #ffffff -tags {sqlpage}
-.ql.c create text 10 10 -text $sqlcmd -anchor nw -width 550 -tags {sqlpage} -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+.ql.c create text 10 10 -text $sqlcmd -anchor nw -width 550 -tags {sqlpage} -font $pref(font_normal)
 .ql.c bind sqlpage <Button-1> {.ql.c delete sqlpage}
 }
 
@@ -2190,7 +2384,7 @@ set qlvar(ressort) [lreplace $qlvar(ressort) $col $col $cum]
 }
 
 proc {qlc_click} {x y w} {
-global qlvar
+global qlvar pref
 set qlvar(panstarted) 0
 if {$w==".ql.c"} {
 	set canpan 1
@@ -2214,7 +2408,7 @@ set resoffset [expr [lindex [.ql.c bbox resmarker] 0]-$qlvar(xoffs)]
 if {$isedit} {
 	set qlvar(rescriteria) [lreplace $qlvar(rescriteria) $qlvar(critcol) $qlvar(critcol) $qlvar(critval)]
 	.ql.c delete cr-c$qlvar(critcol)-r$qlvar(critrow)
-	.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$qlvar(critcol)*$qlvar(reswidth)] [expr $qlvar(yoffs)+46+15*$qlvar(critrow)] -anchor nw -text $qlvar(critval) -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags [subst {resp cr-c$qlvar(critcol)-r$qlvar(critrow)}]
+	.ql.c create text [expr $resoffset+4+$qlvar(xoffs)+$qlvar(critcol)*$qlvar(reswidth)] [expr $qlvar(yoffs)+46+15*$qlvar(critrow)] -anchor nw -text $qlvar(critval) -font $pref(font_normal) -tags [subst {resp cr-c$qlvar(critcol)-r$qlvar(critrow)}]
 	set qlvar(critedit) 0
 }
 catch {destroy .ql.entc}
@@ -2226,7 +2420,7 @@ set nx [expr $col*$qlvar(reswidth)+8+$qlvar(xoffs)+$resoffset]
 set ny [expr $qlvar(yoffs)+76]
 # Get the old criteria value
 set qlvar(critval) [lindex $qlvar(rescriteria) $col]
-entry .ql.entc -textvar qlvar(critval) -borderwidth 0 -background #FFFFFF -highlightthickness 0 -selectborderwidth 0  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+entry .ql.entc -textvar qlvar(critval) -borderwidth 0 -background #FFFFFF -highlightthickness 0 -selectborderwidth 0  -font $pref(font_normal)
 place .ql.entc -x $nx -y $ny -height 14
 focus .ql.entc
 bind .ql.entc <Button-1> {set qlvar(panstarted) 0}
@@ -2236,18 +2430,18 @@ set qlvar(critedit) 1
 }
 
 proc {rb_add_field} {} {
-global rbvar
+global rbvar pref
 set fldname [.rb.lb get [.rb.lb curselection]]
-set newid [.rb.c create text $rbvar(xf_auto) [expr $rbvar(y_rpthdr)+5] -text $fldname -tags [subst {t_l mov ro}] -anchor nw -font -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-*]
-.rb.c create text $rbvar(xf_auto) [expr $rbvar(y_pghdr)+5] -text $fldname -tags [subst {f-$fldname t_f rg_detail mov ro}] -anchor nw -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*
+set newid [.rb.c create text $rbvar(xf_auto) [expr $rbvar(y_rpthdr)+5] -text $fldname -tags [subst {t_l mov ro}] -anchor nw -font $pref(font_normal)]
+.rb.c create text $rbvar(xf_auto) [expr $rbvar(y_pghdr)+5] -text $fldname -tags [subst {f-$fldname t_f rg_detail mov ro}] -anchor nw -font $pref(font_normal)
 set bb [.rb.c bbox $newid]
 incr rbvar(xf_auto) [expr 5+[lindex $bb 2]-[lindex $bb 0]]
 }
 
 proc {rb_add_label} {} {
-global rbvar
+global rbvar pref
 set fldname $rbvar(labeltext)
-set newid [.rb.c create text $rbvar(xl_auto) [expr $rbvar(y_rpthdr)+5] -text $fldname -tags [subst {t_l mov ro}] -anchor nw -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*]
+set newid [.rb.c create text $rbvar(xl_auto) [expr $rbvar(y_rpthdr)+5] -text $fldname -tags [subst {t_l mov ro}] -anchor nw -font $pref(font_normal)]
 set bb [.rb.c bbox $newid]
 incr rbvar(xl_auto) [expr 5+[lindex $bb 2]-[lindex $bb 0]]
 }
@@ -2258,7 +2452,7 @@ global rbvar
 }
 
 proc {rb_delete_object} {} {
-if {[tk_messageBox -title Warning -message "Delete current report object?" -type yesno -default no]=="no"} return;
+if {[tk_messageBox -title Warning -parent .rb -message "Delete current report object?" -type yesno -default no]=="no"} return;
 .rb.c delete hili
 }
 
@@ -2331,7 +2525,7 @@ proc {rb_dragstop} {x y} {
 global draginfo rbvar
 # when click Close, ql window is destroyed but event ButtonRelease-1 is fired
 if {![winfo exists .rb]} return;
-.rb configure -cursor top_left_arrow
+.rb configure -cursor left_ptr
 set este {}
 catch {set este $draginfo(obj)}
 if {$este==""} return
@@ -2478,7 +2672,7 @@ wpg_select $dbc "select * from \"$rbvar(tablename)\"" rec {
 proc {rb_print_report} {} {
 set bb [.rpv.fr.c bbox all]
 .rpv.fr.c postscript -file "pgaccess-report.ps" -width [expr 10+[lindex $bb 2]-[lindex $bb 0]] -height [expr 10+[lindex $bb 3]-[lindex $bb 1]]
-tk_messageBox -title Information -message "The printed image in Postscript is in the file pgaccess-report.ps"
+tk_messageBox -title Information -parent .rb -message "The printed image in Postscript is in the file pgaccess-report.ps"
 }
 
 proc {rb_save_report} {} {
@@ -2502,13 +2696,13 @@ proc {save_pref} {} {
 global pref
 catch {
 	set fid [open "~/.pgaccessrc" w]
-	foreach {opt val} [array get pref] { puts $fid "$opt $val" }
+	foreach {opt val} [array get pref] { puts $fid "$opt {$val}" }
 	close $fid
 }
 }
 
 proc {show_error} {emsg} {
-   tk_messageBox -title Error -icon error -message $emsg
+   bell ; tk_messageBox -title Error -icon error -message $emsg
 }
 
 proc {show_table_information} {tblname} {
@@ -2563,21 +2757,21 @@ return 0
 }
 
 proc {tab_click} {w} {
-global dbc tablist activetab
+global dbc tablist activetab pref
 if {$dbc==""} return;
 set curtab [$w cget -text]
 #if {$activetab==$curtab} return;
 .dw.btndesign configure -state disabled
 if {$activetab!=""} {
 	place .dw.tab$activetab -x 10
-	.dw.tab$activetab configure -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*
+	.dw.tab$activetab configure -font $pref(font_normal)
 }
-$w configure -font -Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-*
+$w configure -font $pref(font_bold)
 place $w -x 7
 place .dw.lmask -x 80 -y [expr 86+25*[lsearch -exact $tablist $curtab]]
 set activetab $curtab
 # Tabs where button Design is enabled
-if {[lsearch {Scripts Queries Reports Forms} $activetab]!=-1} {
+if {[lsearch {Scripts Queries Reports Forms Users} $activetab]!=-1} {
 	.dw.btndesign configure -state normal
 }
 .dw.lb delete 0 end
@@ -2626,10 +2820,13 @@ set sdbname $dbname
 }
 
 proc {main} {argc argv} {
-global pref newdbname newpport newhost newusername newpassword dbc
-load libpgtcl.so
+global pref newdbname newpport newhost newusername newpassword dbc tcl_platform
+if {[string toupper $tcl_platform(platform)]=="WINDOWS"} {
+	load libpgtcl.dll
+} else {
+	load libpgtcl.so
+}
 catch {draw_tabs}
-load_pref
 set newusername {}
 set newpassword {}
 if {$argc>0} {
@@ -2642,7 +2839,14 @@ if {$argc>0} {
 	set newhost $pref(lasthost)
 	set newpport $pref(lastport)
 	catch {set newusername $pref(lastusername)}
-	open_database
+	if {[set openmsg [open_database]]!=""} {
+		if {[regexp "no password supplied" $openmsg]} {
+			Window show .dbod
+			focus .dbod.epassword
+			wm transient .dbod .dw
+		}
+	}
+	
 }
 wm protocol .dw WM_DELETE_WINDOW {
 	catch {pg_disconnect $dbc}
@@ -2679,17 +2883,10 @@ global vTcl
 	}
 }
 
-#################################
-# VTCL GENERATED GUI PROCEDURES
-#
-
 proc vTclWindow. {base} {
 	if {$base == ""} {
 		set base .
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	wm focusmodel $base passive
 	wm geometry $base 1x1+0+0
 	wm maxsize $base 1009 738
@@ -2698,9 +2895,6 @@ proc vTclWindow. {base} {
 	wm resizable $base 1 1
 	wm withdraw $base
 	wm title $base "vt.tcl"
-	###################
-	# SETTING GEOMETRY
-	###################
 }
 
 proc vTclWindow.about {base} {
@@ -2710,9 +2904,6 @@ proc vTclWindow.about {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 471x177+168+243
@@ -2722,18 +2913,15 @@ proc vTclWindow.about {base} {
 	wm resizable $base 1 1
 	wm title $base "About"
 	label $base.l1  -borderwidth 3 -font -Adobe-Helvetica-Bold-R-Normal-*-*-180-*-*-*-*-*  -relief ridge -text PgAccess 
-	label $base.l2  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -relief groove  -text {A Tcl/Tk interface to
+	label $base.l2  -relief groove  -text {A Tcl/Tk interface to
 PostgreSQL
 by Constantin Teodorescu} 
-	label $base.l3  -borderwidth 0  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -relief sunken -text {vers 0.91}
-	label $base.l4  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -relief groove  -text {You will always get the latest version at:
+	label $base.l3  -borderwidth 0 -relief sunken -text {v 0.93}
+	label $base.l4  -relief groove  -text {You will always get the latest version at:
 http://www.flex.ro/pgaccess
 
 Suggestions : teo@flex.ro} 
-	button $base.b1  -borderwidth 1 -command {Window destroy .about}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text Ok 
-	###################
-	# SETTING GEOMETRY
-	###################
+	button $base.b1  -borderwidth 1 -command {Window destroy .about} -text Ok 
 	place $base.l1  -x 10 -y 10 -width 196 -height 103 -anchor nw -bordermode ignore 
 	place $base.l2  -x 10 -y 115 -width 198 -height 55 -anchor nw -bordermode ignore 
 	place $base.l3  -x 145 -y 80 -anchor nw -bordermode ignore 
@@ -2748,11 +2936,8 @@ proc vTclWindow.dbod {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel \
-		-cursor top_left_arrow 
+		-cursor left_ptr
 	wm focusmodel $base passive
 	wm geometry $base 282x180+358+333
 	wm maxsize $base 1009 738
@@ -2762,7 +2947,7 @@ proc vTclWindow.dbod {base} {
 	wm deiconify $base
 	wm title $base "Open database"
 	label $base.lhost \
-		-borderwidth 0 -relief raised -text Host 
+		-borderwidth 0 -text Host 
 	entry $base.ehost \
 		-background #fefefe -borderwidth 1 -highlightthickness 1 \
 		-selectborderwidth 0 -textvariable newhost 
@@ -2770,7 +2955,7 @@ proc vTclWindow.dbod {base} {
 		focus .dbod.epport
 	}
 	label $base.lport \
-		-borderwidth 0 -relief raised -text Port 
+		-borderwidth 0 -text Port 
 	entry $base.epport \
 		-background #fefefe -borderwidth 1 -highlightthickness 1 \
 		-selectborderwidth 0 -textvariable newpport 
@@ -2778,7 +2963,7 @@ proc vTclWindow.dbod {base} {
 		focus .dbod.edbname
 	}
 	label $base.ldbname \
-		-borderwidth 0 -relief raised -text Database 
+		-borderwidth 0 -text Database 
 	entry $base.edbname \
 		-background #fefefe -borderwidth 1 -highlightthickness 1 \
 		-selectborderwidth 0 -textvariable newdbname 
@@ -2787,7 +2972,7 @@ proc vTclWindow.dbod {base} {
 	.dbod.eusername selection range 0 end
 	}
 	label $base.lusername \
-		-borderwidth 0 -relief raised -text Username 
+		-borderwidth 0 -text Username 
 	entry $base.eusername \
 		-background #fefefe -borderwidth 1 -highlightthickness 1 \
 		-selectborderwidth 0 -textvariable newusername 
@@ -2795,7 +2980,7 @@ proc vTclWindow.dbod {base} {
 		focus .dbod.epassword
 	}
 	label $base.lpassword \
-		-borderwidth 0 -relief raised -text Password 
+		-borderwidth 0 -text Password 
 	entry $base.epassword \
 		-background #fefefe -borderwidth 1 -highlightthickness 1 \
 		-selectborderwidth 0 -textvariable newpassword -show "*"
@@ -2803,16 +2988,12 @@ proc vTclWindow.dbod {base} {
 		focus .dbod.opbtu
 	}
 	button $base.opbtu \
-		-borderwidth 1 -command open_database -padx 9 -pady 3 -text Open 
+		-borderwidth 1 -command open_database -text Open 
 	bind $base.opbtu <Key-Return> {
 		open_database
 	}
 	button $base.canbut \
-		-borderwidth 1 -command {Window hide .dbod} -padx 9 -pady 3 \
-		-text Cancel 
-	###################
-	# SETTING GEOMETRY
-	###################
+		-borderwidth 1 -command {Window hide .dbod} -text Cancel 
 	place $base.lhost \
 		-x 35 -y 7 -anchor nw -bordermode ignore 
 	place $base.ehost \
@@ -2840,17 +3021,15 @@ proc vTclWindow.dbod {base} {
 }
 
 proc vTclWindow.dw {base} {
+global pref
 	if {$base == ""} {
 		set base .dw
 	}
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel \
-		-background #efefef -cursor top_left_arrow 
+		-background #efefef -cursor left_ptr
 	wm focusmodel $base passive
 	wm geometry $base 322x355+96+172
 	wm maxsize $base 1009 738
@@ -2860,43 +3039,32 @@ proc vTclWindow.dw {base} {
 	wm deiconify $base
 	wm title $base "PostgreSQL access"
 	label $base.labframe \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-relief raised 
 	listbox $base.lb \
 		-background #fefefe \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
 		-foreground black -highlightthickness 0 -selectborderwidth 0 \
 		-yscrollcommand {.dw.sb set} 
 	bind $base.lb <Double-Button-1> {
 		cmd_Open
 	}
 	button $base.btnnew \
-		-borderwidth 1 -command cmd_New \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text New 
+		-borderwidth 1 -command cmd_New -text New 
 	button $base.btnopen \
-		-borderwidth 1 -command cmd_Open \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text Open 
+		-borderwidth 1 -command cmd_Open -text Open 
 	button $base.btndesign \
-		-borderwidth 1 -command cmd_Design \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text Design 
+		-borderwidth 1 -command cmd_Design -text Design 
 	label $base.lmask \
 		-borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-		-relief raised -text {  } 
+		-text {  } 
 	label $base.label22 \
 		-borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-relief raised 
 	menubutton $base.menubutton23 \
-		-borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
+		-borderwidth 1 -font $pref(font_normal) \
 		-menu .dw.menubutton23.01 -padx 4 -pady 3 -text Database 
 	menu $base.menubutton23.01 \
-		-borderwidth 1 -cursor {} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -tearoff 0 
+		-borderwidth 1 -font $pref(font_normal) \
+		-tearoff 0 
 	$base.menubutton23.01 add command \
 		\
 		-command {
@@ -2905,7 +3073,7 @@ set newhost $host
 set newpport $pport
 focus .dbod.edbname
 .dbod.edbname selection range 0 end} \
-		-label Open 
+		-label Open -font $pref(font_normal)
 	$base.menubutton23.01 add command \
 		\
 		-command {.dw.lb delete 0 end
@@ -2931,22 +3099,20 @@ set sdbname {}} \
 save_pref
 exit} -label Exit 
 	label $base.lshost \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-relief groove -text localhost -textvariable host 
 	label $base.lsdbname \
-		-anchor w -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
+		-anchor w \
 		-relief groove -textvariable sdbname 
 	scrollbar $base.sb \
 		-borderwidth 1 -command {.dw.lb yview} -orient vert 
 	menubutton $base.mnob \
 		-borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
-		-menu .dw.mnob.m -padx 4 -pady 3 -text Object 
+		-menu .dw.mnob.m -font $pref(font_normal) -text Object 
 	menu $base.mnob.m \
-		-borderwidth 1 -cursor {} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -tearoff 0 
+		-borderwidth 1 -font $pref(font_normal) \
+		-tearoff 0 
 	$base.mnob.m add command \
-		-command cmd_New -label New 
+		-command cmd_New -font $pref(font_normal) -label New 
 	$base.mnob.m add command \
 		-command {cmd_Delete } -label Delete 
 	$base.mnob.m add command \
@@ -2955,11 +3121,10 @@ exit} -label Exit
 		-command cmd_Information -label Information 
 	menubutton $base.mhelp \
 		-borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
-		-menu .dw.mhelp.m -padx 4 -pady 3 -text Help 
+		-menu .dw.mhelp.m -font $pref(font_normal) -text Help 
 	menu $base.mhelp.m \
-		-borderwidth 1 -cursor {} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -tearoff 0 
+		-borderwidth 1 -font $pref(font_normal) \
+		-tearoff 0 
 	$base.mhelp.m add command \
 		-label Contents 
 	$base.mhelp.m add command \
@@ -2967,13 +3132,10 @@ exit} -label Exit
 	$base.mhelp.m add separator
 	$base.mhelp.m add command \
 		-command {Window show .about} -label About 
-	###################
-	# SETTING GEOMETRY
-	###################
 	place $base.labframe \
 		-x 80 -y 30 -width 236 -height 300 -anchor nw -bordermode ignore 
 	place $base.lb \
-		-x 90 -y 75 -width 205 -height 248 -anchor nw -bordermode ignore 
+		-x 90 -y 75 -width 205 -height 243 -anchor nw -bordermode ignore 
 	place $base.btnnew \
 		-x 90 -y 40 -width 60 -height 25 -anchor nw -bordermode ignore 
 	place $base.btnopen \
@@ -2991,7 +3153,7 @@ exit} -label Exit
 	place $base.lsdbname \
 		-x 95 -y 335 -width 223 -height 20 -anchor nw -bordermode ignore 
 	place $base.sb \
-		-x 295 -y 73 -width 18 -height 252 -anchor nw -bordermode ignore 
+		-x 295 -y 74 -width 18 -height 245 -anchor nw -bordermode ignore 
 	place $base.mnob \
 		-x 70 -y 2 -width 44 -height 19 -anchor nw -bordermode ignore 
 	place $base.mhelp \
@@ -3005,9 +3167,6 @@ proc vTclWindow.fw {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 306x288+233+130
@@ -3016,11 +3175,11 @@ proc vTclWindow.fw {base} {
 	wm overrideredirect $base 0
 	wm resizable $base 0 0
 	wm title $base "Function"
-	label $base.l1  -borderwidth 0  -relief raised -text Name 
+	label $base.l1  -borderwidth 0 -text Name 
 	entry $base.e1  -background #fefefe -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable funcname 
-	label $base.l2  -borderwidth 0  -relief raised -text Parameters 
+	label $base.l2  -borderwidth 0 -text Parameters 
 	entry $base.e2  -background #fefefe -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable funcpar 
-	label $base.l3  -borderwidth 0  -relief raised -text Returns 
+	label $base.l3  -borderwidth 0 -text Returns 
 	entry $base.e3  -background #fefefe -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable funcret 
 	text $base.text1  -background #fefefe -borderwidth 1  -highlightthickness 1 -selectborderwidth 0 -wrap word 
 	button $base.okbtn  -borderwidth 1  -command {
@@ -3038,11 +3197,8 @@ proc vTclWindow.fw {base} {
 				}
 								
 			}
-		}  -padx 9  -pady 3 -state disabled -text Define 
-	button $base.cancelbtn  -borderwidth 1 -command {Window destroy .fw}  -padx 9  -pady 3 -text Close 
-	###################
-	# SETTING GEOMETRY
-	###################
+		}  -state disabled -text Define 
+	button $base.cancelbtn  -borderwidth 1 -command {Window destroy .fw} -text Close 
 	place $base.l1  -x 15 -y 18 -anchor nw -bordermode ignore 
 	place $base.e1  -x 95 -y 15 -width 198 -height 22 -anchor nw -bordermode ignore 
 	place $base.l2  -x 15 -y 48 -anchor nw -bordermode ignore 
@@ -3061,9 +3217,6 @@ proc vTclWindow.iew {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 287x151+259+304
@@ -3072,11 +3225,11 @@ proc vTclWindow.iew {base} {
 	wm overrideredirect $base 0
 	wm resizable $base 0 0
 	wm title $base "Import-Export table"
-	label $base.l1  -borderwidth 0  -relief raised -text {Table name} 
+	label $base.l1  -borderwidth 0 -text {Table name} 
 	entry $base.e1  -background #fefefe -borderwidth 1 -textvariable ie_tablename 
-	label $base.l2  -borderwidth 0  -relief raised -text {File name} 
+	label $base.l2  -borderwidth 0 -text {File name} 
 	entry $base.e2  -background #fefefe -borderwidth 1 -textvariable ie_filename 
-	label $base.l3  -borderwidth 0  -relief raised -text {Field delimiter} 
+	label $base.l3  -borderwidth 0 -text {Field delimiter} 
 	entry $base.e3  -background #fefefe -borderwidth 1 -textvariable ie_delimiter 
 	button $base.expbtn  -borderwidth 1  -command {if {$ie_tablename==""} {
 	show_error "You have to supply a table name!"
@@ -3101,132 +3254,101 @@ proc vTclWindow.iew {base} {
 	set sqlcmd "COPY $ie_tablename $sup2 $oper '$ie_filename'$sup"
 	cursor_clock
 	if {[sql_exec noquiet $sqlcmd]} {
-		tk_messageBox -title Information -message "Operation completed!"
+		tk_messageBox -title Information -parent .iew -message "Operation completed!"
 		Window destroy .iew
 	}
 	cursor_normal
-}}  -padx 9  -pady 3 -text Export 
-	button $base.cancelbtn  -borderwidth 1 -command {Window destroy .iew}  -padx 9  -pady 3 -text Cancel 
+}}  -text Export 
+	button $base.cancelbtn  -borderwidth 1 -command {Window destroy .iew} -text Cancel 
 	checkbutton $base.oicb  -borderwidth 1  -text {with OIDs} -variable oicb 
-	###################
-	# SETTING GEOMETRY
-	###################
 	place $base.l1  -x 25 -y 15 -anchor nw -bordermode ignore 
-	place $base.e1  -x 115 -y 10 -anchor nw -bordermode ignore 
+	place $base.e1  -x 115 -y 10 -height 22 -anchor nw -bordermode ignore 
 	place $base.l2  -x 25 -y 45 -anchor nw -bordermode ignore 
-	place $base.e2  -x 115 -y 40 -anchor nw -bordermode ignore 
+	place $base.e2  -x 115 -y 40 -height 22 -anchor nw -bordermode ignore 
 	place $base.l3  -x 25 -y 75 -height 18 -anchor nw -bordermode ignore 
 	place $base.e3  -x 115 -y 74 -width 33 -height 22 -anchor nw -bordermode ignore 
-	place $base.expbtn  -x 60 -y 110 -anchor nw -bordermode ignore 
-	place $base.cancelbtn  -x 155 -y 110 -anchor nw -bordermode ignore 
+	place $base.expbtn  -x 60 -y 110 -height 25 -width 75 -anchor nw -bordermode ignore 
+	place $base.cancelbtn  -x 155 -y 110 -height 25 -width 75 -anchor nw -bordermode ignore 
 	place $base.oicb  -x 170 -y 75 -anchor nw -bordermode ignore
 }
 
-proc {mw_canvas_paste} {x y} {
+proc {mw_canvas_paste} {wn x y} {
 	   global mw
-	   .mw.c insert $mw(id_edited) insert [selection get]
-	   set mw(dirtyrec) 1
+	   $wn.c insert $mw($wn,id_edited) insert [selection get]
+	   set mw($wn,dirtyrec) 1
 }
 
-proc vTclWindow.mw {base} {
-	if {$base == ""} {
-		set base .mw
-	}
+proc {mw_create_window} {} {
+global mwcount
+	set base .mw$mwcount
+	set wn .mw$mwcount
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
-	wm geometry $base 550x400+5+5
+	wm geometry $base 550x400
 	wm maxsize $base 1009 738
 	wm minsize $base 550 400
 	wm overrideredirect $base 0
 	wm resizable $base 1 1
 	wm deiconify $base
 	wm title $base "Table browser"
-	bind $base <Key-Delete> {
-		mw_delete_record
-	}
+	bind $base <Key-Delete> "mw_delete_record $wn"
 	frame $base.f1  -borderwidth 2 -height 75 -relief groove -width 125 
-	label $base.f1.l1  -borderwidth 0  -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*  -relief raised -text {Sort field} 
-	entry $base.f1.e1  -background #fefefe -borderwidth 1 -width 14  -highlightthickness 1 -textvariable sortfield
-	label $base.f1.lb1  -borderwidth 0 -relief raised -text {     } 
-	label $base.f1.l2  -background #dfdfdf -borderwidth 0  -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*  -relief raised -text {Filter conditions} 
-	entry $base.f1.e2  -background #fefefe -borderwidth 1  -highlightthickness 1 -textvariable filter
-	button $base.f1.b1  -borderwidth 1  -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9  -pady 3 -text Close -command {
-if {[mw_save_new_record]} {
-	.mw.c delete rows
-	.mw.c delete header
+	label $base.f1.l1  -borderwidth 0 -text {Sort field} 
+	entry $base.f1.e1  -background #fefefe -borderwidth 1 -width 14  -highlightthickness 1 -textvariable mw($wn,sortfield)
+	bind $base.f1.e1 <Key-Return> "mw_reload $wn"	
+	bind $base.f1.e1 <Key-KP_Enter> "mw_reload $wn"	
+	label $base.f1.lb1  -borderwidth 0 -text {     } 
+	label $base.f1.l2  -borderwidth 0 -text {Filter conditions} 
+	entry $base.f1.e2  -background #fefefe -borderwidth 1  -highlightthickness 1 -textvariable mw($wn,filter)
+	bind $base.f1.e2 <Key-Return> "mw_reload $wn"	
+	bind $base.f1.e2 <Key-KP_Enter> "mw_reload $wn"	
+	button $base.f1.b1  -borderwidth 1 -text Close -command "
+if {\[mw_save_new_record $wn\]} {
+	$wn.c delete rows
+	$wn.c delete header
 	set sortfield {}
 	set filter {}
-	Window destroy .mw
+	Window destroy $wn
+	mw_free_variables $wn
 }
-	}
-	button $base.f1.b2  -borderwidth 1  -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9  -pady 3 -text Reload -command {
-set nq $mw(query)
-if {($mw(isaquery)) && ("$filter$sortfield"!="")} {
-	show_error "Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!"
-	set sortfield {}
-	set filter {}
-} else {
-	if {$filter!=""} {
-		set nq "$mw(query) where ($filter)"
-	} else {
-		set nq $mw(query)
-	}
-	if {$sortfield!=""} {
-		set nq "$nq order by $sortfield"
-	}
-}
-if {[mw_save_new_record]} {mw_select_records $nq}
-	}
+	"
+	button $base.f1.b2  -borderwidth 1 -text Reload -command "mw_reload $wn"
 	frame $base.frame20  -borderwidth 2 -height 75 -relief groove -width 125 
-	button $base.frame20.01  -borderwidth 1 -padx 9 -pady 3 -text < -command {mw_pan_right}
-	label $base.frame20.02  -anchor w -borderwidth 1  -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -height 1  -relief sunken -text {} -textvariable msg 
-	button $base.frame20.03  -borderwidth 1 -padx 9 -pady 3 -text > -command {mw_pan_left}
+	button $base.frame20.01  -borderwidth 1 -text < -command "mw_pan_right $wn"
+	label $base.frame20.02  -anchor w -borderwidth 1 -height 1  -relief sunken -text {} -textvariable mw($wn,msg) 
+	button $base.frame20.03  -borderwidth 1 -text > -command "mw_pan_left $wn"
 	canvas $base.c  -background #fefefe -borderwidth 2 -height 207 -highlightthickness 0  -relief ridge -selectborderwidth 0 -takefocus 1 -width 295 
-	scrollbar $base.sb  -borderwidth 1 -orient vert -width 12  -command mw_scroll_window
-	bind $base.c <Button-1> {
-		mw_canvas_click %x %y
-	}
-	bind $base.c <Button-2> {
-		mw_canvas_paste %x %y
-	}
-	bind $base.c <Button-3> {
-		if {[mw_exit_edit]} {mw_save_new_record}
-	}
-	###################
-	# SETTING GEOMETRY
-	###################
-	pack $base.f1  -in .mw -anchor center -expand 0 -fill x -side top 
-	pack $base.f1.l1  -in .mw.f1 -anchor center -expand 0 -fill none -side left 
-	pack $base.f1.e1  -in .mw.f1 -anchor center -expand 0 -fill none -side left 
-	pack $base.f1.lb1  -in .mw.f1 -anchor center -expand 0 -fill none -side left 
-	pack $base.f1.l2  -in .mw.f1 -anchor center -expand 0 -fill none -side left 
-	pack $base.f1.e2  -in .mw.f1 -anchor center -expand 0 -fill none -side left 
-	pack $base.f1.b1  -in .mw.f1 -anchor center -expand 0 -fill none -side right 
-	pack $base.f1.b2  -in .mw.f1 -anchor center -expand 0 -fill none -side right 
-	pack $base.frame20  -in .mw -anchor s -expand 0 -fill x -side bottom 
-	pack $base.frame20.01  -in .mw.frame20 -anchor center -expand 0 -fill none -side left 
-	pack $base.frame20.02  -in .mw.frame20 -anchor center -expand 1 -fill x -side left 
-	pack $base.frame20.03  -in .mw.frame20 -anchor center -expand 0 -fill none -side right 
-	pack $base.c  -in .mw -anchor w -expand 1 -fill both -side left 
-	pack $base.sb  -in .mw -anchor e -expand 0 -fill y -side right
+	scrollbar $base.sb  -borderwidth 1 -orient vert -width 12  -command "mw_scroll_window $wn"
+	bind $base.c <Button-1> "mw_canvas_click $wn %x %y"
+	bind $base.c <Button-2> "mw_canvas_paste $wn %x %y"
+	bind $base.c <Button-3> "if {[mw_exit_edit $wn]} \"mw_save_new_record $wn\""
+	pack $base.f1  -in $wn -anchor center -expand 0 -fill x -side top 
+	pack $base.f1.l1  -in $wn.f1 -anchor center -expand 0 -fill none -side left 
+	pack $base.f1.e1  -in $wn.f1 -anchor center -expand 0 -fill none -side left 
+	pack $base.f1.lb1  -in $wn.f1 -anchor center -expand 0 -fill none -side left 
+	pack $base.f1.l2  -in $wn.f1 -anchor center -expand 0 -fill none -side left 
+	pack $base.f1.e2  -in $wn.f1 -anchor center -expand 0 -fill none -side left 
+	pack $base.f1.b1  -in $wn.f1 -anchor center -expand 0 -fill none -side right 
+	pack $base.f1.b2  -in $wn.f1 -anchor center -expand 0 -fill none -side right 
+	pack $base.frame20  -in $wn -anchor s -expand 0 -fill x -side bottom 
+	pack $base.frame20.01  -in $wn.frame20 -anchor center -expand 0 -fill none -side left 
+	pack $base.frame20.02  -in $wn.frame20 -anchor center -expand 1 -fill x -side left 
+	pack $base.frame20.03  -in $wn.frame20 -anchor center -expand 0 -fill none -side right 
+	pack $base.c -in $wn -anchor w -expand 1 -fill both -side left 
+	pack $base.sb -in $wn -anchor e -expand 0 -fill y -side right
 }
 
 proc vTclWindow.nt {base} {
+global pref
     if {$base == ""} {
         set base .nt
     }
     if {[winfo exists $base]} {
         wm deiconify $base; return
     }
-    ###################
-    # CREATING WIDGETS
-    ###################
     toplevel $base -class Toplevel
     wm focusmodel $base passive
     wm geometry $base 614x392+78+181
@@ -3243,9 +3365,7 @@ proc vTclWindow.nt {base} {
         focus .nt.einh
     }
     label $base.li \
-        -anchor w -borderwidth 0 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -relief raised -text Inherits 
+        -anchor w -borderwidth 0 -text Inherits 
     entry $base.einh \
         -background #fefefe -borderwidth 1 -selectborderwidth 0 \
         -textvariable ntw(fathername) 
@@ -3257,7 +3377,7 @@ proc vTclWindow.nt {base} {
         -command {if {[winfo exists .nt.ddf]} {
 	destroy .nt.ddf
 } else {
-	create_drop_down .nt 378 25 220
+	create_drop_down .nt 386 23 220
 	focus .nt.ddf.sb
 	foreach tbl [get_tables] {.nt.ddf.lb insert end $tbl}
 	bind .nt.ddf.lb <ButtonRelease-1> {
@@ -3274,8 +3394,7 @@ proc vTclWindow.nt {base} {
 		break
 	}
 }} \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -highlightthickness 0 -padx 9 -pady 3 -takefocus 0 -text v 
+        -highlightthickness 0 -takefocus 0 -image dnarw
     entry $base.e2 \
         -background #fefefe -borderwidth 1 -selectborderwidth 0 \
         -textvariable ntw(fldname) 
@@ -3302,44 +3421,31 @@ proc vTclWindow.nt {base} {
     }
     checkbutton $base.cb1 \
         -borderwidth 1 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
         -offvalue { } -onvalue { NOT NULL} -text {field cannot be null} \
         -variable ntw(notnull) 
     label $base.lab1 \
-        -borderwidth 0 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -relief raised -text type 
+        -borderwidth 0 -text type 
     label $base.lab2 \
-        -borderwidth 0 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -relief raised -text {Field name} 
+        -borderwidth 0 -anchor w -text {Field name} 
     label $base.lab3 \
-        -borderwidth 0 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -relief raised -text size 
+        -borderwidth 0 -text size 
     label $base.lab4 \
-        -borderwidth 0 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -relief raised -text {Default value} 
+        -borderwidth 0 -anchor w -text {Default value} 
     button $base.addfld \
         -borderwidth 1 -command add_new_field \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-        -pady 3 -text {Add field} 
+        -text {Add field} 
     button $base.delfld \
         -borderwidth 1 -command {catch {.nt.lb delete [.nt.lb curselection]}} \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-        -pady 3 -text {Delete field} 
+        -text {Delete field} 
     button $base.emptb \
         -borderwidth 1 -command {.nt.lb delete 0 [.nt.lb size]} \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-        -pady 3 -text {Delete all} 
+        -text {Delete all} 
     button $base.maketbl \
         -borderwidth 1 -command create_table \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-        -pady 3 -text Create 
+        -text Create 
     listbox $base.lb \
         -background #fefefe -borderwidth 1 \
-        -font -*-Clean-Medium-R-Normal--*-130-*-*-*-*-*-* \
+        -font $pref(font_fix) \
         -selectborderwidth 0 -yscrollcommand {.nt.sb set} 
     bind $base.lb <ButtonRelease-1> {
         if {[.nt.lb curselection]!=""} {
@@ -3348,26 +3454,20 @@ proc vTclWindow.nt {base} {
     }
     button $base.exitbtn \
         -borderwidth 1 -command {Window destroy .nt} \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-        -pady 3 -text Cancel 
+        -text Cancel 
     label $base.l1 \
         -anchor w -borderwidth 1 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
         -relief raised -text {       field name} 
     label $base.l2 \
         -borderwidth 1 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
         -relief raised -text type 
     label $base.l3 \
         -borderwidth 1 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
         -relief raised -text options 
     scrollbar $base.sb \
         -borderwidth 1 -command {.nt.lb yview} -orient vert 
     label $base.l93 \
-        -anchor w -borderwidth 0 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -relief raised -text {Table name} 
+        -anchor w -borderwidth 0 -text {Table name} 
     button $base.mvup \
         -borderwidth 1 \
         -command {if {[.nt.lb size]>1} {
@@ -3378,8 +3478,7 @@ proc vTclWindow.nt {base} {
 		.nt.lb selection set [expr $i-1]
 	}
 }} \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-        -pady 3 -text {Move up} 
+        -text {Move up} 
     button $base.mvdn \
         -borderwidth 1 \
         -command {if {[.nt.lb size]>1} {
@@ -3390,8 +3489,7 @@ proc vTclWindow.nt {base} {
 		.nt.lb selection set [expr $i+1]
 	}
 }} \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-        -pady 3 -text {Move down} 
+        -text {Move down} 
     button $base.button17 \
         -borderwidth 1 \
         -command {
@@ -3409,47 +3507,36 @@ if {[winfo exists .nt.ddf]} {
 		break
 	}
 }} \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -highlightthickness 0 -padx 9 -pady 3 -takefocus 0 -text v 
+        -highlightthickness 0 -takefocus 0 -image dnarw 
     label $base.lco \
-        -borderwidth 0 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -relief raised -text Constraint 
+        -borderwidth 0 -anchor w -text Constraint 
     entry $base.eco \
         -background #fefefe -borderwidth 1 -textvariable ntw(constraint) 
     label $base.lch \
-        -borderwidth 0 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-        -relief raised -text check 
+        -borderwidth 0 -text check 
     entry $base.ech \
         -background #fefefe -borderwidth 1 -textvariable ntw(check) 
     label $base.ll \
         -borderwidth 1 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
         -relief raised 
     checkbutton $base.pk \
         -borderwidth 1 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
         -offvalue { } -onvalue * -text {primary key} -variable ntw(pk) 
     label $base.lpk \
         -borderwidth 1 \
-        -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
         -relief raised -text K 
-    ###################
-    # SETTING GEOMETRY
-    ###################
     place $base.etabn \
         -x 85 -y 5 -width 156 -height 20 -anchor nw -bordermode ignore 
     place $base.li \
         -x 245 -y 7 -width 42 -height 16 -anchor nw -bordermode ignore 
     place $base.einh \
-        -x 290 -y 5 -width 292 -height 20 -anchor nw -bordermode ignore 
+        -x 290 -y 5 -width 318 -height 20 -anchor nw -bordermode ignore 
     place $base.binh \
-        -x 582 -y 6 -width 16 -height 19 -anchor nw -bordermode ignore 
+        -x 590 -y 7 -width 16 -height 16 -anchor nw -bordermode ignore 
     place $base.e2 \
         -x 85 -y 60 -width 156 -height 20 -anchor nw -bordermode ignore 
     place $base.e1 \
-        -x 291 -y 60 -width 81 -height 20 -anchor nw -bordermode ignore 
+        -x 291 -y 60 -width 98 -height 20 -anchor nw -bordermode ignore 
     place $base.e3 \
         -x 445 -y 60 -width 46 -height 20 -anchor nw -bordermode ignore 
     place $base.e5 \
@@ -3491,7 +3578,7 @@ if {[winfo exists .nt.ddf]} {
     place $base.mvdn \
         -x 534 -y 150 -width 75 -height 26 -anchor nw -bordermode ignore 
     place $base.button17 \
-        -x 372 -y 61 -width 16 -height 19 -anchor nw -bordermode ignore 
+        -x 371 -y 62 -width 16 -height 16 -anchor nw -bordermode ignore 
     place $base.lco \
         -x 5 -y 28 -width 58 -height 16 -anchor nw -bordermode ignore 
     place $base.eco \
@@ -3499,9 +3586,9 @@ if {[winfo exists .nt.ddf]} {
     place $base.lch \
         -x 245 -y 30 -anchor nw -bordermode ignore 
     place $base.ech \
-        -x 290 -y 27 -width 308 -height 22 -anchor nw -bordermode ignore 
+        -x 290 -y 27 -width 318 -height 22 -anchor nw -bordermode ignore 
     place $base.ll \
-        -x 5 -y 53 -width 591 -height 2 -anchor nw -bordermode ignore 
+        -x 5 -y 53 -width 603 -height 2 -anchor nw -bordermode ignore 
     place $base.pk \
         -x 407 -y 83 -width 93 -height 20 -anchor nw -bordermode ignore 
     place $base.lpk \
@@ -3509,59 +3596,71 @@ if {[winfo exists .nt.ddf]} {
 }
 
 proc vTclWindow.pw {base} {
+global pref
 	if {$base == ""} {
 		set base .pw
 	}
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
-	wm geometry $base 322x167+210+219
+	wm geometry $base 322x227+210+219
 	wm maxsize $base 1009 738
 	wm minsize $base 1 1
 	wm overrideredirect $base 0
-	wm resizable $base 1 1
+	wm resizable $base 0 0
 	wm title $base "Preferences"
-	label $base.l1  -borderwidth 0 -relief raised -text {Max rows displayed in table/query view} 
+	label $base.l1  -borderwidth 0 -text {Max rows displayed in table/query view} 
 	entry $base.e1  -background #fefefe -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable pref(rows) 
-	label $base.l2  -borderwidth 0 -relief raised -text Font 
-	radiobutton $base.tvf  -borderwidth 1 -text {fixed (clean)} -value clean -variable pref(tvfont) 
-	radiobutton $base.tvfv  -borderwidth 1 -text {proportional (helvetica)} -value helv -variable pref(tvfont) 
+	label $base.l2  -borderwidth 0 -text "Table viewer font"
+	radiobutton $base.tvf  -borderwidth 1 -text {fixed width} -value clean -variable pref(tvfont)
+	radiobutton $base.tvfv  -borderwidth 1 -text proportional -value helv -variable pref(tvfont)
+	label $base.lfn -borderwidth 0 -anchor w -text "Font normal"
+	label $base.lfb -borderwidth 0 -anchor w -text "Font bold"
+	label $base.lfi -borderwidth 0 -anchor w -text "Font italic"
+	label $base.lff -borderwidth 0 -anchor w -text "Font fixed"
+	entry $base.efn -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable pref(font_normal)
+	entry $base.efb -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable pref(font_bold)
+	entry $base.efi -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable pref(font_italic)
+	entry $base.eff -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable pref(font_fix)
 	label $base.ll  -borderwidth 1 -relief sunken 
 	checkbutton $base.alcb  -borderwidth 1 -text {Auto-load the last opened database at startup}  -variable pref(autoload) 
-	button $base.okbtn  -borderwidth 1  -command {if {$pref(rows)>200} {
-tk_messageBox -title Warning -message "A big number of rows displayed in table view will take a lot of memory!"
+	button $base.okbtn  -borderwidth 1  -command {
+if {$pref(rows)>200} {
+	tk_messageBox -title Warning -parent .pw -message "A big number of rows displayed in table view will take a lot of memory!"
 }
 save_pref
-Window destroy .pw} -padx 9  -pady 3 -text Ok 
-	###################
-	# SETTING GEOMETRY
-	###################
-	place $base.l1  -x 10 -y 20 -anchor nw -bordermode ignore 
-	place $base.e1  -x 245 -y 17 -width 65 -height 24 -anchor nw -bordermode ignore 
-	place $base.l2  -x 10 -y 53 -anchor nw -bordermode ignore 
-	place $base.tvf  -x 50 -y 50 -anchor nw -bordermode ignore 
-	place $base.tvfv  -x 155 -y 50 -anchor nw -bordermode ignore 
-	place $base.ll  -x 10 -y 85 -width 301 -height 2 -anchor nw -bordermode ignore 
-	place $base.alcb  -x 10 -y 95 -anchor nw -bordermode ignore 
-	place $base.okbtn  -x 125 -y 135 -width 80 -height 26 -anchor nw -bordermode ignore
+Window destroy .pw
+tk_messageBox -title Warning -message "Changed fonts may appear in the next working session!"
+} -text Ok 
+	place $base.l1  -x 10 -y 10 -anchor nw -bordermode ignore 
+	place $base.e1  -x 240 -y 8 -width 65 -height 20 -anchor nw -bordermode ignore 
+	place $base.l2  -x 10 -y 38 -anchor nw -bordermode ignore 
+	place $base.tvf  -x 115 -y 34 -anchor nw -bordermode ignore 
+	place $base.tvfv  -x 205 -y 34 -anchor nw -bordermode ignore 
+	place $base.lfn -x 10 -y 65 -anchor nw
+	place $base.lfb -x 10 -y 86 -anchor nw
+	place $base.lfi -x 10 -y 107 -anchor nw
+	place $base.lff -x 10 -y 128 -anchor nw
+	place $base.efn -x 80 -y 63 -width 230 -height 20
+	place $base.efb -x 80 -y 84 -width 230 -height 20
+	place $base.efi -x 80 -y 105 -width 230 -height 20
+	place $base.eff -x 80 -y 126 -width 230 -height 20
+	place $base.ll  -x 10 -y 150 -width 301 -height 2 -anchor nw -bordermode ignore 
+	place $base.alcb  -x 10 -y 155 -anchor nw -bordermode ignore 
+	place $base.okbtn  -x 125 -y 195 -width 80 -height 26 -anchor nw -bordermode ignore
 }
 
 proc vTclWindow.qb {base} {
+global pref
 	if {$base == ""} {
 		set base .qb
 	}
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
-	toplevel $base -class Toplevel  -cursor top_left_arrow 
+	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 442x344+150+150
 	wm maxsize $base 1009 738
@@ -3570,7 +3669,7 @@ proc vTclWindow.qb {base} {
 	wm resizable $base 0 0
 	wm deiconify $base
 	wm title $base "Query builder"
-	label $base.lqn  -borderwidth 0  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -relief raised -text {Query name} 
+	label $base.lqn  -borderwidth 0 -text {Query name} 
 	entry $base.eqn  -background #fefefe -borderwidth 1 -foreground #000000  -highlightthickness 1 -selectborderwidth 0 -textvariable queryname 
 	button $base.savebtn  -borderwidth 1  -command {if {$queryname==""} then {
 	show_error "You have to supply a name for this query!"
@@ -3587,7 +3686,7 @@ proc vTclWindow.qb {base} {
 			set qtype A
 		}
 		if {$cbv} {
-			set pgres [wpg_exec $dbc "create view $queryname as $qcmd"]
+			set pgres [wpg_exec $dbc "create view \"$queryname\" as $qcmd"]
 			if {$pgsql(status)!="PGRES_COMMAND_OK"} {
 				show_error "Error defining view\n\n$pgsql(errmsg)"
 			} else {
@@ -3607,64 +3706,59 @@ proc vTclWindow.qb {base} {
 			if {$pgsql(status)!="PGRES_COMMAND_OK"} then {
 				show_error "Error executing query\n$pgres(errmsg)"
 			} else {
-				cmd_Queries
+				tab_click .dw.tabQueries
 				if {$queryoid==0} {set queryoid [pg_result $pgres -oid]}
 			}
 		}
 		catch {pg_result $pgres -clear}
 	}
-}}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text {Save query definition} 
+}}  -text {Save query definition} 
 	button $base.execbtn  -borderwidth 1  -command {
 set qcmd [.qb.text1 get 0.0 end]
 regsub -all "\n" [string trim $qcmd] " " qcmd
 if {[lindex [split [string toupper $qcmd]] 0]!="SELECT"} {
-	if {[tk_messageBox -title Warning -message "This is an action query!\n\nExecute it?" -type yesno -default no]=="yes"} {
+	if {[tk_messageBox -title Warning -parent .qb -message "This is an action query!\n\nExecute it?" -type yesno -default no]=="yes"} {
 		sql_exec noquiet $qcmd
 	}
 } else {
-	set mw(query) [subst $qcmd]
-	set mw(updatable) 0
-	set mw(isaquery) 1
-	Window show .mw
-	set mw(layout_name) $queryname
-	mw_load_layout $queryname
-	mw_select_records $mw(query)
-}
-}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text {Execute query} 
+	set wn [mw_get_new_name]
+	set mw($wn,query) [subst $qcmd]
+	set mw($wn,updatable) 0
+	set mw($wn,isaquery) 1
+	mw_create_window
+	mw_load_layout $wn $queryname
+	mw_select_records $wn $mw($wn,query)
+}
+} -text {Execute query} 
 	button $base.termbtn  -borderwidth 1  -command {.qb.cbv configure -state normal
 set cbv 0
 set queryname {}
 .qb.text1 delete 1.0 end
-Window destroy .qb}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text Close 
-	text $base.text1  -background #fefefe -borderwidth 1  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -foreground #000000 -highlightthickness 1 -wrap word 
-	checkbutton $base.cbv  -borderwidth 1  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -text {Save this query as a view} -variable cbv 
+Window destroy .qb} -text Close 
+	text $base.text1  -background #fefefe -borderwidth 1  -font $pref(font_normal) -foreground #000000 -highlightthickness 1 -wrap word 
+	checkbutton $base.cbv  -borderwidth 1  -text {Save this query as a view} -variable cbv 
 	button $base.qlshow  -borderwidth 1  -command {Window show .ql
 ql_draw_lizzard
-focus .ql.entt}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text {Visual designer} 
-	###################
-	# SETTING GEOMETRY
-	###################
+focus .ql.entt} -text {Visual designer} 
 	place $base.lqn  -x 5 -y 5 -anchor nw -bordermode ignore 
 	place $base.eqn  -x 80 -y 1 -width 355 -height 24 -anchor nw -bordermode ignore 
-	place $base.savebtn  -x 5 -y 60 -anchor nw -bordermode ignore 
-	place $base.execbtn  -x 150 -y 60 -anchor nw -bordermode ignore 
-	place $base.termbtn  -x 375 -y 60 -anchor nw -bordermode ignore 
+	place $base.savebtn  -x 5 -y 60 -height 25 -anchor nw -bordermode ignore 
+	place $base.execbtn  -x 150 -y 60 -height 25 -anchor nw -bordermode ignore 
+	place $base.termbtn  -x 375 -y 60 -width 50 -height 25 -anchor nw -bordermode ignore 
 	place $base.text1  -x 5 -y 90 -width 430 -height 246 -anchor nw -bordermode ignore 
-	place $base.cbv  -x 5 -y 30 -anchor nw -bordermode ignore 
-	place $base.qlshow  -x 255 -y 60 -anchor nw -bordermode ignore
+	place $base.cbv  -x 5 -y 30 -height 25 -anchor nw -bordermode ignore 
+	place $base.qlshow  -x 255 -y 60 -height 25 -anchor nw -bordermode ignore
 }
 
 proc vTclWindow.ql {base} {
+global pref
 	if {$base == ""} {
 		set base .ql
 	}
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
-	toplevel $base -class Toplevel  -cursor top_left_arrow 
+	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 759x530+10+13
 	wm maxsize $base 1009 738
@@ -3688,26 +3782,26 @@ proc vTclWindow.ql {base} {
 	canvas $base.c  -background #fefefe -borderwidth 2 -height 207 -relief ridge  -takefocus 0 -width 295 
 	button $base.exitbtn  -borderwidth 1 -command {
 ql_init
-Window destroy .ql}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text Close 
-	button $base.showbtn  -borderwidth 1 -command ql_show_sql  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text {Show SQL} 
-	label $base.l12  -borderwidth 0  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -relief raised -text {Add table} 
+Window destroy .ql} -text Close 
+	button $base.showbtn  -borderwidth 1 -command ql_show_sql -text {Show SQL} 
+	label $base.l12  -borderwidth 0 -text {Add table} 
 	entry $base.entt  -background #fefefe -borderwidth 1 -highlightthickness 1  -selectborderwidth 0 -textvariable qlvar(newtablename) 
 	bind $base.entt <Key-Return> {
 		ql_add_new_table
 	}
 	button $base.execbtn  -borderwidth 1  -command {
 set qcmd [ql_compute_sql]
-set mw(layout_name) nolayoutneeded
-set mw(query) [subst $qcmd]
-set mw(updatable) 0
-set mw(isaquery) 1
-Window show .mw
-mw_load_layout $mw(layout_name)
-mw_select_records $mw(query)}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text {Execute SQL} 
+set wn [mw_get_new_name]
+set mw($wn,query) [subst $qcmd]
+set mw($wn,updatable) 0
+set mw($wn,isaquery) 1
+mw_create_window
+mw_load_layout $wn nolayoutneeded
+mw_select_records $wn $mw($wn,query)} -text {Execute SQL} 
 	button $base.stoqb  -borderwidth 1  -command {Window show .qb
 .qb.text1 delete 1.0 end
 .qb.text1 insert end [ql_compute_sql]
-focus .qb}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text {Save to query builder} 
+focus .qb} -text {Save to query builder} 
 	button $base.bdd  -borderwidth 1  -command {if {[winfo exists .ql.ddf]} {
 	destroy .ql.ddf
 } else {
@@ -3723,17 +3817,14 @@ focus .qb}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -p
 		destroy .ql.ddf
 		break
 	}
-}}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -highlightthickness 0 -padx 9 -pady 3 -text v 
-	###################
-	# SETTING GEOMETRY
-	###################
+}}  -image dnarw 
 	place $base.c  -x 5 -y 30 -width 748 -height 500 -anchor nw -bordermode ignore 
-	place $base.exitbtn  -x 695 -y 5 -height 26 -anchor nw -bordermode ignore 
-	place $base.showbtn  -x 367 -y 5 -height 26 -anchor nw -bordermode ignore 
+	place $base.exitbtn  -x 695 -y 5 -height 25 -anchor nw -bordermode ignore 
+	place $base.showbtn  -x 367 -y 5 -height 25 -anchor nw -bordermode ignore 
 	place $base.l12  -x 10 -y 8 -width 53 -height 16 -anchor nw -bordermode ignore 
 	place $base.entt  -x 70 -y 7 -width 126 -height 20 -anchor nw -bordermode ignore 
-	place $base.execbtn  -x 452 -y 5 -height 26 -anchor nw -bordermode ignore 
-	place $base.stoqb  -x 550 -y 5 -height 26 -anchor nw -bordermode ignore 
+	place $base.execbtn  -x 452 -y 5 -height 25 -anchor nw -bordermode ignore 
+	place $base.stoqb  -x 550 -y 5 -height 25 -anchor nw -bordermode ignore 
 	place $base.bdd  -x 200 -y 7 -width 17 -height 20 -anchor nw -bordermode ignore
 }
 
@@ -3745,9 +3836,6 @@ proc vTclWindow.rf {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 272x105+294+262
@@ -3756,7 +3844,7 @@ proc vTclWindow.rf {base} {
 	wm overrideredirect $base 0
 	wm resizable $base 0 0
 	wm title $base "Rename"
-	label $base.l1  -borderwidth 0 -relief raised -text {New name} 
+	label $base.l1  -borderwidth 0 -text {New name} 
 	entry $base.e1  -background #fefefe -borderwidth 1 -textvariable newobjname 
 	button $base.b1  -borderwidth 1  -command {
 			if {$newobjname==""} {
@@ -3782,11 +3870,8 @@ proc vTclWindow.rf {base} {
 				}
 				catch {pg_result $pgres -clear}
 			}
-	   } -padx 9  -pady 3 -text Rename 
-	button $base.b2  -borderwidth 1 -command {Window destroy .rf} -padx 9  -pady 3 -text Cancel 
-	###################
-	# SETTING GEOMETRY
-	###################
+	   } -text Rename 
+	button $base.b2  -borderwidth 1 -command {Window destroy .rf} -text Cancel 
 	place $base.l1  -x 15 -y 28 -anchor nw -bordermode ignore 
 	place $base.e1  -x 100 -y 25 -anchor nw -bordermode ignore 
 	place $base.b1  -x 65 -y 65 -width 70 -anchor nw -bordermode ignore 
@@ -3794,15 +3879,13 @@ proc vTclWindow.rf {base} {
 }
 
 proc vTclWindow.rb {base} {
+global pref
 	if {$base == ""} {
 		set base .rb
 	}
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 652x426+96+120
@@ -3814,11 +3897,9 @@ proc vTclWindow.rb {base} {
 	wm title $base "Report builder"
 	label $base.l1 \
 		-borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
 		-relief raised -text {Report fields} 
 	listbox $base.lb \
 		-background #fefefe -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
 		-highlightthickness 1 -selectborderwidth 0 \
 		-yscrollcommand {.rb.sb set} 
 	bind $base.lb <ButtonRelease-1> {
@@ -3841,25 +3922,22 @@ proc vTclWindow.rb {base} {
 	}
 	button $base.bt2 \
 		-borderwidth 1 \
-		-command {if {[tk_messageBox -title Warning -message "All report information will be deleted.\n\nProceed ?" -type yesno -default no]=="yes"} then {
+		-command {if {[tk_messageBox -title Warning -parent .rb -message "All report information will be deleted.\n\nProceed ?" -type yesno -default no]=="yes"} then {
 .rb.c delete all
 rb_init
 rb_draw_regions
 }} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text {Clear all} 
+		-text {Clear all} 
 	button $base.bt4 \
 		-borderwidth 1 -command rb_preview \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text Preview 
+		-text Preview 
 	button $base.bt5 \
 		-borderwidth 1 -command {Window destroy .rb} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text Quit 
+		-text Quit 
 	scrollbar $base.sb \
 		-borderwidth 1 -command {.rb.lb yview} -orient vert 
 	label $base.lmsg \
-		-anchor w -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
+		-anchor w \
 		-relief groove -text {Report header} -textvariable rbvar(msg) 
 	entry $base.e2 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
@@ -3872,8 +3950,7 @@ rb_draw_regions
 		-textvariable rbvar(labeltext) 
 	button $base.badl \
 		-borderwidth 1 -command rb_add_label \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text {Add label} 
+		-text {Add label} 
 	label $base.lbold \
 		-borderwidth 1 -relief raised -text B 
 	bind $base.lbold <Button-1> {
@@ -3886,7 +3963,7 @@ rb_change_object_font
 	}
 	label $base.lita \
 		-borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-O-Normal--*-120-*-*-*-*-*-* \
+		-font $pref(font_italic) \
 		-relief raised -text i 
 	bind $base.lita <Button-1> {
 		if {[rb_get_italic]=="O"} {
@@ -3903,24 +3980,18 @@ rb_change_object_font
 		rb_change_object_font
 	}
 	label $base.linfo \
-		-anchor w -font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
+		-anchor w  \
 		-relief groove -text {Database field} -textvariable rbvar(info) 
 	label $base.llal \
-		-borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
-		-relief raised -text Align 
+		-borderwidth 0 -text Align 
 	button $base.balign \
 		-borderwidth 0 -command rb_flip_align \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -relief groove -text right 
+		-relief groove -text right 
 	button $base.savebtn \
 		-borderwidth 1 -command rb_save_report \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text Save 
+		-text Save 
 	label $base.lfn \
-		-borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
-		-relief raised -text Font 
+		-borderwidth 0 -text Font 
 	button $base.bfont \
 		-borderwidth 0 \
 		-command {set temp [.rb.bfont cget -text]
@@ -3930,8 +4001,7 @@ if {$temp=="Courier"} then {
   .rb.bfont configure -text Courier
 }
 rb_change_object_font} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -relief groove -text Courier 
+		-relief groove -text Courier 
 	button $base.bdd \
 		-borderwidth 1 \
 		-command {if {[winfo exists .rb.ddf]} {
@@ -3948,12 +4018,9 @@ rb_change_object_font} \
 		break
 	}
 }} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
-		-highlightthickness 0 -padx 9 -pady 2 -text v 
+		-highlightthickness 0 -image dnarw 
 	label $base.lrn \
-		-borderwidth 0 \
-		-font -Adobe-Helvetica-medium-R-Normal--*-120-*-*-*-*-*-* \
-		-relief raised -text {Report name} 
+		-borderwidth 0 -text {Report name} 
 	entry $base.ern \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
 		-textvariable rbvar(reportname) 
@@ -3961,9 +4028,7 @@ rb_change_object_font} \
 		rb_load_report
 	}
 	label $base.lrs \
-		-borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
-		-relief raised -text {Report source} 
+		-borderwidth 0 -text {Report source} 
 	label $base.ls \
 		-borderwidth 1 -relief raised 
 	entry $base.ef \
@@ -3971,11 +4036,7 @@ rb_change_object_font} \
 		-textvariable rbvar(formula) 
 	button $base.baf \
 		-borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text {Add formula} 
-	###################
-	# SETTING GEOMETRY
-	###################
+		-text {Add formula} 
 	place $base.l1 \
 		-x 5 -y 55 -width 131 -height 18 -anchor nw -bordermode ignore 
 	place $base.lb \
@@ -4039,9 +4100,6 @@ proc vTclWindow.rpv {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 495x500+230+50
@@ -4063,15 +4121,10 @@ proc vTclWindow.rpv {base} {
 		-borderwidth 2 -height 75 -width 125 
 	button $base.f1.button18 \
 		-borderwidth 1 -command {if {$rbvar(justpreview)} then {Window destroy .rb} ; Window destroy .rpv} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text Close 
+		-text Close 
 	button $base.f1.button17 \
 		-borderwidth 1 -command rb_print_report \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text Print 
-	###################
-	# SETTING GEOMETRY
-	###################
+		-text Print 
 	pack $base.fr \
 		-in .rpv -anchor center -expand 1 -fill both -side top 
 	pack $base.fr.c \
@@ -4093,9 +4146,6 @@ proc vTclWindow.sqf {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 310x223+245+158
@@ -4104,15 +4154,15 @@ proc vTclWindow.sqf {base} {
 	wm overrideredirect $base 0
 	wm resizable $base 0 0
 	wm title $base "Sequence"
-	label $base.l1  -anchor w -borderwidth 0 -relief raised -text {Sequence name} 
+	label $base.l1  -anchor w -borderwidth 0 -text {Sequence name} 
 	entry $base.e1  -borderwidth 1 -highlightthickness 1 -textvariable seq_name 
-	label $base.l2  -borderwidth 0 -relief raised -text Increment 
+	label $base.l2  -borderwidth 0 -text Increment 
 	entry $base.e2  -borderwidth 1 -highlightthickness 1 -selectborderwidth 0  -textvariable seq_inc 
-	label $base.l3  -borderwidth 0 -relief raised -text {Start value} 
+	label $base.l3  -borderwidth 0 -text {Start value} 
 	entry $base.e3  -borderwidth 1 -highlightthickness 1 -selectborderwidth 0  -textvariable seq_start 
-	label $base.l4  -borderwidth 0 -relief raised -text Minvalue 
+	label $base.l4  -borderwidth 0 -text Minvalue 
 	entry $base.e4  -borderwidth 1 -highlightthickness 1 -selectborderwidth 0  -textvariable seq_minval 
-	label $base.l5  -borderwidth 0 -relief raised -text Maxvalue 
+	label $base.l5  -borderwidth 0 -text Maxvalue 
 	entry $base.e5  -borderwidth 1 -highlightthickness 1 -selectborderwidth 0  -textvariable seq_maxval 
 	button $base.defbtn  -borderwidth 1  -command {
 		if {$seq_name==""} {
@@ -4123,13 +4173,13 @@ proc vTclWindow.sqf {base} {
 			if {$seq_start!=""} {set s2 "start $seq_start"};
 			if {$seq_minval!=""} {set s3 "minvalue $seq_minval"};
 			if {$seq_maxval!=""} {set s4 "maxvalue $seq_maxval"};
-			set sqlcmd "create sequence $seq_name $s1 $s2 $s3 $s4"
+			set sqlcmd "create sequence \"$seq_name\" $s1 $s2 $s3 $s4"
 			if {[sql_exec noquiet $sqlcmd]} {
 				cmd_Sequences
-				tk_messageBox -title Information -message "Sequence created!"
+				tk_messageBox -title Information -parent .sqf -message "Sequence created!"
 			}
 		}
-	}  -padx 9  -pady 3 -text {Define sequence} 
+	} -text {Define sequence} 
 	button $base.closebtn  -borderwidth 1  -command {for {set i 1} {$i<6} {incr i} {
 	.sqf.e$i configure -state normal
 	.sqf.e$i delete 0 end
@@ -4138,10 +4188,7 @@ proc vTclWindow.sqf {base} {
 }
 place .sqf.defbtn -x 40 -y 175
 Window destroy .sqf
-} -padx 9  -pady 3 -text Close 
-	###################
-	# SETTING GEOMETRY
-	###################
+} -text Close 
 	place $base.l1  -x 20 -y 20 -width 111 -height 18 -anchor nw -bordermode ignore 
 	place $base.e1  -x 135 -y 19 -anchor nw -bordermode ignore 
 	place $base.l2  -x 20 -y 50 -anchor nw -bordermode ignore 
@@ -4157,15 +4204,13 @@ Window destroy .sqf
 }
 
 proc vTclWindow.sw {base} {
+global pref
 	if {$base == ""} {
 		set base .sw
 	}
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 594x416+192+152
@@ -4175,23 +4220,20 @@ proc vTclWindow.sw {base} {
 	wm resizable $base 1 1
 	wm title $base "Design script"
 	frame $base.f1  -height 55 -relief groove -width 125 
-	label $base.f1.l1  -borderwidth 0  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*  -relief raised -text {Script name} 
+	label $base.f1.l1  -borderwidth 0 -text {Script name} 
 	entry $base.f1.e1  -background #fefefe -borderwidth 1 -highlightthickness 0  -textvariable scriptname -width 32 
-	text $base.src  -background #fefefe  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -height 2  -highlightthickness 1 -selectborderwidth 0 -width 2 
+	text $base.src  -background #fefefe  -font $pref(font_normal) -height 2  -highlightthickness 1 -selectborderwidth 0 -width 2 
 	frame $base.f2  -height 75 -relief groove -width 125 
-	button $base.f2.b1  -borderwidth 1 -command {Window destroy .sw}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text Cancel 
+	button $base.f2.b1  -borderwidth 1 -command {Window destroy .sw} -text Cancel 
 	button $base.f2.b2  -borderwidth 1  -command {if {$scriptname==""} {
-	tk_messageBox -title Warning -message "The script must have a name!"
+	tk_messageBox -title Warning -parent .sw -message "The script must have a name!"
 } else {
    sql_exec noquiet "delete from pga_scripts where scriptname='$scriptname'"
    regsub -all {\\} [.sw.src get 1.0 end] {\\\\} scriptsource
    regsub -all ' $scriptsource  \\' scriptsource
    sql_exec noquiet "insert into pga_scripts values ('$scriptname','$scriptsource')"
    cmd_Scripts
-}}  -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9  -pady 3 -text Save -width 6 
-	###################
-	# SETTING GEOMETRY
-	###################
+}}  -text Save -width 6 
 	pack $base.f1  -in .sw -anchor center -expand 0 -fill x -pady 2 -side top 
 	pack $base.f1.l1  -in .sw.f1 -anchor center -expand 0 -fill none -ipadx 2 -side left 
 	pack $base.f1.e1  -in .sw.f1 -anchor center -expand 0 -fill none -side left 
@@ -4202,65 +4244,65 @@ proc vTclWindow.sw {base} {
 }
 
 proc vTclWindow.tiw {base} {
+global pref
 	if {$base == ""} {
 		set base .tiw
 	}
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 390x460+243+20
 	wm maxsize $base 1009 738
 	wm minsize $base 1 1
 	wm overrideredirect $base 0
-	wm resizable $base 1 1
+	wm resizable $base 0 0
 	wm title $base "Table information"
-	label $base.l1  -borderwidth 0  -relief raised -text {Table name} 
-	label $base.l2  -anchor w -borderwidth 0  -relief raised -text conturi -textvariable tiw(tablename) 
-	label $base.l3  -borderwidth 0  -relief raised -text Owner 
+	label $base.l1  -borderwidth 0 -text {Table name} 
+	label $base.l2  -anchor w -borderwidth 0 -text conturi -textvariable tiw(tablename) 
+	label $base.l3  -borderwidth 0 -text Owner 
 	label $base.l4  -anchor w -borderwidth 1  -textvariable tiw(owner) 
-	listbox $base.lb  -background #fefefe -borderwidth 1  -font -*-Clean-Medium-R-Normal--*-130-*-*-*-*-*-*  -highlightthickness 1 -selectborderwidth 0  -yscrollcommand {.tiw.sb set} 
+	listbox $base.lb  -background #fefefe -borderwidth 1  -font $pref(font_fix)  -highlightthickness 1 -selectborderwidth 0  -yscrollcommand {.tiw.sb set} 
 	scrollbar $base.sb  -activebackground #d9d9d9 -activerelief sunken -borderwidth 1  -command {.tiw.lb yview} -orient vert 
-	button $base.closebtn  -borderwidth 1 -command {Window destroy .tiw}  -pady 3 -text Close 
-	label $base.l10  -borderwidth 1  -relief raised -text {field name} 
-	label $base.l11  -borderwidth 1  -relief raised -text {field type} 
-	label $base.l12  -borderwidth 1  -relief raised -text size 
-	label $base.lfi  -borderwidth 0  -relief raised -text {Field information} 
-	label $base.lii  -borderwidth 1  -relief raised -text {Indexes defined} 
+	button $base.closebtn  -borderwidth 1 -command {Window destroy .tiw}  -pady 3 -text Close
+	button $base.renbtn -borderwidth 1 -command {
+	if {[set tiw(col_id) [.tiw.lb curselection]]==""} then {bell} else {set tiw(old_cn) [.tiw.lb get [.tiw.lb curselection]] ; set tiw(new_cn) {} ; Window show .rcw ; tkwait visibility .rcw ; wm transient .rcw .tiw ; focus .rcw.e1}} -text {Rename field}
+	button $base.addbtn -borderwidth 1 -command "Window show .anfw ; set anfw(name) {} ; set anfw(type) {} ; wm transient .anfw .tiw ; focus .anfw.e1" -text "Add new field"
+	label $base.l10  -borderwidth 1  -relief raised -text {field name}
+	label $base.l11  -borderwidth 1  -relief raised -text {field type}
+	label $base.l12  -borderwidth 1  -relief raised -text size
+	label $base.lfi  -borderwidth 0 -text {Field information}
+	label $base.lii  -borderwidth 1  -relief raised -text {Indexes defined}
 	listbox $base.ilb  -background #fefefe -borderwidth 1  -highlightthickness 1 -selectborderwidth 0 
 	bind $base.ilb <ButtonRelease-1> {
 		tiw_show_index
 	}
-	label $base.lip  -borderwidth 1  -relief raised -text {index properties} 
-	frame $base.fr11  -borderwidth 1 -height 75 -relief sunken -width 125 
-	label $base.fr11.l9  -borderwidth 0  -relief raised -text {Is clustered ?} 
-	label $base.fr11.l2  -borderwidth 0  -relief raised -text {Is unique ?} 
-	label $base.fr11.liu  -anchor nw -borderwidth 0  -relief raised -text Yes -textvariable tiw(isunique) 
-	label $base.fr11.lic  -anchor nw -borderwidth 0  -relief raised -text No -textvariable tiw(isclustered) 
-	label $base.fr11.l5  -borderwidth 0  -relief raised -text {Fields :} 
+	label $base.lip  -borderwidth 1  -relief raised -text {index properties}
+	frame $base.fr11  -borderwidth 1 -height 75 -relief sunken -width 125
+	label $base.fr11.l9  -borderwidth 0 -text {Is clustered ?} 
+	label $base.fr11.l2  -borderwidth 0 -text {Is unique ?} 
+	label $base.fr11.liu  -anchor nw -borderwidth 0 -text Yes -textvariable tiw(isunique) 
+	label $base.fr11.lic  -anchor nw -borderwidth 0 -text No -textvariable tiw(isclustered) 
+	label $base.fr11.l5  -borderwidth 0 -text {Fields :} 
 	label $base.fr11.lif  -anchor nw -borderwidth 1  -justify left -relief sunken -text cont  -textvariable tiw(indexfields) -wraplength 170 
-	###################
-	# SETTING GEOMETRY
-	###################
 	place $base.l1  -x 20 -y 15 -anchor nw -bordermode ignore 
 	place $base.l2  -x 100 -y 14 -width 161 -height 18 -anchor nw -bordermode ignore 
 	place $base.l3  -x 20 -y 35 -anchor nw -bordermode ignore 
 	place $base.l4  -x 100 -y 34 -width 226 -height 18 -anchor nw -bordermode ignore 
 	place $base.lb  -x 20 -y 91 -width 338 -height 171 -anchor nw -bordermode ignore 
+	place $base.renbtn -x 20 -y 263 -height 25
+	place $base.addbtn -x 120 -y 263 -height 25
 	place $base.sb  -x 355 -y 90 -width 18 -height 173 -anchor nw -bordermode ignore 
-	place $base.closebtn  -x 325 -y 5 -anchor nw -bordermode ignore 
+	place $base.closebtn  -x 325 -y 5 -height 25 -anchor nw -bordermode ignore 
 	place $base.l10  -x 21 -y 75 -width 204 -height 18 -anchor nw -bordermode ignore 
 	place $base.l11  -x 225 -y 75 -width 90 -height 18 -anchor nw -bordermode ignore 
 	place $base.l12  -x 315 -y 75 -width 41 -height 18 -anchor nw -bordermode ignore 
 	place $base.lfi  -x 20 -y 55 -anchor nw -bordermode ignore 
-	place $base.lii  -x 20 -y 280 -width 151 -height 18 -anchor nw -bordermode ignore 
-	place $base.ilb  -x 20 -y 296 -width 150 -height 148 -anchor nw -bordermode ignore 
-	place $base.lip  -x 171 -y 280 -width 198 -height 18 -anchor nw -bordermode ignore 
-	place $base.fr11  -x 170 -y 297 -width 199 -height 147 -anchor nw -bordermode ignore 
+	place $base.lii  -x 20 -y 290 -width 151 -height 18 -anchor nw -bordermode ignore 
+	place $base.ilb  -x 20 -y 306 -width 150 -height 148 -anchor nw -bordermode ignore 
+	place $base.lip  -x 171 -y 290 -width 198 -height 18 -anchor nw -bordermode ignore 
+	place $base.fr11  -x 170 -y 307 -width 199 -height 147 -anchor nw -bordermode ignore 
 	place $base.fr11.l9  -x 10 -y 30 -anchor nw -bordermode ignore 
 	place $base.fr11.l2  -x 10 -y 10 -anchor nw -bordermode ignore 
 	place $base.fr11.liu  -x 95 -y 10 -width 27 -height 16 -anchor nw -bordermode ignore 
@@ -4276,9 +4318,6 @@ proc vTclWindow.fd {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 377x315+103+101
@@ -4303,9 +4342,6 @@ proc vTclWindow.fd {base} {
 	bind $base.c <Motion> {
 		fd_mouse_move %x %y
 	}
-	###################
-	# SETTING GEOMETRY
-	###################
 	pack $base.c \
 		-in .fd -anchor center -expand 1 -fill both -side top 
 }
@@ -4317,9 +4353,6 @@ proc vTclWindow.fda {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 225x197+561+0
@@ -4331,7 +4364,6 @@ proc vTclWindow.fda {base} {
 	wm title $base "Attributes"
 	label $base.l1 \
 		-anchor nw -borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-justify left -text Name -width 8 
 	entry $base.e1 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
@@ -4341,7 +4373,6 @@ proc vTclWindow.fda {base} {
 	}
 	label $base.l2 \
 		-anchor nw -borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-justify left -text Top -width 8 
 	entry $base.e2 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
@@ -4351,8 +4382,7 @@ proc vTclWindow.fda {base} {
 	}
 	label $base.l3 \
 		-anchor w -borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -text Left \
-		-width 8 
+		-text Left -width 8 
 	entry $base.e3 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
 		-selectborderwidth 0 -textvariable fdvar(c_left) 
@@ -4361,7 +4391,7 @@ proc vTclWindow.fda {base} {
 	}
 	label $base.l4 \
 		-anchor w -borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -text Width \
+		-text Width \
 		-width 8 
 	entry $base.e4 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
@@ -4370,9 +4400,7 @@ proc vTclWindow.fda {base} {
 		fd_change_coord
 	}
 	label $base.l5 \
-		-anchor w -borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 0 \
-		-text Height -width 8 
+		-anchor w -borderwidth 0 -padx 0 -text Height -width 8 
 	entry $base.e5 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
 		-selectborderwidth 0 -textvariable fdvar(c_height) 
@@ -4380,9 +4408,7 @@ proc vTclWindow.fda {base} {
 		fd_change_coord
 	}
 	label $base.l6 \
-		-borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 0 \
-		-text Command 
+		-borderwidth 0 -text Command 
 	entry $base.e6 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
 		-selectborderwidth 0 -textvariable fdvar(c_cmd) 
@@ -4394,11 +4420,9 @@ proc vTclWindow.fda {base} {
 		-command {Window show .fdcmd
 .fdcmd.f.txt delete 1.0 end
 .fdcmd.f.txt insert end $fdvar(c_cmd)} \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 3 \
-		-pady 3 -text ... -width 1 
+		-text ... -width 1 
 	label $base.l7 \
 		-anchor w -borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-text Variable -width 8 
 	entry $base.e7 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
@@ -4408,8 +4432,7 @@ proc vTclWindow.fda {base} {
 	}
 	label $base.l8 \
 		-anchor w -borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -text Text \
-		-width 8 
+		-text Text -width 8 
 	entry $base.e8 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
 		-selectborderwidth 0 -textvariable fdvar(c_text) 
@@ -4419,9 +4442,6 @@ proc vTclWindow.fda {base} {
 	label $base.l0 \
 		-borderwidth 1 -relief raised -text {checkbox .udf0.checkbox17} \
 		-textvariable fdvar(c_info) -width 28 
-	###################
-	# SETTING GEOMETRY
-	###################
 	grid $base.l1 \
 		-in .fda -column 0 -row 1 -columnspan 1 -rowspan 1 
 	grid $base.e1 \
@@ -4461,15 +4481,13 @@ proc vTclWindow.fda {base} {
 }
 
 proc vTclWindow.fdcmd {base} {
+global pref
 	if {$base == ""} {
 		set base .fdcmd
 	}
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 282x274+504+229
@@ -4483,7 +4501,7 @@ proc vTclWindow.fdcmd {base} {
 	scrollbar $base.f.sb \
 		-borderwidth 1 -command {.fdcmd.f.txt yview} -orient vert -width 12 
 	text $base.f.txt \
-		-font -*-Clean-Medium-R-Normal--*-130-*-*-*-*-*-* -height 1 \
+		-font $pref(font_fix) -height 1 \
 		-width 115 -yscrollcommand {.fdcmd.f.sb set} 
 	frame $base.fb \
 		-height 75 -width 125 
@@ -4492,15 +4510,10 @@ proc vTclWindow.fdcmd {base} {
 		-command {set fdvar(c_cmd) [.fdcmd.f.txt get 1.0 "end - 1 chars"]
 Window hide .fdcmd
 fd_set_command} \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text Ok -width 5 
+		-text Ok -width 5 
 	button $base.fb.b2 \
 		-borderwidth 1 -command {Window hide .fdcmd} \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text Cancel 
-	###################
-	# SETTING GEOMETRY
-	###################
+		-text Cancel 
 	pack $base.f \
 		-in .fdcmd -anchor center -expand 1 -fill both -side top 
 	pack $base.f.sb \
@@ -4522,9 +4535,6 @@ proc vTclWindow.fdmenu {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 288x70+103+0
@@ -4538,16 +4548,13 @@ proc vTclWindow.fdmenu {base} {
 		-borderwidth 1 \
 		-command {if {[tk_messageBox -title Warning -message "Delete all objects ?" -type yesno -default no]=="no"} return
 fd_init} \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text {Delete all} 
+		-text {Delete all} 
 	button $base.but18 \
 		-borderwidth 1 -command {set fdvar(geometry) [wm geometry .fd] ; fd_test } \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text {Test form} 
+		-text {Test form} 
 	button $base.but19 \
 		-borderwidth 1 -command {destroy .$fdvar(forminame)} \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text {Close test form} 
+		-text {Close test form} 
 	button $base.bex \
 		-borderwidth 1 \
 		-command {if {[fd_save_form $fdvar(formname)]==1} {
@@ -4558,33 +4565,24 @@ catch {Window destroy .fda}
 catch {Window destroy .fdcmd}
 catch {Window destroy .$fdvar(forminame)}
 }} \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
-		-pady 3 -text Close 
+		-text Close 
 	button $base.bload \
 		-borderwidth 1 -command {fd_load_form nimic design} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text {Load from database} 
+		-text {Load from database} 
 	button $base.button17 \
 		-borderwidth 1 -command {fd_save_form nimic} \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
-		-pady 3 -text Save 
+		-text Save 
 	label $base.l1 \
-		-borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
-		-text {Form name} 
+		-borderwidth 0 -text {Form name} 
 	entry $base.e1 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
 		-selectborderwidth 0 -textvariable fdvar(formname) 
 	label $base.l2 \
 		-borderwidth 0 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
 		-text {Form's window internal name} 
 	entry $base.e2 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
 		-selectborderwidth 0 -textvariable fdvar(forminame) 
-	###################
-	# SETTING GEOMETRY
-	###################
 	place $base.but17 \
 		-x 5 -y 80 -width 62 -height 24 -anchor nw -bordermode ignore 
 	place $base.but18 \
@@ -4614,9 +4612,6 @@ proc vTclWindow.gpw {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	set sw [winfo screenwidth .]
@@ -4632,7 +4627,6 @@ proc vTclWindow.gpw {base} {
 	wm title $base "Input parameter"
 	label $base.l1 \
 		-anchor nw -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
 		-justify left -relief sunken -textvariable gpw(msg) -wraplength 200 
 	entry $base.e1 \
 		-background #fefefe -borderwidth 1 -highlightthickness 0 \
@@ -4647,15 +4641,10 @@ destroy .gpw
 	}
 	button $base.bok \
 		-borderwidth 1 -command {set gpw(result) 1
-destroy .gpw} -padx 9 \
-		-pady 3 -text Ok 
+destroy .gpw} -text Ok 
 	button $base.bcanc \
 		-borderwidth 1 -command {set gpw(result) 0
-destroy .gpw} -padx 9 \
-		-pady 3 -text Cancel 
-	###################
-	# SETTING GEOMETRY
-	###################
+destroy .gpw} -text Cancel 
 	place $base.l1 \
 		-x 10 -y 5 -width 201 -height 53 -anchor nw -bordermode ignore 
 	place $base.e1 \
@@ -4673,9 +4662,6 @@ proc vTclWindow.fdtb {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 90x152+0+0
@@ -4687,47 +4673,36 @@ proc vTclWindow.fdtb {base} {
 	wm title $base "Toolbar"
 	radiobutton $base.rb1 \
 		-anchor w -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-highlightthickness 0 -text Point -value point -variable fdvar(tool) \
 		-width 9 
 	radiobutton $base.rb2 \
 		-anchor w -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
-		-foreground #000000 -highlightthickness 0 -selectcolor #0000ee \
+		-foreground #000000 -highlightthickness 0 \
 		-text Label -value label -variable fdvar(tool) -width 9 
 	radiobutton $base.rb3 \
 		-anchor w -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-highlightthickness 0 -text Entry -value entry -variable fdvar(tool) \
 		-width 9 
 	radiobutton $base.rb4 \
 		-anchor w -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-highlightthickness 0 -text Button -value button \
 		-variable fdvar(tool) -width 9 
 	radiobutton $base.rb5 \
 		-anchor w -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
 		-highlightthickness 0 -text {List box} -value listbox \
 		-variable fdvar(tool) -width 9 
 	radiobutton $base.rb6 \
 		-anchor w -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
 		-highlightthickness 0 -text {Check box} -value checkbox \
 		-variable fdvar(tool) -width 9 
 	radiobutton $base.rb7 \
 		-anchor w -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
 		-highlightthickness 0 -text {Radio btn} -value radio \
 		-variable fdvar(tool) -width 9 
 	radiobutton $base.rb8 \
 		-anchor w -borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
 		-highlightthickness 0 -text Query -value query -variable fdvar(tool) \
 		-width 9 
-	###################
-	# SETTING GEOMETRY
-	###################
 	grid $base.rb1 \
 		-in .fdtb -column 0 -row 0 -columnspan 1 -rowspan 1 
 	grid $base.rb2 \
@@ -4753,9 +4728,6 @@ proc vTclWindow.sqlw {base} {
 	if {[winfo exists $base]} {
 		wm deiconify $base; return
 	}
-	###################
-	# CREATING WIDGETS
-	###################
 	toplevel $base -class Toplevel
 	wm focusmodel $base passive
 	wm geometry $base 551x408+192+169
@@ -4774,18 +4746,13 @@ proc vTclWindow.sqlw {base} {
 		-borderwidth 1 -command {.sqlw.f.t yview} -orient vert -width 10 
 	text $base.f.t \
 		-borderwidth 1 \
-		-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* \
 		-height 200 -width 200 -wrap word \
 		-xscrollcommand {.sqlw.f.01 set} \
 		-yscrollcommand {.sqlw.f.02 set} 
 	button $base.b1 \
-		-borderwidth 1 -command {.sqlw.f.t delete 1.0 end} -padx 9 \
-		-pady 3 -text Clean 
+		-borderwidth 1 -command {.sqlw.f.t delete 1.0 end} -text Clean 
 	button $base.b2 \
-		-borderwidth 1 -command {destroy .sqlw} -padx 9 -pady 3 -text Close 
-	###################
-	# SETTING GEOMETRY
-	###################
+		-borderwidth 1 -command {destroy .sqlw} -text Close 
 	grid columnconf $base 0 -weight 1
 	grid columnconf $base 1 -weight 1
 	grid rowconf $base 0 -weight 1
@@ -4806,6 +4773,180 @@ proc vTclWindow.sqlw {base} {
 		-in .sqlw -column 1 -row 1 -columnspan 1 -rowspan 1 
 }
 
+proc vTclWindow.rcw {base} {
+    if {$base == ""} {
+        set base .rcw
+    }
+    if {[winfo exists $base]} {
+        wm deiconify $base; return
+    }
+    toplevel $base -class Toplevel
+    wm focusmodel $base passive
+    wm geometry $base 215x75+258+213
+    wm maxsize $base 1009 738
+    wm minsize $base 1 1
+    wm overrideredirect $base 0
+    wm resizable $base 0 0
+    wm deiconify $base
+    wm title $base "Rename field"
+    label $base.l1 \
+        -borderwidth 0 -text {New name} 
+    entry $base.e1 \
+        -background #fefefe -borderwidth 1 -textvariable tiw(new_cn)
+	bind $base.e1 <Key-KP_Enter> "rename_column"
+	bind $base.e1 <Key-Return> "rename_column"
+    frame $base.f \
+        -height 75 -relief groove -width 147 
+    button $base.f.b1 \
+        -borderwidth 1 -command rename_column -text Rename 
+    button $base.f.b2 \
+        -borderwidth 1 -command {Window destroy .rcw} -text Cancel 
+    label $base.l2 -borderwidth 0 
+    grid $base.l1 \
+        -in .rcw -column 0 -row 0 -columnspan 1 -rowspan 1 
+    grid $base.e1 \
+        -in .rcw -column 1 -row 0 -columnspan 1 -rowspan 1 
+    grid $base.f \
+        -in .rcw -column 0 -row 4 -columnspan 2 -rowspan 1 
+    grid $base.f.b1 \
+        -in .rcw.f -column 0 -row 0 -columnspan 1 -rowspan 1 
+    grid $base.f.b2 \
+        -in .rcw.f -column 1 -row 0 -columnspan 1 -rowspan 1 
+    grid $base.l2 \
+        -in .rcw -column 0 -row 3 -columnspan 1 -rowspan 1 
+}
+
+proc vTclWindow.anfw {base} {
+    if {$base == ""} {
+        set base .anfw
+    }
+    if {[winfo exists $base]} {
+        wm deiconify $base; return
+    }
+    toplevel $base -class Toplevel
+    wm focusmodel $base passive
+    wm geometry $base 302x114+195+175
+    wm maxsize $base 1009 738
+    wm minsize $base 1 1
+    wm overrideredirect $base 0
+    wm resizable $base 0 0
+    wm deiconify $base
+    wm title $base "Add new field"
+    label $base.l1 \
+        -borderwidth 0 \
+        -text {Field name} 
+    entry $base.e1 \
+        -background #fefefe -borderwidth 1 -textvariable anfw(name) 
+    bind $base.e1 <Key-KP_Enter> {
+        focus .anfw.e2
+    }
+    bind $base.e1 <Key-Return> {
+        focus .anfw.e2
+    }
+    label $base.l2 \
+        -borderwidth 0 \
+        -text {Field type} 
+    entry $base.e2 \
+        -background #fefefe -borderwidth 1 -textvariable anfw(type) 
+    bind $base.e2 <Key-KP_Enter> {
+        anfw:add
+    }
+    bind $base.e2 <Key-Return> {
+        anfw:add
+    }
+    button $base.b1 \
+        -borderwidth 1 -command anfw:add -text {Add field} 
+    button $base.b2 \
+        -borderwidth 1 -command {Window destroy .anfw} -text Cancel 
+    place $base.l1 \
+        -x 25 -y 10 -anchor nw -bordermode ignore 
+    place $base.e1 \
+        -x 98 -y 7 -width 178 -height 22 -anchor nw -bordermode ignore 
+    place $base.l2 \
+        -x 25 -y 40 -anchor nw -bordermode ignore 
+    place $base.e2 \
+        -x 98 -y 37 -width 178 -height 22 -anchor nw -bordermode ignore 
+    place $base.b1 \
+        -x 70 -y 75 -anchor nw -bordermode ignore 
+    place $base.b2 \
+        -x 160 -y 75 -anchor nw -bordermode ignore 
+}
+
+proc vTclWindow.uw {base} {
+    if {$base == ""} {
+        set base .uw
+    }
+    if {[winfo exists $base]} {
+        wm deiconify $base; return
+    }
+    toplevel $base -class Toplevel
+    wm focusmodel $base passive
+    wm geometry $base 263x220+233+165
+    wm maxsize $base 1009 738
+    wm minsize $base 1 1
+    wm overrideredirect $base 0
+    wm resizable $base 0 0
+    wm deiconify $base
+    wm title $base "Define new user"
+    label $base.l1 \
+        -borderwidth 0 -anchor w -text "User name"
+    entry $base.e1 \
+        -background #fefefe -borderwidth 1 -textvariable uw(username) 
+	bind $base.e1 <Key-Return> "focus .uw.e2"
+	bind $base.e1 <Key-KP_Enter> "focus .uw.e2"
+    label $base.l2 \
+        -borderwidth 0 -text Password 
+    entry $base.e2 \
+        -background #fefefe -borderwidth 1 -show * -textvariable uw(password) 
+	bind $base.e2 <Key-Return> "focus .uw.e3"
+	bind $base.e2 <Key-KP_Enter> "focus .uw.e3"
+    label $base.l3 \
+        -borderwidth 0 -text {verify password} 
+    entry $base.e3 \
+        -background #fefefe -borderwidth 1 -show * -textvariable uw(verify) 
+	bind $base.e3 <Key-Return> "focus .uw.cb1"
+	bind $base.e3 <Key-KP_Enter> "focus .uw.cb1"
+    checkbutton $base.cb1 \
+        -borderwidth 1 -offvalue NOCREATEDB -onvalue CREATEDB \
+        -text {Alow user to create databases } -variable uw(createdb) 
+    checkbutton $base.cb2 \
+        -borderwidth 1 -offvalue NOCREATEUSER -onvalue CREATEUSER \
+        -text {Allow users to create other users} -variable uw(createuser) 
+    label $base.l4 \
+        -borderwidth 0 -anchor w -text {Valid until (date)} 
+    entry $base.e4 \
+        -background #fefefe -borderwidth 1 -textvariable uw(valid)
+	bind $base.e4 <Key-Return> "focus .uw.b1"
+	bind $base.e4 <Key-KP_Enter> "focus .uw.b1"
+    button $base.b1 \
+        -borderwidth 1 -command uw:create_user -text Create 
+    button $base.b2 \
+        -borderwidth 1 -command {Window destroy .uw} -text Cancel 
+    place $base.l1 \
+        -x 5 -y 7 -width 62 -height 16 -anchor nw -bordermode ignore 
+    place $base.e1 \
+        -x 109 -y 5 -width 146 -height 20 -anchor nw -bordermode ignore 
+    place $base.l2 \
+        -x 5 -y 35 -anchor nw -bordermode ignore 
+    place $base.e2 \
+        -x 109 -y 32 -width 146 -height 20 -anchor nw -bordermode ignore 
+    place $base.l3 \
+        -x 5 -y 60 -anchor nw -bordermode ignore 
+    place $base.e3 \
+        -x 109 -y 58 -width 146 -height 20 -anchor nw -bordermode ignore 
+    place $base.cb1 \
+        -x 5 -y 90 -anchor nw -bordermode ignore 
+    place $base.cb2 \
+        -x 5 -y 115 -anchor nw -bordermode ignore 
+    place $base.l4 \
+        -x 5 -y 145 -width 100 -height 16 -anchor nw -bordermode ignore 
+    place $base.e4 \
+        -x 110 -y 143 -width 146 -height 20 -anchor nw -bordermode ignore 
+    place $base.b1 \
+        -x 45 -y 185 -anchor nw -width 70 -height 25 -bordermode ignore 
+    place $base.b2 \
+        -x 140 -y 185 -anchor nw -width 70 -height 25 -bordermode ignore 
+}
 
 Window show .
 Window show .dw