diff --git a/plugins/layer-farms-find.user.js b/plugins/layer-farms-find.user.js
new file mode 100644
index 00000000..bd9ea9d5
--- /dev/null
+++ b/plugins/layer-farms-find.user.js
@@ -0,0 +1,329 @@
+// ==UserScript==
+// @id             iitc-plugin-farms@949
+// @name           IITC plugin: Show farms by level
+// @category       Info
+// @version        1.2.1.@@DATETIMEVERSION@@
+// @namespace      https://github.com/jonatkins/ingress-intel-total-conversion
+// @updateURL      @@UPDATEURL@@
+// @downloadURL    @@DOWNLOADURL@@
+// @description    [@@BUILDNAME@@-@@BUILDDATE@@] Find farms by minimum level
+// @include        https://www.ingress.com/intel*
+// @include        http://www.ingress.com/intel*
+// @match          https://www.ingress.com/intel*
+// @match          http://www.ingress.com/intel*
+// @grant          none
+// ==/UserScript==
+
+//CHANGELOG
+/*
+v1.2.1
+Fixed dropdown location overlap
+
+v1.2.0
+Circle is sent to back on mouseover
+Clicking on circle displays portal counts for farm (including portals of level lower than farm)
+
+v1.1.2
+Fixed the portal counts (shown in console)
+
+v1.1.1
+Changed circle stroke weight and opacity, making it easier to see when zoomed out.
+
+v1.1.0
+Changed radius function and center function - 
+Center is now the midpoint of the max and min long and lat coords
+Radius is distance from center to furthest portal (i.e., now the circle will be limited to portals in the farm)
+
+*/
+
+
+
+@@PLUGINSTART@@
+
+
+// use own namespace for plugin
+window.plugin.farmFind = function() {};
+
+window.plugin.farmFind.getNearbyPortalCount = function(portal){
+    
+    var circle = new google.maps.Circle();
+    var center = new google.maps.LatLng(portal.getLatLng().lat, portal.getLatLng().lng);
+    circle.setCenter(center);
+    circle.setRadius(window.plugin.farmFind.Radius);
+
+    
+    var nearby8Portals = 0;
+    
+    $.each(window.portals, function(i, otherPortal) {
+        var thisPortal = new google.maps.LatLng(otherPortal.getLatLng().lat, otherPortal.getLatLng().lng);
+      	 if (circle.getBounds().contains(thisPortal))
+             if (getPortalLevel(otherPortal.options.details) >= window.plugin.farmFind.minLevel) nearby8Portals++;
+    });
+    //console.log(nearby8Portals);         
+    return nearby8Portals;
+};
+
+window.plugin.farmFind.checkPortals = function(){
+    possibleFarmPortals = [];
+    window.plugin.farmFind.levelLayerGroup.clearLayers();
+    //console.log(window.portals.length);
+	$.each(window.portals, function(i, portal) {
+        
+		if (window.plugin.farmFind.getNearbyPortalCount(portal) > window.plugin.farmFind.minNearby)
+        {
+         	//console.log("Farm identified");
+            possibleFarmPortals.push(portal);
+        }
+	});
+    console.log("Farm Portals: " + possibleFarmPortals.length);
+    var farms = [];
+    for (i = 0; i< possibleFarmPortals.length;i++)
+    {
+        //console.log("Checking portal " + i);
+     	var thisPortal = possibleFarmPortals[i];
+        var alreadyInFarm = false;
+        for (x = 0; x< farms.length;x++)
+        {
+            //console.log(alreadyInFarm);
+         	if (thisPortal in farms[x]) alreadyInFarm = true;
+        }
+        
+        //console.log("Portal " + i + " already in farm: " + alreadyInFarm);
+        
+        if (!alreadyInFarm)
+        {
+            var portalsInFarm = [];
+        	var circle = new google.maps.Circle();
+    		var center = new google.maps.LatLng(thisPortal.getLatLng().lat, thisPortal.getLatLng().lng);
+    		circle.setCenter(center);
+    		circle.setRadius(window.plugin.farmFind.Radius);
+            portalsInFarm.push(thisPortal);
+            for (p = 0; p< possibleFarmPortals.length;p++)
+            {
+                //console.log("Checking distance from portal " + p);
+                var portalLoc = new google.maps.LatLng(possibleFarmPortals[p].getLatLng().lat, possibleFarmPortals[p].getLatLng().lng);
+                
+                var farmIndex = 0;
+             	if (circle.getBounds().contains(portalLoc) && possibleFarmPortals[p] != thisPortal)
+                {
+                    var alreadyInAnotherFarm = false;
+                    for (x = 0; x< farms.length;x++)
+        			{
+            			//console.log(alreadyInFarm);
+                        for (o = 0; o< farms[x].length; o++)
+                        {
+                            if (possibleFarmPortals[p] == farms[x][o])
+                        	{
+                            	//console.log("Portal " + p + " in farm " + (x+1) + " at index " + o);
+                            	alreadyInAnotherFarm = true;
+                        		farmIndex = x;
+                        	}
+                        }
+         				
+                       
+        			}
+                    
+                    //console.log("Already in another farm: " + alreadyInAnotherFarm);
+                    
+                    if (alreadyInAnotherFarm == false)
+                    {
+                        //console.log("Farm " + (farms.length + 1) + " adding portal " + p);
+                    	portalsInFarm.push(possibleFarmPortals[p]);
+                    }
+                    else
+                    {
+                     	//hmmm... portal is in range, but portal is in another farm, so let's extend this farm
+                        for(prt = 0; prt < portalsInFarm.length; prt++)
+                        {
+                         	   farms[farmIndex].push(portalsInFarm[prt]);
+                        }
+                        
+                        //console.log("Farm " + (farmIndex + 1) + " now has " + farms[farmIndex].length + " portals");
+                        p = 6000;
+                    }
+                }
+            }
+            
+            if (!alreadyInAnotherFarm)
+            {
+                farms.push(portalsInFarm);
+                //console.log("Farm " + (farms.length) + ": " + portalsInFarm.length + " portals");
+            };
+        }
+    }
+    
+    //console.log(farms.length);
+    for (i = 0; i < farms.length; i++)
+    {
+        farms[i] = findUnique(farms[i]);
+        console.log("Farm " + (i+1) + ": " + farms[i].length + " portals");
+        
+    }
+    //console.log(farms);
+    
+    
+    
+    window.plugin.farmFind.drawnItems = new L.FeatureGroup();
+    
+    
+    for (farm = 0; farm < farms.length; farm++)
+    {
+    	window.plugin.farmFind.drawCircle(farms[farm]);
+    }
+    
+    
+};
+    
+    findUnique = function(farm) {
+        var unique = [];
+        for(p = 0; p < farm.length; p++)
+        {
+            //console.log(farm[p].options.guid);
+        	var found = false;
+            for (u = 0; u < unique.length; u++)
+            {
+                //console.log(unique[u].options.guid);
+             	if (farm[p].options.guid == unique[u].options.guid)
+                    found = true;
+            }
+            if (!found)
+                unique.push(farm[p]);
+        }
+        
+        return unique;
+}
+    
+window.plugin.farmFind.drawCircle = function(farm)
+{
+	var latArray = [];
+	var lngArray = [];
+    var countArray = [];
+	//console.log("Find Center");
+	for (p = 0; p < farm.length; p++)
+    {
+		latArray.push(farm[p].getLatLng().lat);
+		lngArray.push(farm[p].getLatLng().lng);
+	    var level = Math.floor(farm[p].options.level);
+        if (countArray[level] == null)
+            countArray[level] = 0;
+        countArray[level]++;
+    }
+    
+    console.log(countArray);
+    var popupMsg = "Portal Count
";
+    for (i = 1; i < 9; i++)
+    {
+     	if (countArray[i] != null)
+            popupMsg += "Level " + i + ": " + countArray[i] + "
";
+    }
+	
+	var north = Math.max.apply(null, lngArray);
+	var south = Math.min.apply(null, lngArray);
+	var east = Math.max.apply(null, latArray);
+	var west = Math.min.apply(null, latArray);
+	
+	var center = new google.maps.LatLng(((east + west) / 2), ((north + south) / 2));
+	//console.log(center);
+    //console.log("Find Radius");
+	var radius = 0;
+	for (p = 0; p < farm.length; p++)
+	{
+		var temp = center.distanceFrom(farm[p].getLatLng());
+		if (temp > radius)
+			radius = temp;
+	}
+    
+    //console.log(radius);
+	//((20 - map._zoom) * 1000) / map._zoom
+    
+	var latlng = new L.LatLng(center.lat(), center.lng());
+    //console.log("latlng: " + latlng);
+    var optCircle = {color:'red',opacity:0.7,fill:true,fillColor:'red',fillOpacity:0.7,weight:15,clickable:true};
+    var circle = new L.Circle(latlng, radius, optCircle);
+    circle.bindPopup(popupMsg);
+    
+    
+    circle.on('mouseover', function(e) {
+   		circle.bringToBack();
+	});
+    circle.on('click', function(e) {
+    	circle.bringToBack();
+	});
+    //console.log("circle: " + circle);
+    circle.addTo(window.plugin.farmFind.levelLayerGroup);
+};
+    
+    google.maps.LatLng.prototype.distanceFrom = function(newLatLng) {
+        
+   // setup our variables
+   var lat1 = this.lat();
+   var radianLat1 = lat1 * ( Math.PI  / 180 );
+        
+   var lng1 = this.lng();
+   var radianLng1 = lng1 * ( Math.PI  / 180 );
+        
+   var lat2 = newLatLng.lat;
+   var radianLat2 = lat2 * ( Math.PI  / 180 );
+        
+   var lng2 = newLatLng.lng;
+   var radianLng2 = lng2 * ( Math.PI  / 180 );
+        
+   // sort out the radius, MILES or KM?
+   var earth_radius = 6378.1; // (km = 6378.1) OR (miles = 3959) - radius of the earth
+ 
+   // sort our the differences
+   var diffLat =  ( radianLat1 - radianLat2 );
+   var diffLng =  ( radianLng1 - radianLng2 );
+   // put on a wave (hey the earth is round after all)
+   var sinLat = Math.sin( diffLat / 2  );
+   var sinLng = Math.sin( diffLng / 2  ); 
+ 
+   // maths - borrowed from http://www.opensourceconnections.com/wp-content/uploads/2009/02/clientsidehaversinecalculation.html
+   var a = Math.pow(sinLat, 2.0) + Math.cos(radianLat1) * Math.cos(radianLat2) * Math.pow(sinLng, 2.0);
+ 
+   // work out the distance
+   var distance = earth_radius * 2 * Math.asin(Math.min(1, Math.sqrt(a)));
+ 	
+   // return the distance
+   return distance * 1000;
+};
+    
+    window.plugin.farmFind.setupCSS = function() {
+		$("