diff -Naur kgeo/kgeo/Makefile.am kgeo.new/kgeo/Makefile.am
--- kgeo/kgeo/Makefile.am	Fri Jul 26 09:40:16 2002
+++ kgeo.new/kgeo/Makefile.am	Mon Oct 14 11:26:43 2002
@@ -1,11 +1,11 @@
 ####### kdevelop will overwrite this part!!! (begin)##########
 bin_PROGRAMS = kgeo
-kgeo_SOURCES = colorlabel.cpp preferencesdialog.ui mainwidget.ui edittextdialog.ui coordinatesdialog.ui vector.cpp triangle.cpp tracer.cpp thicker.cpp text.cpp splashscreen.cpp slope.cpp segment.cpp rotation.cpp ray.cpp pointonline.cpp pointofconc.cpp point.cpp perpendicular.cpp parallel.cpp move.cpp mirrorpoint.cpp metricscenter.cpp line.cpp kgeoSearchRoutines.cpp kgeoModeHandling.cpp kgeoMenuToolbarSlots.cpp kgeoFileHandling.cpp kgeoConstructor.cpp geowidget.cpp geotool.cpp geopoint.cpp geoobjects.cpp geomeasure.cpp geoline.cpp fixedcircle.cpp eraser.cpp distance.cpp coordinates.cpp colorizer.cpp circumference.cpp circle.cpp bisection.cpp attacher.cpp area.cpp arc.cpp angle.cpp kgeo.cpp main.cpp 
+kgeo_SOURCES = colorlabel.cpp preferencesdialog.ui mainwidget.ui edittextdialog.ui coordinatesdialog.ui vector.cpp triangle.cpp tracer.cpp thicker.cpp text.cpp splashscreen.cpp slope.cpp segment.cpp rotation.cpp ray.cpp pointonline.cpp pointofconc.cpp pointlinecircle1.cpp point.cpp perpendicular.cpp parallel.cpp radicalline.cpp move.cpp mirrorpoint.cpp metricscenter.cpp line.cpp kgeoSearchRoutines.cpp kgeoModeHandling.cpp kgeoMenuToolbarSlots.cpp kgeoFileHandling.cpp kgeoConstructor.cpp geowidget.cpp geotool.cpp geopoint.cpp geoobjects.cpp geomeasure.cpp geoline.cpp fixedcircle.cpp eraser.cpp distance.cpp coordinates.cpp colorizer.cpp circumference.cpp circle.cpp bisection.cpp attacher.cpp area.cpp arc.cpp angle.cpp kgeo.cpp main.cpp 
 kgeo_LDADD   = -lkdeprint 
 
 SUBDIRS = toolbar pics 
 
