diff --git a/w2v-server.pl b/w2v-server.pl
index f69b667..e62c63c 100644
--- a/w2v-server.pl
+++ b/w2v-server.pl
@@ -6,21 +6,23 @@
 use Mojo::Server::Daemon;
 
 # -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 40 -binary 1 -iter 15
-init_net("vectors14.bin");
+init_net("vectors15.bin");
 
 get '/' => sub {
   my $c    = shift;
 	my $word=$c->param('word');
-	my $no_nbs=$c->param('n') || 100;
+  my $no_nbs=$c->param('n') || 100;
+  my $no_iterations=$c->param('N') || 2000;
 	my @lists;
 	if(defined($word) && $word !~ /^\s*$/) {
 		$c->inactivity_timeout(300);
-    for my $w (split('\s+', $word)) {
+		$word =~ s/\s+/ /g;
+    for my $w (split(' *\| *', $word)) {
 			$c->app->log->debug('Looking for neighbours of '.$w);
 			push(@lists, get_neighbours(encode("iso-8859-1", $w), $no_nbs));
 		}
 	}
-  $c->render(template=>"index", word=>$word, no_nbs=>$no_nbs, lists=> \@lists);
+  $c->render(template=>"index", word=>$word, no_nbs=>$no_nbs, no_iterations => $no_iterations, lists=> \@lists);
 };
 
 app->start;
@@ -39,6 +41,7 @@
 #define max_size 2000
 #define max_w 50
 #define MAX_NEIGHBOURS 1000
+#define MAX_WORDS -1
 
 //the thread function
 void *connection_handler(void *);
@@ -62,6 +65,7 @@
     return -1;
   }
   fscanf(f, "%lld", &words);
+	if(MAX_WORDS > 0 && words > MAX_WORDS) words = MAX_WORDS;
   fscanf(f, "%lld", &size);
   vocab = (char *)malloc((long long)words * max_w * sizeof(char));
   for (a = 0; a < MAX_NEIGHBOURS; a++) bestw[a] = (char *)malloc(max_size * sizeof(char));
@@ -120,10 +124,14 @@
 		fprintf(stderr, "Word: \"%s\"  Position in vocabulary: %lld\n", st[a], bi[a]);
 		if (b == -1) {
 			fprintf(stderr, "Out of dictionary word!\n");
+			cn--;
 			break;
 		}
 	}
-	if (b == -1) goto end;
+	if (b == -1 && cn <= 0) {
+    N = 0;
+	  goto end;
+  }
 	for (a = 0; a < size; a++) vec[a] = 0;
 	for (b = 0; b < cn; b++) {
 		if (bi[b] == -1) continue;
@@ -155,6 +163,8 @@
 		}
 	}
 
+end:
+	a=0;
 	AV* array = newAV();
 	for (a = 0; a < N; a++) {
 		strcpy(bestw[a], &vocab[besti[a] * max_w]);
@@ -168,7 +178,6 @@
 		hv_store(hash, "vector", strlen("vector"), newRV_noinc((SV*)vector), 0);
 		av_push(array, newRV_noinc((SV*)hash));
 	}
- end:
 	return newRV_noinc((SV*)array);
 }
 
@@ -180,12 +189,25 @@
 <html>
 <head>
 	<title>DeReKo-Word-Vector-Distances</title>
+	<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
 	<script src="http://code.jquery.com/jquery-latest.min.js"></script>
+  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
+	<script>
+ $(function() {
+    $( document ).tooltip();
+  });
+  </script>
 	<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
 	<script src="http://klinux10/word2vec/tsne.js"></script>
 <style>
-body {
+body, input {
 	font-family: Arial, sans-serif;
+	font-size: 11pt;
+}
+
+.ui-tooltip-content {
+	font-size: 9pt;
+	colour: #222222;
 }
 svg {
 //  border: 1px solid #333;
@@ -198,7 +220,6 @@
     overflow: hidden; /* will contain if #first is longer than #second */
 }
 #first {
- width: 300px;
  margin-right: 20px;
     float:left; /* add this */
 //    border: 1px solid green;
@@ -291,11 +312,11 @@
  
  function step() {
    var i = T.iter;
-   if(i > 2000) {
+   if(i > <%= $no_iterations %>) {
 		 stopStep();
    } else {
      var cost = Math.round(T.step() *1000) / 1000; // do a few steps
-     $("#cost").html("iteration " + i + ", cost: " + cost.toFixed(3));
+     $("#cost").html("tsne iteration " + i + ", cost: " + cost.toFixed(3));
      updateEmbedding();
    }
  }
@@ -318,8 +339,10 @@
 </head>
 <body>
 	<form action="<%=url_for('/')->to_abs%>" method="GET">
-		word(s) (space-separated): <input type="text" name="word" value="<%= $word %>"> 
-		max. neighbours: <input type="text" name="n" value="<%= $no_nbs %>">
+		word(s): 
+    <input type="text" name="word" size="20"  value="<%= $word %>" title="When looking for multiple words use spaces as separators to search around the average vector and | as separator to get the neighbours for each word."> 
+		max. neighbours: <input type="text" size="8" name="n" value="<%= $no_nbs %>">
+		iterations: <input type="text" name="N" size="8" value="<%= $no_iterations %>">
 		<input type="submit" value="Show">
 	</form>
 	<br>
