diff --git a/w2v-server.pl b/w2v-server.pl
index 8085874..9e508bd 100755
--- a/w2v-server.pl
+++ b/w2v-server.pl
@@ -712,13 +712,12 @@
 		best[b].activation = para_nbs[0]->best[b].activation;
 	}
 
+  long long size=N;
 	for(a=1; a < para_threads; a++) {
 		for(b=0; b < para_nbs[a]->length && para_nbs[a]->best[b].wordi >= 0; b++) {
 			for(c=0; c < N * para_threads; c++) {
 				if(para_nbs[a]->best[b].activation > best[c].activation) {
-					for(d=N-1; d>c; d--) {
-            memmove(best + d, best + d - 1, sizeof(collocator));
-					}
+          memmove(best + c + 1, best + c, (size++-c-1) * sizeof(collocator));
 				  memcpy(best + c, &para_nbs[a]->best[b], sizeof(collocator));
 					break;
 				}
@@ -726,18 +725,21 @@
 		}
 	}
 
-  char *chosen[600];
+  long long chosen[MAX_NEIGHBOURS];
+  printf("N: %ld\n", N);
+
   AV* array = newAV();
   int i, j;
   int l1_words=0, l2_words=0;
-  for (a = 0, i = 0; i < N && a < 600; a++) {
+ 
+  for (a = 0, i = 0; i < N && a < N*para_threads; a++) {
     int filtered=0;
     long long c = best[a].wordi;
     if (dedupe && i > 0) {
-      for (j=0; j<i; j++)
-        if (strcasestr(&vocab[c * max_w], chosen[j]) ||
-            strcasestr(chosen[j], &vocab[c * max_w])) {
-              printf("filtering %s %s\n", chosen[j], &vocab[c * max_w]);
+      for (j=0; j<i && !filtered; j++)
+        if (strcasestr(&vocab[c * max_w], &vocab[chosen[j] * max_w]) ||
+            strcasestr(&vocab[chosen[j] * max_w], &vocab[c * max_w])) {
+              printf("filtering %s %s\n", &vocab[chosen[j] * max_w], &vocab[c * max_w]);
               filtered = 1;
         }
       if(filtered)
@@ -756,12 +758,12 @@
                 l2_words++;
         }
     }
-    fflush(stdout);
     printf("%s l1:%d l2:%d i:%d a:%ld\n", &vocab[c * max_w], l1_words, l2_words, i, a);
+    fflush(stdout);
  
     HV* hash = newHV();
     SV* word = newSVpvf(&vocab[c * max_w], 0);
-		chosen[i] = &vocab[c * max_w];
+		chosen[i] = c;
     if(latin_enc == 0) SvUTF8_on(word);
     fflush(stdout);
     hv_store(hash, "word", strlen("word"), word , 0);
