diff --git a/www/index.php b/www/index.php
index 5cfd64557abd252b22ec3ee3f1e863af1ae45886..6975a62ecfeb2855eee13e54de4e5bdcf28cebb6 100644
--- a/www/index.php
+++ b/www/index.php
@@ -1,5 +1,7 @@
 <?php
 
+$search_engine_id = '015236299699564929946:nk1siew10ie';
+
 $config_file = __DIR__ . '/../config.sample.php';
 if (file_exists(__DIR__ . '/../config.inc.php')) {
     $config_file = __DIR__ . '/../config.inc.php';
@@ -101,10 +103,10 @@ if (isset($_GET['u']) && $scanned = UNL_Search::getScannedPage($_GET['u'])) {
 
     if (isset($_GET['cx'])) {
         // Use their custom search engine instead of the linked one.
-        $context = $_GET['cx'];
+        $search_engine_id = $_GET['cx'];
     } else {
-        // Auto-build a custom search engine
-        $context = array('crefUrl' => UNL_Search::getLinkedCSEUrl($_GET['u']));
+        // send the site value as the context to search on
+        $context = $_GET['u'];
     }
 
     $localResults = renderTemplate('templates/google-results.tpl.php', array(
@@ -116,7 +118,6 @@ if (isset($_GET['u']) && $scanned = UNL_Search::getScannedPage($_GET['u'])) {
     loadDefaultSections($page);
 }
 
-
 $maincontent = '';
 if (!$isEmbed) {
     $maincontent .= renderTemplate('templates/search-form.tpl.php', array('local_results' => $localResults));
@@ -130,25 +131,9 @@ $maincontent .= renderTemplate('templates/search-results.tpl.php', array(
 $initialQuery = json_encode(isset($_GET['q']) ? $_GET['q'] : '');
 $context = json_encode($context);
 
-$apiKey = UNL_Search::getJSAPIKey();
-$params = array(
-    'autoload' => json_encode(array('modules' => array(
-        array(
-            'name' => 'search',
-            'version' => '1.0',
-            'callback' => 'searchInit',
-            'style' => '//www.google.com/cse/style/look/v2/default.css'
-        ),
-    ))),
-);
-
-if (!empty($apiKey)) {
-    $params['key'] = $apiKey;
-}
-
 $maincontent .= renderTemplate('templates/end-scripts.tpl.php', array(
     'localScriptUrl' => $localScriptUrl,
-    'googleLoaderUrl' => 'https://www.google.com/jsapi?' . http_build_query($params),
+    'googleLoaderUrl' => 'https://cse.google.com/cse.js?cx=' . $search_engine_id,
     'initialQuery' => $initialQuery,
     'localContext' => $context,
 ));
diff --git a/www/js/search.js b/www/js/search.js
index dabf7b3feec3a7a6e49cbfb4a4a8d8649e9d180a..6f707811caa51864f55f03a828ed75be738d3d27 100644
--- a/www/js/search.js
+++ b/www/js/search.js
@@ -132,106 +132,111 @@ define(['jquery', 'analytics'], function ($, analytics) {
 		$(this._renderTo).empty();
 	};
 
+	// Google Search Wrapper Class
+	var GoogleSearcher = function(search_element, root_of_element) {
+		this.control = search_element;
+		this.control.root = root_of_element;
+	}
+
+	GoogleSearcher.prototype.setSearchCompleteCallback = function(callback) {
+		this.complete_callback = callback;
+	}
+
+	GoogleSearcher.prototype.setSearchStartingCallback = function(callback) {
+		this.starting_callback = callback;
+	}
+
+	GoogleSearcher.prototype.execute = function(query) {
+		this.starting_callback(this.control, null, query);
+		this.control.execute(query);
+		this.complete_callback(this.control);
+	}
+
 	return {
 		initialize: function(firstQ, localContext) {
 			// query related
 			var query = '';
 			var actCls = 'active';
 
-				// CustomSearchControl instances and config
-			var unlSearch;
-			var localSearch;
-			var activeSearch;
+			// CustomSearchControl instances and config
+			var activeSearch; // this is the search that is currently shown
+			var unlGoogleSearch;
+			var localGoogleSearch;
 			var directorySearch;
-			var drawOp = new google.search.DrawOptions();
 			var searchToggleLock = false;
 
 			var trackQuery = function(q) {
-					var loc = window.location,
-						qs = loc.search.replace(/(?:(\?)|&)q=[^&]*(?:&|$)/, '$1'),
-						page = [
-						    loc.pathname,
-						    qs || '?',
-						    (qs && qs != '?') ? '&' : '',
-						    'q=',
-						    encodeURIComponent(q)
-				        ].join('');
-
-					analytics.callTrackPageview(page);
-
-					if (window.history.pushState) {
-						window.history.pushState({query: q}, '', page);
-					}
+				var loc = window.location,
+					qs = loc.search.replace(/(?:(\?)|&)q=[^&]*(?:&|$)/, '$1'),
+					page = [
+					    loc.pathname,
+					    qs || '?',
+					    (qs && qs != '?') ? '&' : '',
+					    'q=',
+					    encodeURIComponent(q)
+			        ].join('');
+
+				analytics.callTrackPageview(page);
+
+				if (window.history.pushState) {
+					window.history.pushState({query: q}, '', page);
+				}
 			};
 
 			var queryComplete = function(control) {
-					var $root = $(control.root);
+				var $root = $(control.root);
 
-					// a11y patching
-					$('img.gs-image', $root).each(function() {
-						if (!this.alt) {
-							this.alt = $(this).closest('.gsc-table-result').find('.gs-title').first().text();
-						}
-					});
-					$('img.gcsc-branding-img-noclear', $root).attr('alt', 'Google™');
-
-					if (!searchToggleLock && control == localSearch && $('.gs-no-results-result', $root).length) {
-						$root.closest('.results-group').find('.result-tab li:last-child').click();
-						return;
+				// a11y patching
+				$('img.gs-image', $root).each(function() {
+					if (!this.alt) {
+						this.alt = $(this).closest('.gsc-table-result').find('.gs-title').first().text();
 					}
+				});
+				$('img.gcsc-branding-img-noclear', $root).attr('alt', 'Google™');
+
+				if (!searchToggleLock && localGoogleSearch && control == localGoogleSearch.control && $('.gs-no-results-result', $root).length) {
+					$root.closest('.results-group').find('.result-tab li:last-child').click();
+					return;
+				}
 
-					$root.closest(resultSel).addClass(actCls);
-					$root.closest(googleSel).slideDown();
+				$root.closest(resultSel).addClass(actCls);
+				$root.closest(googleSel).slideDown();
 
-					searchToggleLock = false;
+				searchToggleLock = false;
 			};
 
 			var fullQuery = function(q, track) {
-					if (track !== false) {
-						trackQuery(q);
-					}
-					try {
-						activeSearch.execute(q, undefined, {});
-					} catch (e) {
-						queryComplete(activeSearch);
-					}
-					directorySearch.execute(q);
-					$(wrapperMain).fadeIn();
+				if (track !== false) {
+					trackQuery(q);
+				}
+				try {
+					activeSearch.execute(q);
+				} catch (e) {
+					queryComplete(activeSearch.control);
+				}
+				directorySearch.execute(q);
+				$(wrapperMain).fadeIn();
 			};
 
 			var fullStop = function() {
-					activeSearch.cancelSearch();
-					directorySearch.cancelSearch();
-					$(resultSel).removeClass(actCls);
-					$(wrapperMain).fadeOut();
-					setTimeout(function() {
-						activeSearch.clearAllResults();
-						directorySearch.clearAllResults();
-					}, transitionDelay);
+				//activeSearch.cancelSearch(): // TODO: implement this
+				directorySearch.cancelSearch();
+				$(resultSel).removeClass(actCls);
+				$(wrapperMain).fadeOut();
+				setTimeout(function() {
+					activeSearch.control.clearAllResults();
+					directorySearch.clearAllResults();
+				}, transitionDelay);
 			};
 
 			var queryStart = function(control, searcher, q) {
-					$(control.root).closest(googleSel).slideUp(0);
-					if (q !== query) {
-						trackQuery(q);
-						directorySearch.execute(q);
-					}
+				$(control.root).closest(googleSel).slideUp(0);
+				if (q !== query) {
+					trackQuery(q);
+					directorySearch.execute(q);
+				}
 			};
 
-			drawOp.enableSearchResultsOnly();
-
-			unlSearch = activeSearch = new google.search.CustomSearchControl(unlContext);
-			unlSearch.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
-			unlSearch.setSearchCompleteCallback(window, queryComplete);
-			unlSearch.setSearchStartingCallback(window, queryStart);
-
-			if (localContext) {
-				localSearch = activeSearch = new google.search.CustomSearchControl(localContext);
-				localSearch.setResultSetSize('small');
-				localSearch.setSearchCompleteCallback(window, queryComplete);
-				localSearch.setSearchStartingCallback(window, queryStart);
-			}
-
 			directorySearch = new Directory(directoryServer, dirResults);
 
 			// Setup DOM on ready
@@ -285,11 +290,39 @@ define(['jquery', 'analytics'], function ($, analytics) {
 						}
 					};
 
-				// draw the Google search controls
-				unlSearch.draw(unlResults, drawOp);
+				var render_attrs = {
+					div: 'unl_results',
+					tag: 'searchresults-only',
+					attributes: {
+						enableImageSearch: false
+					}
+				}
+				// draw the Google search results stuff
+				google.search.cse.element.render(render_attrs);
+				// bind the search results element to this class
+				var searchElement = google.search.cse.element.getAllElements()['searchresults-only0'];
+				window.googleSearchElement = searchElement;
+				unlGoogleSearch = new GoogleSearcher(searchElement, $('#unl_results'));
+				unlGoogleSearch.setSearchStartingCallback(queryStart);
+				unlGoogleSearch.setSearchCompleteCallback(queryComplete);
+				activeSearch = unlGoogleSearch;
 
 				if (localContext) {
-					localSearch.draw(localResults, drawOp);
+					var render_attrs_local = {
+						div: 'local_results',
+						tag: 'searchresults-only',
+						attributes: {
+							enableImageSearch: false,
+							as_sitesearch: localContext
+						}
+					}
+					google.search.cse.element.render(render_attrs_local);
+					var localSearchElement = google.search.cse.element.getAllElements()['searchresults-only1'];
+					window.localGoogleSearchElement = searchElement;
+					localGoogleSearch = new GoogleSearcher(localSearchElement, $('#local_results'));
+					localGoogleSearch.setSearchStartingCallback(queryStart);
+					localGoogleSearch.setSearchCompleteCallback(queryComplete);
+					activeSearch = localGoogleSearch;
 				}
 
 				// a11y patch Google search box
@@ -311,13 +344,12 @@ define(['jquery', 'analytics'], function ($, analytics) {
 						directorySearch.changeViewState(i);
 					} else if ($par.is(wrapperWeb)) {
 						searchToggleLock = true;
-						$(activeSearch.root).closest(googleSel).slideUp().trigger(evtStateChange, [i, 0 + !i]);
+						$(activeSearch.control.root).closest(googleSel).slideUp().trigger(evtStateChange, [i, 0 + !i]);
 						if (i === 0) {
-							activeSearch = localSearch;
+							activeSearch = localGoogleSearch;
 						} else {
-							activeSearch = unlSearch;
+							activeSearch = unlGoogleSearch;
 						}
-
 						activeSearch.execute(query);
 					}
 				});
diff --git a/www/less/search-google.less b/www/less/search-google.less
index 1c4e7eb19ffcd49aa6bdd2b721499be844663998..2af06abeeeae01c5b7eed891bc6b361daf02c5b5 100644
--- a/www/less/search-google.less
+++ b/www/less/search-google.less
@@ -11,6 +11,29 @@
 	font-size: inherit;
 }
 
+.gsc-thumbnail-inside {
+	padding-left: 0;
+	padding-right: 0;
+}
+
+.gsc-control-cse .gs-snippet {
+	color: inherit;
+}
+
+.gsc-thumbnail .gs-image-box {
+	padding-right: 0.5em;
+}
+
+.gsc-url-top {
+	font-size: 80%;
+	padding-left: 0;
+	padding-right: 0;
+}
+
+.gsc-control-cse {
+	padding: 0;
+}
+
 .gsc-result {
 
 	.gsc-webResult & {
@@ -21,6 +44,10 @@
 	.gs-title {
 		height: 1.662em;
 	}
+
+	&.gsc-webResult:hover {
+		border: none;
+	}
 }
 
 .gs-result {
@@ -29,7 +56,7 @@
 		text-decoration: none;
 	}
 
-	a.gs-visibleUrl, .gs-visibleUrl {
+	a.gs-visibleUrl, .gs-visibleUrl, .gsc-url-top {
 		color: @light-neutral;
 	}
 }
@@ -69,6 +96,7 @@
 
 .gcsc-branding {
 	margin-bottom: 1.3333em;
+	display: none;
 }
 
 td.gcsc-branding-text {
diff --git a/www/templates/end-scripts.tpl.php b/www/templates/end-scripts.tpl.php
index 63c71e694c97fbc837b477a70a5a0e411a61bafb..81688c608665152718e963bf374772af1340d28e 100644
--- a/www/templates/end-scripts.tpl.php
+++ b/www/templates/end-scripts.tpl.php
@@ -1,15 +1,21 @@
 <script>
 require(['jquery', '<?php echo $localScriptUrl ?>'], function($, UNLSearch) {
-	var gSearchDefer = $.Deferred();
+    var gSearchDefer = $.Deferred();
 	window.searchInit = function() {
         window.searchInit = $.noop;
         gSearchDefer.resolve(google);
     };
 
+    window.__gcse = {
+      parsetags: 'explicit',
+      callback: window.searchInit
+    };
+
     $('<script>', {
         src: '<?php echo $googleLoaderUrl ?>',
-        asycn: 'async',
-        defer: 'defer'
+        async: 'async',
+        defer: 'defer',
+        type: 'text/javascript'
     }).appendTo($('body'));
 
     var $localCss = $('<link>', {