-EXTRA_DIST = main.cpp kgeo.cpp kgeo.h kgeoui.rc kgeo.desktop lo32-app-kgeo.png lo16-app-kgeo.png angle.cpp angle.h arc.cpp arc.h area.cpp area.h attacher.cpp attacher.h bisection.cpp bisection.h circle.cpp circle.h circumference.cpp circumference.h colorizer.cpp colorizer.h coordinates.cpp coordinates.h distance.cpp distance.h eraser.cpp eraser.h fixedcircle.cpp fixedcircle.h geoline.cpp geoline.h geomeasure.cpp geomeasure.h geoobjects.cpp geoobjects.h geopoint.cpp geopoint.h geotool.cpp geotool.h geowidget.cpp geowidget.h kgeoConstructor.cpp kgeoFileHandling.cpp kgeoMenuToolbarSlots.cpp kgeoModeHandling.cpp kgeoSearchRoutines.cpp line.cpp line.h metricscenter.cpp metricscenter.h mirrorpoint.cpp mirrorpoint.h move.cpp move.h parallel.cpp parallel.h perpendicular.cpp perpendicular.h point.cpp point.h pointofconc.cpp pointofconc.h pointonline.cpp pointonline.h ray.cpp ray.h resource.h rotation.cpp rotation.h segment.cpp segment.h slope.cpp slope.h splashscreen.cpp splashscreen.h text.cpp text.h thicker.cpp thicker.h tracer.cpp tracer.h triangle.cpp triangle.h vector.cpp vector.h coordinatesdialog.ui edittextdialog.ui mainwidget.ui preferencesdialog.ui colorlabel.cpp colorlabel.h
+EXTRA_DIST = main.cpp kgeo.cpp kgeo.h kgeoui.rc kgeo.desktop lo32-app-kgeo.png lo16-app-kgeo.png angle.cpp angle.h arc.cpp arc.h area.cpp area.h attacher.cpp attacher.h bisection.cpp bisection.h circle.cpp circle.h circumference.cpp circumference.h colorizer.cpp colorizer.h coordinates.cpp coordinates.h distance.cpp distance.h eraser.cpp eraser.h fixedcircle.cpp fixedcircle.h geoline.cpp geoline.h geomeasure.cpp geomeasure.h geoobjects.cpp geoobjects.h geopoint.cpp geopoint.h geotool.cpp geotool.h geowidget.cpp geowidget.h kgeoConstructor.cpp kgeoFileHandling.cpp kgeoMenuToolbarSlots.cpp kgeoModeHandling.cpp kgeoSearchRoutines.cpp line.cpp line.h metricscenter.cpp metricscenter.h mirrorpoint.cpp mirrorpoint.h move.cpp move.h parallel.cpp parallel.h perpendicular.cpp perpendicular.h radicalline.cpp radicalline.h point.cpp point.h pointofconc.cpp pointofconc.h pointlinecircle1.cpp pointlinecircle1.h pointonline.cpp pointonline.h ray.cpp ray.h resource.h rotation.cpp rotation.h segment.cpp segment.h slope.cpp slope.h splashscreen.cpp splashscreen.h text.cpp text.h thicker.cpp thicker.h tracer.cpp tracer.h triangle.cpp triangle.h vector.cpp vector.h coordinatesdialog.ui edittextdialog.ui mainwidget.ui preferencesdialog.ui colorlabel.cpp colorlabel.h
 
 KDE_ICON = kgeo
 
diff -Naur kgeo/kgeo/coordinates.cpp kgeo.new/kgeo/coordinates.cpp
--- kgeo/kgeo/coordinates.cpp	Mon May 27 12:08:35 2002
+++ kgeo.new/kgeo/coordinates.cpp	Mon Oct 14 11:22:32 2002
@@ -232,6 +232,13 @@
    return orient;
 }
 
+double Coordinates::getLengthsq()
+{
+	double lengthsq	=	pow( d_x, 2 ) + pow( d_y, 2 );
+
+	return lengthsq;
+}
+
 double Coordinates::getLength()
 {
 	double length	=	sqrt( pow( d_x, 2 ) + pow( d_y, 2 ) );
diff -Naur kgeo/kgeo/coordinates.h kgeo.new/kgeo/coordinates.h
--- kgeo/kgeo/coordinates.h	Mon May 27 12:08:35 2002
+++ kgeo.new/kgeo/coordinates.h	Mon Oct 14 11:22:32 2002
@@ -89,6 +89,8 @@
 		double orientation( Coordinates coord1, Coordinates coord2 );
 		/** Get length of vector. */
 		double getLength();
+		/** Get square length of vector. */
+		double getLengthsq();
 		/** Get angle of three points in degrees. */
 		double getAngleDeg( Coordinates coord1, Coordinates coord2 );
 		/** Get angle of three points in rad. */
diff -Naur kgeo/kgeo/geoobjects.cpp kgeo.new/kgeo/geoobjects.cpp
--- kgeo/kgeo/geoobjects.cpp	Thu May  9 21:14:15 2002
+++ kgeo.new/kgeo/geoobjects.cpp	Mon Oct 14 11:22:32 2002
@@ -294,6 +294,7 @@
 		if ( ( ( *iter ).ID == obj->getID() ) ||
 			 	 ( ( ( *iter ).ID == ID_geoPoint ) && ( isGeoPoint( obj ) ) ) ||
 			 	 ( ( ( *iter ).ID == ID_geoLine ) && ( isGeoLine( obj ) ) ) ||
+			 	 ( ( ( *iter ).ID == ID_geoCircle ) && ( isGeoCircle( obj ) ) ) ||
 			 	 ( ( *iter ).ID == ID_geoObject ) )
 		{
      	if ( amongParents )
@@ -400,6 +401,7 @@
 		if ( ( ( *iter ).ID == obj->getID() ) ||
 			 	 ( ( ( *iter ).ID == ID_geoPoint ) && ( isGeoPoint( obj ) ) ) ||
 			 	 ( ( ( *iter ).ID == ID_geoLine ) && ( isGeoLine( obj ) ) ) ||
+			 	 ( ( ( *iter ).ID == ID_geoCircle ) && ( isGeoCircle( obj ) ) ) ||
 			 	 ( ( *iter ).ID == ID_geoObject ) )
 		{
 			if ( (*iter).num > 0 )
@@ -464,6 +466,8 @@
 		return true;
 	if ( myID == ID_pointOfConc )
 		return true;
+	if ( myID == ID_pointLineCircle1 )
+		return true;
 
 	return false;
 }
@@ -484,6 +488,20 @@
 		return true;
 	if ( myID == ID_vector )
 		return true;
+	if ( myID == ID_radicalline )
+		return true;
+
+	return false;
+}
+
+bool GeoObjects::isGeoCircle( GeoObjects *obj )
+{
+	int myID = obj->getID();
+
+	if ( myID == ID_circle )
+		return true;
+	if ( myID == ID_fixedCircle )
+		return true;
 
 	return false;
 }
@@ -611,6 +629,38 @@
 	}
 }
 
