diff --git a/common/string.cpp b/common/string.cpp
index f35f314697..d12ea81cb3 100644
--- a/common/string.cpp
+++ b/common/string.cpp
@@ -9,320 +9,366 @@
 
 
 /*********************************************************************/
-int ReadDelimitedText(char * dest, char * source, int NbMaxChar )
+int ReadDelimitedText( char* dest, char* source, int NbMaxChar )
 /*********************************************************************/
+
 /* lit et place dans dest la chaine de caractere trouvee dans source,
-	delimitee par " .
-	transfere NbMaxChar max
-	retourne le nombre de codes lus dans source
-	dest est termine par NULL
-*/
+ *  delimitee par " .
+ *  transfere NbMaxChar max
+ *  retourne le nombre de codes lus dans source
+ *  dest est termine par NULL
+ */
 {
-int ii, jj, flag = 0;
+    int ii, jj, flag = 0;
 
-	 for ( ii = 0, jj = 0; ii < NbMaxChar - 1 ; jj++, source++)
-		{
-		if ( * source == 0 ) break; /* fin de ligne */
-		if ( * source == '"' )			/* delimiteur trouve */
-			{
-			if ( flag ) break;			/* Fin de texte delimite */
-			flag = 1;					/* Marque 1er delimiteur trouve */
-			}
-		else if ( flag )
-			{
-			* dest = * source; dest++; ii++;
-			}
-		}
-	*dest = 0;  /* Null terminaison */
-	return (jj);
+    for( ii = 0, jj = 0; ii < NbMaxChar - 1; jj++, source++ )
+    {
+        if( *source == 0 )
+            break;                      /* fin de ligne */
+        if( *source == '"' )            /* delimiteur trouve */
+        {
+            if( flag )
+                break;                  /* Fin de texte delimite */
+            flag = 1;                   /* Marque 1er delimiteur trouve */
+        }
+        else if( flag )
+        {
+            *dest = *source; dest++; ii++;
+        }
+    }
+
+    *dest = 0;  /* Null terminaison */
+    return jj;
 }
 
 
 /********************************/
-char * StrPurge(char * text)
+char* StrPurge( char* text )
 /********************************/
+
 /* Supprime les caracteres Space en debut de la ligne text
-	retourne un pointeur sur le 1er caractere non Space de text
-*/
+ *  retourne un pointeur sur le 1er caractere non Space de text
+ */
 {
-char * ptspace;
-	if ( text == NULL ) return NULL;
+    char* ptspace;
 
-	while( (*text <= ' ') && *text ) text++;
-	ptspace = text + strlen(text) -1;
-	while( (*ptspace <= ' ') && *ptspace && (ptspace >= text) )
-		{
-		*ptspace = 0; ptspace--;
-		}
-	return(text);
+    if( text == NULL )
+        return NULL;
+
+    while( (*text <= ' ') && *text )
+        text++;
+
+    ptspace = text + strlen( text ) - 1;
+    while( (*ptspace <= ' ') && *ptspace && (ptspace >= text) )
+    {
+        *ptspace = 0; ptspace--;
+    }
+
+    return text;
 }
 
 
 /*****************************************************************/
-char * GetLine(FILE *File, char *Line, int *LineNum, int SizeLine)
+char* GetLine( FILE* File, char* Line, int* LineNum, int SizeLine )
 /*****************************************************************/
