diff -urPp gmap/gmap_location.module gmap_crouthamel/gmap_location.module
--- gmap/gmap_location.module	2009-03-13 18:10:45.000000000 +0100
+++ gmap_crouthamel/gmap_location.module	2010-10-18 11:59:21.000000000 +0200
@@ -269,6 +269,20 @@ function gmap_location_node_page($nid = 
     ". $add_sql), $nid);
 
   $count = 0;
+
+
+// *dan.crouthamel++
+$multiLocs = array();
+$offSet = .00003; //spacing in the X and Y direction for each new marker
+$curVal = 0; //current duplicate value of lat/long combination - 1
+$magVal = 0; //number of steps from origin to current "square" wall being built
+$stepVal = 0; //number of steps from start position of current "square" wall being built.
+//In northern hemisphere, this starts at the upper right; southern hemisphere, lower right ... I think that's right :)
+$numSteps = 0; //magVal * 2
+$dirVal = 0; //0, 1, 2, or 3 - represents current direction of the square being built (see cases below)
+$posVal = 0; //current position value along a "square" wall being built, resets to zero when dirVal changes (new segment of square being built)
+// *dan.crouthamel--
+
   while ($row = db_fetch_object($result)) {
     $count++;
     $newmarker = array();
@@ -283,6 +297,68 @@ function gmap_location_node_page($nid = 
 
     $newmarker['latitude'] = $row->latitude;
     $newmarker['longitude'] = $row->longitude;
+
+
+		// *dan.crouthamel++
+		$multiLocs[$newmarker['latitude']][$newmarker['longitude']] += 1;
+		
+		if ($multiLocs[$newmarker['latitude']][$newmarker['longitude']] > 1)
+		{
+			$curVal = $multiLocs[$newmarker['latitude']][$newmarker['longitude']] - 1;
+			$magVal = (int) ((sqrt($curVal)+1)/2);
+			$stepVal = $curVal - pow(2*$magVal-1,2);
+			$numSteps = 2*$magVal;
+			$dirVal = (int) ($stepVal / $numSteps);
+			$posVal = $stepVal % $numSteps;
+			
+			switch ($dirVal) {
+				//Top to bottom
+				//       x
+				// x x x |
+				// x x x |
+				// x x x |				
+				case 0:
+					$newmarker['longitude'] += ($magVal*$offSet);
+					$newmarker['latitude'] += $offSet*($magVal - $posVal);
+					break;
+					
+				//Right to left
+				//       x
+				// x x x x
+				// x x x x
+				// x x x x
+				// - - - x				
+				case 1:
+					$newmarker['latitude'] -= ($magVal*$offSet);
+					$newmarker['longitude'] += $offSet*($magVal - $posVal);
+					break;
+					
+				//Bottom to top
+				//         x
+				// | x x x x
+				// | x x x x
+				// | x x x x
+				// x x x x x					
+				case 2:
+					$newmarker['longitude'] -= ($magVal*$offSet);
+					$newmarker['latitude'] += $offSet*($posVal - $magVal);
+					break;
+					
+				//Left to right
+				// x - - - x
+				// x x x x x
+				// x x x x x
+				// x x x x x
+				// x x x x x						
+				case 3:
+					$newmarker['latitude'] += ($magVal*$offSet);
+					$newmarker['longitude'] += $offSet*($posVal - $magVal);
+					break;
+			}
+		}	
+		// *dan.crouthamel--
+
+
     $newmarker['markername'] = isset($markertypes[$row->type]) ? $markertypes[$row->type] : 'drupal';
     if (isset($row->marker) && !empty($row->marker)) {
       $newmarker['markername'] = $row->marker;
diff -urPp gmap/gmap_plugin_style_gmap.inc gmap_crouthamel/gmap_plugin_style_gmap.inc
--- gmap/gmap_plugin_style_gmap.inc	2010-09-30 11:51:05.000000000 +0200
+++ gmap_crouthamel/gmap_plugin_style_gmap.inc	2010-10-18 11:54:42.000000000 +0200
@@ -124,6 +124,21 @@ class gmap_plugin_style_gmap extends vie
     // Render each group separately and concatenate.  Plugins may override this
     // method if they wish some other way of handling grouping.
     $output = '';
+
+
+// *dan.crouthamel++
+$multiLocs = array();
+$offSet = .00003; //spacing in the X and Y direction for each new marker
+$curVal = 0; //current duplicate value of lat/long combination - 1
+$magVal = 0; //number of steps from origin to current "square" wall being built
+$stepVal = 0; //number of steps from start position of current "square" wall being built.
+//In northern hemisphere, this starts at the upper right; southern hemisphere, lower right ... I think that's right :)
+$numSteps = 0; //magVal * 2
+$dirVal = 0; //0, 1, 2, or 3 - represents current direction of the square being built (see cases below)
+$posVal = 0; //current position value along a "square" wall being built, resets to zero when dirVal changes (new segment of square being built)
+// *dan.crouthamel--
+
+
     foreach ($sets as $title => $records) {
       $markers = array();
       $offsets = array();
@@ -190,6 +205,67 @@ class gmap_plugin_style_gmap extends vie
             $tooltip = $row->$tooltip_field;
           }
 
+// *dan.crouthamel++
+					$multiLocs[$row->gmap_lat][$row->gmap_lon] += 1;
+					
+					if ($multiLocs[$row->gmap_lat][$row->gmap_lon] > 1)
+					{
+						$curVal = $multiLocs[$row->gmap_lat][$row->gmap_lon] - 1;
+						$magVal = (int) ((sqrt($curVal)+1)/2);
+						$stepVal = $curVal - pow(2*$magVal-1,2);
+						$numSteps = 2*$magVal;
+						$dirVal = (int) ($stepVal / $numSteps);
+						$posVal = $stepVal % $numSteps;
+						
+						switch ($dirVal) {
+							//Top to bottom
+							//       x
+							// x x x |
+							// x x x |
+							// x x x |				
+							case 0:
+								$lon += ($magVal*$offSet);
+								$lat += $offSet*($magVal - $posVal);
+								break;
+								
+							//Right to left
+							//       x
+							// x x x x
+							// x x x x
+							// x x x x
+							// - - - x				
+							case 1:
+								$lat -= ($magVal*$offSet);
+								$lon += $offSet*($magVal - $posVal);
+								break;
+								
+							//Bottom to top
+							//         x
+							// | x x x x
+							// | x x x x
+							// | x x x x
+							// x x x x x					
+							case 2:
+								$lon -= ($magVal*$offSet);
+								$lat += $offSet*($posVal - $magVal);
+								break;
+								
+							//Left to right
+							// x - - - x
+							// x x x x x
+							// x x x x x
+							// x x x x x
+							// x x x x x						
+							case 3:
+								$lat += ($magVal*$offSet);
+								$lon += $offSet*($posVal - $magVal);
+								break;
+						}
+					}	
+					// *dan.crouthamel					
+					
+
+
           $marker = array(
             'latitude' => $lat,
             'longitude' => $lon,