+double GeoObjects::getCircleRadiusSq()
+{
+        Coordinates rvec;
+
+	switch (ID)
+	{
+	   case ID_circle:
+		rvec = parents.first()->getCoordinates() -
+                	parents.next()->getCoordinates();
+
+        	return (rvec.getLengthsq());
+
+	   case ID_fixedCircle:
+		return (radius*radius);
+
+	   default:
+		return (0.0);
+	}
+}
+
+Coordinates GeoObjects::getCircleCenter()
+{
+        Coordinates rvec;
 
+	switch (ID)
+	{
+	   case ID_circle:
+	   case ID_fixedCircle:
+		return (parents.first()->getCoordinates());
 
+	   default:
+		cout << "GeoObjects::getCircleCenter: invalid ID = " << ID << "\n";
+	}
+}
 
diff -Naur kgeo/kgeo/geoobjects.h kgeo.new/kgeo/geoobjects.h
--- kgeo/kgeo/geoobjects.h	Mon May 27 12:08:35 2002
+++ kgeo.new/kgeo/geoobjects.h	Mon Oct 14 11:22:32 2002
@@ -70,6 +70,7 @@
 		virtual int		 				getSize();
 		virtual int 					getZOrder();
 		virtual double				getRadius();
+		virtual double				getCircleRadiusSq();
 		virtual float				getRealRadius(){ return m_realRadius; };
 		virtual double 				getAngle();
 		virtual void					getObjectOverlay( QList <QRect> & );
@@ -77,6 +78,7 @@
 		virtual Coordinates		getCoordinates();
 		virtual Coordinates		getStartCoordinates();
 		virtual Coordinates		getEndCoordinates();
+		virtual Coordinates		getCircleCenter();
 		virtual QColor 				getColor();
 		virtual QString 			identify();
 		virtual bool 					isGeoPoint();
@@ -119,6 +121,7 @@
 		bool processParams( GeoObjects *obj );
 		bool isGeoPoint( GeoObjects *obj );
 		bool isGeoLine( GeoObjects *obj );
+		bool isGeoCircle( GeoObjects *obj );
 
 		void getLineOverlay( QList <QRect> & list, int size, Coordinates coord1, Coordinates coord2 );
 		void getCircleOverlay( QList <QRect> & list, int size, QRect rect, Coordinates coord, double rad );
diff -Naur kgeo/kgeo/kgeo.h kgeo.new/kgeo/kgeo.h
--- kgeo/kgeo/kgeo.h	Wed Sep 18 15:48:24 2002
+++ kgeo.new/kgeo/kgeo.h	Mon Oct 14 11:22:32 2002
@@ -87,6 +87,7 @@
 #include "mirrorpoint.h"
 #include "pointonline.h"
 #include "pointofconc.h"
+#include "pointlinecircle1.h"
 #include "line.h"
 #include "segment.h"
 #include "eraser.h"
@@ -99,6 +100,7 @@
 #include "circle.h"
 #include "fixedcircle.h"
 #include "angle.h"