-/* Routine de lecture de 1 ligne utile
-	retourne la 1ere ligne utile lue.
-	elimine lignes vides et commentaires
-	incremente *LineNum a chaque ligne lue
-*/
-{
-	do  {
-		if (fgets(Line, SizeLine, File) == NULL) return NULL;
-		if( LineNum ) *LineNum += 1;
-		} while (Line[0] == '#' || Line[0] == '\n' ||  Line[0] == '\r' ||
-				 Line[0] == 0);
 
-	strtok(Line,"\n\r");
-	return Line;
+/* Routine de lecture de 1 ligne utile
+ *  retourne la 1ere ligne utile lue.
+ *  elimine lignes vides et commentaires
+ *  incremente *LineNum a chaque ligne lue
+ */
+{
+    do  {
+        if( fgets( Line, SizeLine, File ) == NULL )
+            return NULL;
+        if( LineNum )
+            *LineNum += 1;
+    } while( Line[0] == '#' || Line[0] == '\n' ||  Line[0] == '\r'
+             || Line[0] == 0 );
+
+    strtok( Line, "\n\r" );
+    return Line;
 }
 
 
 /*******************************/
-char * DateAndTime(char * Line)
+char* DateAndTime( char* Line )
 /*******************************/
 /* Retourne la chaine de caractere donnant date+heure */
 {
-time_t Time_Buf;
-struct tm * Date;
+    time_t     Time_Buf;
+    struct tm* Date;
 
-	time(&Time_Buf);
-	Date = gmtime(&Time_Buf);
-	sprintf(Line,"%d/%d/%d-%2.2d:%2.2d:%2.2d",
-			Date->tm_mday, Date->tm_mon + 1, Date->tm_year + 1900,
-			Date->tm_hour, Date->tm_min, Date->tm_sec );
+    time( &Time_Buf );
+    Date = gmtime( &Time_Buf );
+    sprintf( Line, "%d/%d/%d-%2.2d:%2.2d:%2.2d",
+             Date->tm_mday, Date->tm_mon + 1, Date->tm_year + 1900,
+             Date->tm_hour, Date->tm_min, Date->tm_sec );
 
-	return(Line);
+    return Line;
 }
 
+
 /*******************************/
 wxString DateAndTime()
 /*******************************/
 /* Retourne la chaine de caractere donnant date+heure */
 {
-time_t Time_Buf;
-struct tm * Date;
-wxString Line;
+    time_t     Time_Buf;
+    struct tm* Date;
+    wxString   Line;
 
-	time(&Time_Buf);
-	Date = gmtime(&Time_Buf);
-	Line.Printf( wxT("%d/%d/%d-%2.2d:%2.2d:%2.2d"),
-			Date->tm_mday, Date->tm_mon + 1, Date->tm_year + 1900,
-			Date->tm_hour, Date->tm_min, Date->tm_sec );
+    time( &Time_Buf );
+    
+    Date = gmtime( &Time_Buf );
+    
+    Line.Printf( wxT( "%d/%d/%d-%2.2d:%2.2d:%2.2d" ),
+                 Date->tm_mday, Date->tm_mon + 1, Date->tm_year + 1900,
+                 Date->tm_hour, Date->tm_min, Date->tm_sec );
 
-	return(Line);
+    return Line;
 }
 
 
 /************************************************************/
-int StrLenNumCmp(const wxChar *str1,const wxChar *str2, int NbMax)
+int StrLenNumCmp( const wxChar* str1, const wxChar* str2, int NbMax )
 /************************************************************/
+
 /*
-routine (compatible qsort() ) de comparaison pour classement alphab�tique
-Analogue a strncmp() mais les nombres sont compar�s selon leur valeur num�rique
-et non pas par leur code ascii
-*/
+ *  routine (compatible qsort() ) de comparaison pour classement alphab�tique
+ *  Analogue a strncmp() mais les nombres sont compar�s selon leur valeur num�rique
+ *  et non pas par leur code ascii
+ */
 {
-int i;
-int nb1 = 0 , nb2 = 0;
+    int i;
+    int nb1 = 0, nb2 = 0;
 
-	if( (str1 == NULL) || (str2 == NULL) ) return(0);
+    if( (str1 == NULL) || (str2 == NULL) )
+        return 0;
 
-	for ( i = 0 ; i < NbMax ; i++ )
-		{
-		if (isdigit(*str1) && isdigit(*str2) ) /* nombres en jeu */
-			{
-			nb1 = 0 ; nb2 = 0 ;
-			while (isdigit(*str1))
-				{
-				nb1 = nb1*10 + *str1 -'0'; str1++;
-				}
-			while (isdigit(*str2))
-				{
-				nb2 = nb2*10 + *str2 -'0'; str2++;
-				}
-			if ( nb1 < nb2 ) return(-1) ;
-			if ( nb1 > nb2 ) return(1) ;
-			}
+    for( i = 0; i < NbMax; i++ )
+    {
+        if( isdigit( *str1 ) && isdigit( *str2 ) ) /* nombres en jeu */
+        {
+            nb1 = 0; nb2 = 0;
+            while( isdigit( *str1 ) )
+            {
+                nb1 = nb1 * 10 + *str1 - '0'; str1++;
+            }
 
-		if( *str1 < *str2 ) return(-1) ;
-		if( *str1 > *str2 ) return(1) ;
-		if( (*str1 == 0 ) && ( *str2 == 0 ) ) return(0) ;
-		str1++ ; str2++ ;
-		}
+            while( isdigit( *str2 ) )
+            {
+                nb2 = nb2 * 10 + *str2 - '0'; str2++;
+            }
 
-	return(0);
+            if( nb1 < nb2 )
+                return -1;
+            if( nb1 > nb2 )
+                return 1;
+        }
+
+        if( *str1 < *str2 )
+            return -1;
+        if( *str1 > *str2 )
+            return 1;
+        if( (*str1 == 0 ) && ( *str2 == 0 ) )
+            return 0;
+        str1++; str2++;
+    }
+
+    return 0;
 }
 
 
 /***********************************************/
-int StrNumICmp(const wxChar *str1,const wxChar *str2)
+int StrNumICmp( const wxChar* str1, const wxChar* str2 )
 /***********************************************/
+
 /*
-routine (compatible qsort() ) de comparaison pour classement alphab�tique,
-avec lower case == upper case.
-Analogue a stricmp() mais les nombres sont compar�s selon leur valeur num�rique
-et non pas par leur code ascii
-*/
+ *  routine (compatible qsort() ) de comparaison pour classement alphab�tique,
+ *  avec lower case == upper case.
+ *  Analogue a stricmp() mais les nombres sont compar�s selon leur valeur num�rique
+ *  et non pas par leur code ascii
+ */
 {
-	return StrLenNumICmp( str1, str2, 32735);
+    return StrLenNumICmp( str1, str2, 32735 );
 }
 
 
 /**************************************************************/
-int StrLenNumICmp(const wxChar *str1,const wxChar *str2, int NbMax)
+int StrLenNumICmp( const wxChar* str1, const wxChar* str2, int NbMax )
 /**************************************************************/
+
 /*
-routine (compatible qsort() ) de comparaison pour classement alphabetique,
-avec lower case == upper case.
-Analogue a stricmp() mais les nombres sont compares selon leur valeur numerique
-et non pas par leur code ascii
-*/
+ *  routine (compatible qsort() ) de comparaison pour classement alphabetique,
+ *  avec lower case == upper case.
+ *  Analogue a stricmp() mais les nombres sont compares selon leur valeur numerique
+ *  et non pas par leur code ascii
+ */
 {
-int i;
-int nb1 = 0 , nb2 = 0;
+    int i;
+    int nb1 = 0, nb2 = 0;
 
-	if( (str1 == NULL) || (str2 == NULL) ) return(0);
+    if( (str1 == NULL) || (str2 == NULL) )
+        return 0;
 
-	for ( i = 0 ; i < NbMax ; i++ )
-		{
-		if (isdigit(*str1) && isdigit(*str2) ) /* nombres en jeu */
-			{
-			nb1 = 0 ; nb2 = 0 ;
-			while (isdigit(*str1))
-				{
-				nb1 = nb1*10 + *str1 -'0'; str1++;
-				}
-			while (isdigit(*str2))
-				{
-				nb2 = nb2*10 + *str2 -'0'; str2++;
-				}
-			if ( nb1 < nb2 ) return(-1) ;
-			if ( nb1 > nb2 ) return(1) ;
-			}
+    for( i = 0; i < NbMax; i++ )
+    {
+        if( isdigit( *str1 ) && isdigit( *str2 ) ) /* nombres en jeu */
+        {
+            nb1 = 0; nb2 = 0;
+            while( isdigit( *str1 ) )
+            {
+                nb1 = nb1 * 10 + *str1 - '0'; str1++;
+            }
 
-		if( toupper(*str1) < toupper(*str2) ) return(-1) ;
-		if( toupper(*str1) > toupper(*str2) ) return(1) ;
-		if( (*str1 == 0 ) && ( *str2 == 0 ) ) return(0) ;
-		str1++ ; str2++ ;
-		}
+            while( isdigit( *str2 ) )
+            {
+                nb2 = nb2 * 10 + *str2 - '0'; str2++;
+            }
 
-	return(0);
+            if( nb1 < nb2 )
+                return -1;
+            if( nb1 > nb2 )
+                return 1;
+        }
+
+        if( toupper( *str1 ) < toupper( *str2 ) )
+            return -1;
+        if( toupper( *str1 ) > toupper( *str2 ) )
+            return 1;
+        if( (*str1 == 0 ) && ( *str2 == 0 ) )
+            return 0;
+        str1++; str2++;
+    }
+
+    return 0;
 }
 
 
 /***********************************************************************/
-bool WildCompareString(const wxString & pattern, const wxString & string_to_tst,
-			bool case_sensitive )
+bool WildCompareString( const wxString& pattern, const wxString& string_to_tst,
+                        bool case_sensitive )
 /***********************************************************************/
+
 /* compare 2 noms de composants, selon regles usuelles
-	( Jokers * , ? , autoris�s).
-	la chaine de reference est "pattern"
-	si case_sensitive == TRUE, comparaison exacte
-	retourne TRUE si match
-	retourne FALSE si differences
-*/
+ *  ( Jokers * , ? , autoris�s).
+ *  la chaine de reference est "pattern"
+ *  si case_sensitive == TRUE, comparaison exacte
+ *  retourne TRUE si match
+ *  retourne FALSE si differences
+ */
 {
-const wxChar *cp = NULL, *mp = NULL;
-const wxChar * wild, * string;
-wxString _pattern, _string_to_tst;
+    const wxChar* cp = NULL, * mp = NULL;
+    const wxChar* wild, * string;
+    wxString      _pattern, _string_to_tst;
 
-	if ( case_sensitive )
-	{
-		wild = pattern.GetData(); string = string_to_tst.GetData();
-	}
-	else
-	{
-		_pattern = pattern; _pattern.MakeUpper();
-		_string_to_tst = string_to_tst; _string_to_tst.MakeUpper();
-		wild = _pattern.GetData(); string = _string_to_tst.GetData();
-	}
+    if( case_sensitive )
+    {
+        wild = pattern.GetData(); string = string_to_tst.GetData();
+    }
+    else
+    {
+        _pattern = pattern; _pattern.MakeUpper();
+        _string_to_tst = string_to_tst; _string_to_tst.MakeUpper();
+        wild = _pattern.GetData(); string = _string_to_tst.GetData();
+    }
 
-	while ( (*string) && (*wild != '*') )
-	{
-		if ( (*wild != *string) && (*wild != '?') ) return FALSE;
-		wild++; string++;
-	}
+    while( (*string) && (*wild != '*') )
+    {
+        if( (*wild != *string) && (*wild != '?') )
+            return FALSE;
+        wild++; string++;
+    }
 
-	while (*string)
-	{
-		if (*wild == '*')
-		{
-			if (!*++wild) return 1;
-			mp = wild;
-			cp = string+1;
-		}
-		else if ((*wild == *string) || (*wild == '?'))
-		{
-			wild++;
-			string++;
-		}
-		else
-		{
-			wild = mp;
-			string = cp++;
-		}
-	}
+    while( *string )
+    {
+        if( *wild == '*' )
+        {
+            if( ! * ++wild )
+                return 1;
+            mp = wild;
+            cp = string + 1;
+        }
+        else if( (*wild == *string) || (*wild == '?') )
+        {
+            wild++;
+            string++;
+        }
+        else
+        {
+            wild   = mp;
+            string = cp++;
+        }
+    }
 
-	while (*wild == '*') {
-		wild++;
-	}
-	return !*wild;
+    while( *wild == '*' )
+    {
+        wild++;
+    }
+
+    return ! * wild;
 }
 
+
 /***********************************************/
-void ChangeSpaces(char * Text, int NewChar)
+void ChangeSpaces( char* Text, int NewChar )
 /***********************************************/
 /* Change dans un texte les espaces en NewChar */
 {
-	if ( Text == NULL ) return;
-	while( *Text )
-		{
-		if( *Text == ' ') *Text = (char) NewChar;
-		Text++;
-		}
+    if( Text == NULL )
+        return;
+    while( *Text )
+    {
+        if( *Text == ' ' )
+            *Text = (char) NewChar;
+        Text++;
+    }
 }
 
 
-
 /***************************/
-char * to_point(char * Text)
+char* to_point( char* Text )
 /**************************/
+
 /* convertit les , en . dans une chaine. utilis� pour compenser
-l'internalisationde la fct printf
-qui genere les flottants avec une virgule au lieu du point
-*/
+ *  l'internalisationde la fct printf
+ *  qui genere les flottants avec une virgule au lieu du point
+ */
 {
-char * line = Text;
+    char* line = Text;
 
-	if ( Text == NULL ) return NULL;
-	for ( ; *Text != 0; Text++ )
-	{
-		if (*Text == ',') *Text = '.';
-	}
+    if( Text == NULL )
+        return NULL;
+    for( ; *Text != 0; Text++ )
+    {
+        if( *Text == ',' )
+            *Text = '.';
+    }
 
-	return line;
+    return line;
 }
 
 
 /********************************/
-char * strupper(char * Text)
+char* strupper( char* Text )
 /********************************/
+
 /* Change les caracteres 'a' ... 'z' en 'A' ... 'Z'. dans la chaine Text.
-Retourne Text
-*/
+ *  Retourne Text
+ */
 {
-char * code = Text;
+    char* code = Text;
 
-	if( Text )
-		{
-		while( * code)
-			{
-			if( (*code >= 'a') && (*code <= 'z') ) *code += 'A' - 'a';
-			code ++;
-			}
-		}
+    if( Text )
+    {
+        while( *code )
+        {
+            if( (*code >= 'a') && (*code <= 'z') )
+                *code += 'A' - 'a';
+            code++;
+        }
+    }
 
-	return(Text);
+    return Text;
 }
-
diff --git a/pcbnew/drc.cpp b/pcbnew/drc.cpp
index 7bcd6a45a1..9e115a35b6 100644
--- a/pcbnew/drc.cpp
+++ b/pcbnew/drc.cpp
@@ -61,15 +61,20 @@ void WinEDA_PcbFrame::Install_Test_DRC_Frame( wxDC* DC )
 void DRC::ShowDialog()
 {
     updatePointers();
+    bool    isNew = false;
 
     if( !m_ui )
     {
         m_ui = new DrcDialog( this, m_mainWindow );
+        isNew = true;
     }
 
     // @todo enter retentitive member data into the DrcDialog here
 
-    m_ui->Show(true);
+    if( isNew )
+        m_ui->Show(true);
+    else
+        m_ui->Raise();
 
    // @todo capture the UI entered data into this DRC object. BUT in the OK handler
 }
@@ -226,6 +231,8 @@ void DRC::WriteReport( FILE* fp )
     for( int i=0; i<m_pcb->GetOPENNETCount();  ++i )
         fprintf( fp, m_pcb->GetOPENNET(i)->GetReporter().ShowReport().mb_str() );
     */
+    
+    fprintf( fp, "** End of Report **\n" );
 }
 
 
diff --git a/todo.txt b/todo.txt
index 73d57ad921..be72e8b923 100644
--- a/todo.txt
+++ b/todo.txt
@@ -47,6 +47,14 @@ understanding by new developers.
 Need to do this using DialogBlocks.
 
 
+2007-Nov-30 Assigned To: nobody
+asked by: Dick Hollenbeck
+================================================================================
+wxString DateAndTime()
+It seems the above function should be using a more user friendly "local time",
+not gmtime.
+
+
 2007-Nov-4 Assigned To: dick, but probably not til January.
 ================================================================================
 Enhance DRC dialog box to: