diff --git a/lib/Korap/API.pm b/lib/Korap/API.pm
index 01bda48..9392f4d 100644
--- a/lib/Korap/API.pm
+++ b/lib/Korap/API.pm
@@ -98,7 +98,8 @@
   # Search blocking
   else {
     my $tx = $ua->get($url);
-    return $self->_process_response('matches', $index, $tx);
+    $self->_process_response('matches', $index, $tx);
+    return $index;
   };
 };
 
diff --git a/lib/Korap/Controller/Search.pm b/lib/Korap/Controller/Search.pm
index 6f1fb74..a4ba64b 100644
--- a/lib/Korap/Controller/Search.pm
+++ b/lib/Korap/Controller/Search.pm
@@ -39,7 +39,7 @@
       $c->search(
 	cutoff => scalar $c->param('cutoff'),
 	count => scalar $c->param('count'),
-	start_page => scalar $c->param('page'),
+	start_page => scalar $c->param('p'),
 	cb => $delay->begin,
 	%param
       ) if $query;
diff --git a/lib/Korap/Plugin/KorapTagHelpers.pm b/lib/Korap/Plugin/KorapTagHelpers.pm
index 2c1cd6c..6753ad5 100644
--- a/lib/Korap/Plugin/KorapTagHelpers.pm
+++ b/lib/Korap/Plugin/KorapTagHelpers.pm
@@ -1,5 +1,6 @@
 package Korap::Plugin::KorapTagHelpers;
 use Mojo::Base 'Mojolicious::Plugin';
+use Mojo::JSON 'decode_json';
 use Mojo::JSON::Pointer;
 use Mojo::ByteStream 'b';
 use Mojo::Util qw/xml_escape/;
@@ -25,86 +26,91 @@
       }
 
       # Tutorial wasn't embedded - but opened for testing
-      elsif ($c->param('testing') &&
-	       $c->korap_test_port &&
-		 $param{tests}) {
+ #     elsif ($c->param('testing') &&
+#	       $c->korap_test_port &&
+#		 $param{tests}) {
+#
+# Currently disabled
 
-	my $tests = $param{tests} // [];
-	my $json = $c->search(
-	  query => $q,
-	  ql => $ql,
-	  cutoff => 'true',
-	  no_cache => 1
-	);
-
-	# There is a response
-	if ($json) {
-	  my $json_pointer = Mojo::JSON::Pointer->new($json);
-	  foreach my $test (@$tests) {
-	    my ($type, $path, @rest) = @$test;
-
-	    # Check for equality
-	    if ($type eq 'is') {
-	      my $found = $json_pointer->get($path);
-	      if ($found && $found eq $rest[0]) {
-		$pass++;
-	      }
-	      else {
-		my $result = $path . q! isn't ! . shift @rest;
-		$result .= ' but was ' . $found if $found;
-		$result .= '; ' . join('; ', @rest);
-		push(@report, $result);
-		$fail++;
-	      };
-	    }
-
-	    # Check for inequality
-	    elsif ($type eq 'isnt') {
-	      if ($json_pointer->get($path) ne $rest[0]) {
-		$pass++;
-	      }
-	      else {
-		push(@report, $path . q! is ! . join('; ', @rest));
-		$fail++;
-	      };
-	    }
-
-	    # Check for existence
-	    elsif ($type eq 'ok') {
-	      if ($json_pointer->contains($path)) {
-		$pass++;
-	      }
-	      else {
-		push(@report, $path . q! doesn't exist; ! . join('; ', @rest));
-		$fail++;
-	      };
-	    }
-
-	    # Check for inexistence
-	    elsif ($type eq 'not_ok') {
-	      unless ($json_pointer->contains($path)) {
-		$pass++;
-	      }
-	      else {
-		push(@report, $path . q! doesn't exist; ! . join('; ', @rest));
-		$fail++;
-	      };
-	    };
-	  };
-	}
-	else {
-	  # There may be notifications here!
-	  $fail++ foreach @$tests;
-	};
-
-	# Emit hook to possible subscribers
-	# This is used for self-testing
-	# $plugin->emit_hook(korap_tut_query => (
-	#   query_language => $ql,
-	#   query => $q,
-	#   %param
-	# ));
-      };
+#	my $tests = $param{tests} // [];
+#	my $index = $c->search(
+#	  query => $q,
+#	  ql => $ql,
+#	  cutoff => 'true',
+#	  no_cache => 1
+#	);
+#
+#	# Get the raw results
+#	my $json = decode_json($index->api_response);
+#
+#	# There is a response
+#	if ($json) {
+#	  my $json_pointer = Mojo::JSON::Pointer->new($json);
+#	  foreach my $test (@$tests) {
+#	    my ($type, $path, @rest) = @$test;
+#
+#	    # Check for equality
+#	    if ($type eq 'is') {
+#	      my $found = $json_pointer->get($path);
+#	      if ($found && $found eq $rest[0]) {
+#		$pass++;
+#	      }
+#	      else {
+#		my $result = $path . q! isn't ! . shift @rest;
+#		$result .= ' but was ' . $found if $found;
+#		$result .= '; ' . join('; ', @rest);
+#		push(@report, $result);
+#		$fail++;
+#	      };
+#	    }
+#
+#	    # Check for inequality
+#	    elsif ($type eq 'isnt') {
+#	      if ($json_pointer->get($path) ne $rest[0]) {
+#		$pass++;
+#	      }
+#	      else {
+#		push(@report, $path . q! is ! . join('; ', @rest));
+#		$fail++;
+#	      };
+#	    }
+#
+#	    # Check for existence
+#	    elsif ($type eq 'ok') {
+#	      if ($json_pointer->contains($path)) {
+#		$pass++;
+#	      }
+#	      else {
+#		push(@report, $path . q! doesn't exist; ! . join('; ', @rest));
+#		$fail++;
+#	      };
+#	    }
+#
+#	    # Check for inexistence
+#	    elsif ($type eq 'not_ok') {
+#	      unless ($json_pointer->contains($path)) {
+#		$pass++;
+#	      }
+#	      else {
+#		push(@report, $path . q! doesn't exist; ! . join('; ', @rest));
+#		$fail++;
+#	      };
+#	    };
+#	  };
+#	}
+#	else {
+#	  # There may be notifications here!
+#	  $fail++ foreach @$tests;
+#	};
+#
+#	# Emit hook to possible subscribers
+#	# This is used for self-testing
+#	# $plugin->emit_hook(korap_tut_query => (
+#	#   query_language => $ql,
+#	#   query => $q,
+#	#   %param
+#	# ));
+ #     };
 
       # Escape query for html embedding
       $q = xml_escape $q;