+#include "radicalline.h"
 #include "distance.h"
 #include "arc.h"
 #include "area.h"
diff -Naur kgeo/kgeo/kgeoConstructor.cpp kgeo.new/kgeo/kgeoConstructor.cpp
--- kgeo/kgeo/kgeoConstructor.cpp	Sun Aug 11 11:16:37 2002
+++ kgeo.new/kgeo/kgeoConstructor.cpp	Mon Oct 14 11:22:32 2002
@@ -247,6 +247,7 @@
 	point->insertButton( UserIcon("pointxy"), ID_buttonPointxy, true, i18n( "Draw a point at (x;y)" ) );
 	point->insertButton( UserIcon("pointOnLine"), ID_buttonPointOnLine, true, i18n( "Draw  a point on a line or circle" )  );
 	point->insertButton( UserIcon("pointOfConc"), ID_buttonPointOfConc, true,    i18n( "Draw the point of concurrency of two lines or two segments" )  );
+	point->insertButton( UserIcon("pointLineCircle1"), ID_buttonPointLineCircle1, true,    i18n( "Draw the point of concurrency of a lines and a circle" )  );
 	point->insertButton( UserIcon("bisection"), ID_buttonBisection, true,   i18n( "Draw the bisection of two points" )  );
 	point->insertButton( UserIcon("mirrorPoint"), ID_buttonMirrorPoint, true,   i18n( "Draw mirror point of point/point or point/line" )  );
 	point->insertButton( UserIcon("rotation"), ID_buttonRotation, true,   i18n( "Rotate one point around another using a certain arc" )  );
@@ -261,6 +262,7 @@
 	line->insertButton( UserIcon("ray"), ID_buttonRay, true,   i18n( "Draw a ray" )  );
 	line->insertButton( UserIcon("parallel"), ID_buttonParallel, true,   i18n( "Draw a parallel of a line" )  );
 	line->insertButton( UserIcon("perpendicular"), ID_buttonPerpendicular, true,   i18n( "Draw the perpendicular line of a line through a point" )  );
+	line->insertButton( UserIcon("radicalline"), ID_buttonRadicalLine, true,   i18n( "Draw the radical line of two circles" )  );
 	line->setFullSize( false );
 
 	KToolBar *circle = new KToolBar( this, QMainWindow::Left, true );
diff -Naur kgeo/kgeo/kgeoFileHandling.cpp kgeo.new/kgeo/kgeoFileHandling.cpp
--- kgeo/kgeo/kgeoFileHandling.cpp	Sun Aug 11 11:16:37 2002
+++ kgeo.new/kgeo/kgeoFileHandling.cpp	Mon Oct 14 11:22:32 2002
@@ -213,6 +213,9 @@
  			case ID_pointOfConc:
  				list.append( new PointOfConc() );
  				break;
+ 			case ID_pointLineCircle1:
+ 				list.append( new PointLineCircle1() );
+ 				break;
  			case ID_angle:
  				list.append( new Angle() );
  				break;
@@ -246,6 +249,9 @@
  			case ID_parallel:
  				list.append( new Parallel() );
  				break;
+ 			case ID_radicalline:
+ 				list.append( new RadicalLine() );
+ 				break;
  			case ID_move:
  				list.append( new Move() );
  				break;
diff -Naur kgeo/kgeo/kgeoMenuToolbarSlots.cpp kgeo.new/kgeo/kgeoMenuToolbarSlots.cpp
--- kgeo/kgeo/kgeoMenuToolbarSlots.cpp	Sun Aug 11 11:16:37 2002
+++ kgeo.new/kgeo/kgeoMenuToolbarSlots.cpp	Mon Oct 14 11:22:32 2002
@@ -63,6 +63,10 @@
 			newObject = new PointOfConc();
 			startConstructionMode(  i18n( "Click on two lines to draw the point of concurrency." ) );
 			break;
+		case ID_buttonPointLineCircle1:
+			newObject = new PointsLineCircle();
+			startConstructionMode(  i18n( "Click on a line and a circle to draw one point of concurrency." ) );
+			break;
 		case ID_buttonBisection:
 			newObject = new Bisection();
 			startConstructionMode(  i18n( "Click on any two points to draw the bisection of them." ) );
