diff --git a/w2v-server.pl b/w2v-server.pl
index d10325f..181c185 100644
--- a/w2v-server.pl
+++ b/w2v-server.pl
@@ -5,6 +5,7 @@
 use Encode qw(decode encode);
 use Mojo::Server::Daemon;
 
+print STDERR $ARGV[0];
 # -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 40 -binary 1 -iter 15
 init_net("vectors15.bin");
 
@@ -204,6 +205,7 @@
   </script>
 	<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
 	<script src="http://klinux10/word2vec/tsne.js"></script>
+	<script src="http://klinux10/word2vec/labeler.js"></script>
 <style>
 body, input {
 	font-family: Arial, sans-serif;
@@ -256,17 +258,38 @@
 var Y;
 
 var data;
+var labeler;
 
+
+function applyJitter() {
+  svg.selectAll('.u')
+    .data(labels)
+    .transition()
+    .duration(50)
+    .attr("transform", function(d, i) {
+      T.Y[i][0] = (d.x - 400 - tx)/ss/20;
+      T.Y[i][1] = (d.y - 400 - ty)/ss/20;
+      return "translate(" +
+        (d.x) + "," +
+        (d.y) + ")";
+    });
+}
+    
 function updateEmbedding() {
   var Y = T.getSolution();
   svg.selectAll('.u')
     .data(data.words)
-    .attr("transform", function(d, i) { return "translate(" +
-                                          ((Y[i][0]*20*ss + tx) + 400) + "," +
-                                          ((Y[i][1]*20*ss + ty) + 400) + ")"; });
+    .attr("transform", function(d, i) { 
+			return "translate(" +
+        ((Y[i][0]*20*ss + tx) + 400) + "," +
+        ((Y[i][1]*20*ss + ty) + 400) + ")"; });
 }
 
 var svg;
+var labels = [];
+var anchor_array = [];
+var text;
+
 function drawEmbedding() {
    $("#embed").empty();
    var div = d3.select("#embed");
@@ -319,10 +342,54 @@
  }
  
  var stepnum = 0;
- 
+
  function stopStep() {
    clearInterval(iter_id);
+	 text = svg.selectAll("text");
+	 
+	 labels = d3.range(data.words.length).map(function(i) {
+     var x = (T.Y[i][0]*20*ss + tx) + 400;
+     var y = (T.Y[i][1]*20*ss + ty) + 400;
+		 anchor_array.push({x: x, y: y, r: 5});
+		 return {
+         x: x,
+         y: y,
+			   name: data.words[i]
+		 };
+	 });
+
+	 var index = 0;
+	 text.each(function() {
+		 labels[index].width = this.getBBox().width;
+		 labels[index].height = this.getBBox().height;
+		 index += 1;
+	 });
+
+	 
+//	 setTimeout(updateEmbedding, 1);
+//	 setTimeout(
+	   labeler =	 d3.labeler()
+			 .label(labels)
+			 .anchor(anchor_array)
+			 .width(800)
+			 .height(800)
+			   .update(applyJitter);
+//         .start(1000);
+
+     iter_id = setInterval(jitterStep, 1);
+
  }
+
+var jitter_i=0;;
+
+function jitterStep() {
+    if(jitter_i++ > 100) {
+        clearInterval(iter_id);
+    } else {
+     labeler.start2(10);
+	      applyJitter();
+    }
+}
  
  function step() {
    var i = T.iter;
@@ -334,7 +401,7 @@
      updateEmbedding();
    }
  }
- 
+
  function showMap(j) {
 	 data=j;
    T.iter=0;
@@ -349,6 +416,13 @@
    //step();
  }
  
+ function update() {
+          
+   text.transition().duration(800)
+       .attr("transform", transform);
+ }
+
+
 </script>
 </head>
 <body>