@@ -103,6 +107,10 @@
 			newObject = new Perpendicular();
 			startConstructionMode(  i18n( "Click on a line and then on a point through which the perpendicular line will run." ) );
 			break;
+		case ID_buttonRadicalLine:
+			newObject = new RadicalLine();
+			startConstructionMode(  i18n( "Click on the two circles through which the radical line will run." ) );
+			break;
 		case ID_buttonMove:
 			newObject = new Move();
 			startConstructionMode(  i18n( "First, click on the point to move and then on a vector to define the movement." ) );
diff -Naur kgeo/kgeo/pointlinecircle1.cpp kgeo.new/kgeo/pointlinecircle1.cpp
--- kgeo/kgeo/pointlinecircle1.cpp	Thu Jan  1 01:00:00 1970
+++ kgeo.new/kgeo/pointlinecircle1.cpp	Mon Oct 14 11:22:32 2002
@@ -0,0 +1,141 @@
+/***************************************************************************
+                          pointlinecircle1.cpp  -  description
+                             -------------------
+    begin                : Wed Jun 26 2002
+    copyright            : (C) 2002 by Maurizio Paolini
+    email                : paolini@dmf.unicatt.it
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#include "pointlinecircle1.h"
+
+PointsLineCircle::PointsLineCircle(): GeoTool()
+{
+	acceptsGeoPoint = false;
+	ID = ID_pointsLineCircle;
+	identificator = "PointsLineCircle";
+
+	int temp[] = { ID_geoLine, 1, ID_geoCircle, 1, -1 };
+	convertParams( temp, sizeof( temp ) / sizeof( temp[0] ) );
+}
+
+PointsLineCircle::~PointsLineCircle()
+{
+}
+
+void PointsLineCircle::processObjects()
+{
+	GeoObjects *pt1;
+	GeoObjects *pt2;
+	GeoObjects *line = parents.first();
+	GeoObjects *circle = parents.next();
+
+	pt1 = new PointLineCircle1();
+	pt1->setInitComplete( true );
+	line->children.append( pt1 );
+	circle->children.append( pt1 );
+	pt1->parents.append( line );
+	pt1->parents.append( circle );
+
+//	addList.append( pt1 );
+
+	pt2 = new PointLineCircle1();
+	pt2->setInitComplete( true );
+	line->children.append( pt2 );
+	circle->children.append( pt2 );
+	pt2->parents.append( circle );
+	pt2->parents.append( line );
+
+	addList.append( pt1 );
+	addList.append( pt2 );
+
+	if ( line->getLevel() >= circle->getLevel() )
+	{
+		pt1->setLevel( line->getLevel() + 1 );
+		pt2->setLevel( line->getLevel() + 1 );
+	}
+	else
+	{
+		pt1->setLevel( circle->getLevel() + 1 );
+		pt2->setLevel( circle->getLevel() + 1 );
+	}
+
+	pt1->move();
+	pt2->move();
+}
+
+PointLineCircle1::PointLineCircle1(): GeoPoint()
+{
+	acceptsGeoPoint = false;
+	identificator = "PointLineCircle1";
+	ID = ID_pointLineCircle1;
+
+	int temp[] = { ID_geoLine, 1, ID_geoCircle, 1, -1 };
+	convertParams( temp, sizeof( temp ) / sizeof( temp[0] ) );
+}
+
+PointLineCircle1::~PointLineCircle1()
+{
+}
+
+void PointLineCircle1::move()
+{
+	if ( isTrace )
+	{
+		trace.append( new QRect( surroundingRect ) );
+	}
+
+  Coordinates center, projection, coord3, coord4, hvec, lvec;
+  double rsq, distsq, lsq, l;
+  int sign;
+  GeoObjects *circle;
+
+	if ( isGeoLine( parents.first() ) )
+	{
+	   coord3 = parents.first()->getStartCoordinates();
+	   coord4 = parents.current()->getEndCoordinates();
+	   circle = parents.next();
+	   sign = -1;
+	} else {
+	   circle = parents.first();
+	   coord3 = parents.next()->getStartCoordinates();
+	   coord4 = parents.current()->getEndCoordinates();
+	   sign = 1;
+	}
+	center = circle->getCircleCenter();
+	rsq = circle->getCircleRadiusSq();
+	projection = center;
+	MetricsCenter::mapPointToLine( projection, coord3, coord4 );
+	hvec = projection - center;
+	lvec = coord4 - coord3;
+	distsq = hvec.getLengthsq();
+
+	lsq = rsq - distsq;
+	if (lsq <= 0.0) lsq = 0;
+	l = pow (lsq, 0.5);
+
+	lvec.normalize( l );
+	lvec *= sign;
+	
+	coords = projection + lvec;
+
+	//	Calculate new rectangle around point.
+	if ( ( size % 2 ) == 0 )
+		size += 1;
+
+	//	Calculate new rectangle around point.
+	int x = coords.getI_X() - ( ( size - 1 ) / 2 );
+	int y = coords.getI_Y() - ( ( size - 1 ) / 2 );
+
+	//  Set rectangle.
+	surroundingRect = QRect ( x ,y ,size ,size );
+}
+
diff -Naur kgeo/kgeo/pointlinecircle1.h kgeo.new/kgeo/pointlinecircle1.h
--- kgeo/kgeo/pointlinecircle1.h	Thu Jan  1 01:00:00 1970
+++ kgeo.new/kgeo/pointlinecircle1.h	Mon Oct 14 11:22:32 2002
@@ -0,0 +1,49 @@
+/***************************************************************************
+                          pointlinecircle1.h  -  description
+                             -------------------
+    begin                : Wed May 10 2000
+    copyright            : (C) 2000 by Maurizio Paolini
+    email                : paolini@dmf.unicatt.it
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#ifndef POINTLINECIRCLE1_H
+#define POINTLINECIRCLE1_H
+
+#include "geopoint.h"
+#include "geoline.h"
+#include "geotool.h"
+
+/**This class represents the point of concurrency of a line and a circle.
+  *@author Maurizio Paolini
+  */
+
+class PointLineCircle1 : public GeoPoint
+{
+	public:
+
+		PointLineCircle1();
+		virtual ~PointLineCircle1();
+
+	  virtual void move();
+};
+
+class PointsLineCircle : public GeoTool
+{
+        public:
+
+                PointsLineCircle();
+                virtual ~PointsLineCircle();
+
+                virtual void processObjects();
+};
+#endif
+
diff -Naur kgeo/kgeo/radicalline.cpp kgeo.new/kgeo/radicalline.cpp
--- kgeo/kgeo/radicalline.cpp	Thu Jan  1 01:00:00 1970
+++ kgeo.new/kgeo/radicalline.cpp	Mon Oct 14 11:22:32 2002
@@ -0,0 +1,73 @@
+/***************************************************************************
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#include "radicalline.h"
+
+RadicalLine::RadicalLine(): GeoLine()
+{
+	acceptsGeoPoint = false;
+	ID = ID_radicalline;
+  identificator = "RadicalLine";
+
+	startCoords.goBeyond = true;
+	endCoords.goBeyond = true;
+
+	int temp[] = { ID_geoCircle, 2, -1 };
+	convertParams( temp, sizeof( temp ) / sizeof( temp[0] ) );
+}
+
+RadicalLine::~RadicalLine()
+{
+}
+
+void RadicalLine::move()
+{
+ 	Coordinates c1, c2, direc, direco, startpoint, baric, rvec;
+	double r1sq, r2sq, dsq, lambda;
+
+	GeoObjects *pt1 = parents.first();
+	while (! isGeoCircle (pt1))
+	{
+	    cout << pt1->getID() << " invalid type, circle espected\n";
+	    pt1 = parents.next();
+	}
+	GeoObjects *pt2 = parents.next();
+	while (! isGeoCircle (pt2))
+	{
+	    cout << pt2->getID() << " invalid type, circle espected\n";
+	    pt2 = parents.next();
+	}
+	c1 = pt1->getCircleCenter();
+	r1sq = pt1->getCircleRadiusSq();
+	c2 = pt2->getCircleCenter();
+	r2sq = pt2->getCircleRadiusSq();
+
+	direc = c2 - c1;
+	dsq = direc.getLengthsq();
+	direco = direc;
+	direco.orthogonalize();
+	startpoint = (c1 + c2)/2;
+
+	if (dsq == 0)
+        {
+	   lambda = 0.0;
+	} else {
+	   lambda = (r1sq - r2sq) / dsq;
+	}
+	lambda /= 2;
+	direc *= lambda;
+	startpoint = startpoint + direc;
+ 	startCoords.coords = startpoint;
+ 	endCoords.coords = startpoint + direco;
+
+	computeGoBeyond();
+}
diff -Naur kgeo/kgeo/radicalline.h kgeo.new/kgeo/radicalline.h
--- kgeo/kgeo/radicalline.h	Thu Jan  1 01:00:00 1970
+++ kgeo.new/kgeo/radicalline.h	Mon Oct 14 11:22:32 2002
@@ -0,0 +1,32 @@
+/***************************************************************************
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#ifndef RADICALLINE_H
+#define RADICALLINE_H
+
+#include <geoline.h>
+
+/**Implements a radical line.
+  *@author Maurizio Paolini
+  */
+
+class RadicalLine : public GeoLine
+{
+	public:
+
+		RadicalLine();
+		virtual ~RadicalLine();
+
+		virtual void move();
+};
+
+#endif
diff -Naur kgeo/kgeo/resource.h kgeo.new/kgeo/resource.h
--- kgeo/kgeo/resource.h	Mon May 27 12:08:35 2002
+++ kgeo.new/kgeo/resource.h	Mon Oct 14 11:22:32 2002
@@ -105,10 +105,14 @@
 #define ID_geoLine  								28
 #define ID_ray											29
 #define ID_parallel									30
-#define ID_perpendicular						31
-#define ID_move											32
-#define ID_rotation									33
-#define ID_text   									34
+#define ID_perpendicular                                                31
+#define ID_move                                                                                 32
+#define ID_rotation                                                                     33
+#define ID_text                                                                         34
+#define ID_radicalline						35
+#define ID_geoCircle							36
+#define ID_pointLineCircle1						37
+#define ID_pointsLineCircle						38
 
 #define ID_buttonFileNew 						100
 #define ID_buttonKiosk 							101
@@ -119,16 +123,18 @@
 #define ID_buttonPointOfConc				113
 #define ID_buttonBisection					114
 #define ID_buttonMirrorPoint				115
-#define ID_buttonMove								116
-#define ID_buttonRotation						117
+#define ID_buttonMove							116
+#define ID_buttonPointLineCircle1					117
+#define ID_buttonRotation						118
 
 #define ID_buttonSegment 						120
-#define ID_buttonLine								121
+#define ID_buttonLine							121
 #define ID_buttonVector							122
-#define ID_buttonRay								123
+#define ID_buttonRay							123
 #define ID_buttonParallel						124
 #define ID_buttonPerpendicular			125
-#define ID_buttonTriangle						126
+#define ID_buttonRadicalLine						126
+#define ID_buttonTriangle						127
 
 #define ID_buttonBaseCircle					130
 #define ID_buttonCircle							131
diff -Naur kgeo/kgeo/toolbar/Makefile.am kgeo.new/kgeo/toolbar/Makefile.am
--- kgeo/kgeo/toolbar/Makefile.am	Wed Oct 31 11:52:07 2001
+++ kgeo.new/kgeo/toolbar/Makefile.am	Mon Oct 14 11:22:32 2002
@@ -1,7 +1,7 @@
 ####### kdevelop will overwrite this part!!! (begin)##########
 
 
-EXTRA_DIST = exit.png filenew.png fileopen.png fileprint.png filesave.png help.png window_fullscreen.png angle.png arc.png areaCircle.png attacher.png baseCircle.png bisection.png circle.png circumference.png distance.png eraser.png line.png mirrorPoint.png move.png moveGrid.png parallel.png perpendicular.png point.png pointer.png pointOfConc.png pointOnLine.png pointxy.png ray.png rotation.png segment.png slope.png text.png tracer.png triangle.png vector.png paint.png line1.png line2.png line3.png line4.png line5.png point1.png point10.png point11.png point12.png point13.png point14.png point2.png point3.png point4.png point5.png point6.png point7.png point8.png point9.png sizer.png 
+EXTRA_DIST = exit.png filenew.png fileopen.png fileprint.png filesave.png help.png window_fullscreen.png angle.png arc.png areaCircle.png attacher.png baseCircle.png bisection.png circle.png circumference.png distance.png eraser.png line.png mirrorPoint.png move.png moveGrid.png parallel.png perpendicular.png radicalline.png point.png pointer.png pointOfConc.png pointOnLine.png pointLineCircle1.png pointxy.png ray.png rotation.png segment.png slope.png text.png tracer.png triangle.png vector.png paint.png line1.png line2.png line3.png line4.png line5.png point1.png point10.png point11.png point12.png point13.png point14.png point2.png point3.png point4.png point5.png point6.png point7.png point8.png point9.png sizer.png 
 
 install-data-local:
 	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
@@ -51,12 +51,16 @@
 	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
 	$(INSTALL_DATA) $(srcdir)/perpendicular.png $(kde_datadir)/kgeo/toolbar/perpendicular.png
 	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
+	$(INSTALL_DATA) $(srcdir)/radicalline.png $(kde_datadir)/kgeo/toolbar/radicalline.png
+	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
 	$(INSTALL_DATA) $(srcdir)/point.png $(kde_datadir)/kgeo/toolbar/point.png
 	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
 	$(INSTALL_DATA) $(srcdir)/pointer.png $(kde_datadir)/kgeo/toolbar/pointer.png
 	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
 	$(INSTALL_DATA) $(srcdir)/pointOfConc.png $(kde_datadir)/kgeo/toolbar/pointOfConc.png
 	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
+	$(INSTALL_DATA) $(srcdir)/pointLineCircle1.png $(kde_datadir)/kgeo/toolbar/pointLineCircle1.png
+	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
 	$(INSTALL_DATA) $(srcdir)/pointOnLine.png $(kde_datadir)/kgeo/toolbar/pointOnLine.png
 	$(mkinstalldirs) $(kde_datadir)/kgeo/toolbar/
 	$(INSTALL_DATA) $(srcdir)/pointxy.png $(kde_datadir)/kgeo/toolbar/pointxy.png
diff -Naur kgeo/kgeo/toolbar/pointLineCircle1.png kgeo.new/kgeo/toolbar/pointLineCircle1.png
--- kgeo/kgeo/toolbar/pointLineCircle1.png	Thu Jan  1 01:00:00 1970
+++ kgeo.new/kgeo/toolbar/pointLineCircle1.png	Mon Oct 14 11:22:32 2002
@@ -0,0 +1,6 @@
+‰PNG
+
+
IHDRÄ´l;	pHYs?@"È$IDATxœÅ•±mÃ0E?CtÙ€#h‹¨pÁ<‚
+ôQ¡B#à¹.�G±pi"C²IŠ´äuOŸ§ûGå½Ç_Ä[m‚sNŒ1R>÷}2Aký°§µ–å¹ß;¬Ÿãòq<ªûçyVÐ¶­ Æ	!$oÀÞ{õ{Ì(<Ë³àgàZk‰ÁÀ%pu½ÞÔÆê›×(/.En­`fxï³eÊ‚×ðïËE¾š8�ðN´—Vf"Â€†‹ú—ÀnÐÒP¥³ÂZ+
3`"B×uÙ)>÷½03&"LD`æ¬ý�ÄÏsÎm’†qDaÓZ{­Ã°YÇfÂ^ŸGÁ¹áR
+�‚—#¯íšrX
+¾k�g•·[mT_MÿþHÅ°Ò�(õIEND®B`‚
\ No newline at end of file
diff -Naur kgeo/kgeo/toolbar/radicalline.png kgeo.new/kgeo/toolbar/radicalline.png
--- kgeo/kgeo/toolbar/radicalline.png	Thu Jan  1 01:00:00 1970
+++ kgeo.new/kgeo/toolbar/radicalline.png	Mon Oct 14 11:22:32 2002
@@ -0,0 +1,4 @@
+‰PNG
+
+
IHDRÄ´l;	pHYs?@"È�IDATxœíT1€ ³œ?Ñÿ¿(¼E§Þam zflhˆµÁ,*¶}?*`ÊÙ•	Äšf\Ë;,:öÆx�ÕWÔæ§_Sbsäõ
+˜"^2’‰Ž@G¡‚¹nñJXÁ\ÂÊÜÓuk¡Ì3ë¿D	Áˆw.]·žC5y·H3áÑHâ…é#Ôû1jXRÇ_`®=þ…ç>:Gz<å
/±IEND®B`‚
\ No newline at end of file
