Solr export
diff --git a/lib/KorAP/Field/MultiTerm.pm b/lib/KorAP/Field/MultiTerm.pm
index 7381a0d..8210c56 100644
--- a/lib/KorAP/Field/MultiTerm.pm
+++ b/lib/KorAP/Field/MultiTerm.pm
@@ -1,5 +1,6 @@
 package KorAP::Field::MultiTerm;
 use Mojo::Base -base;
+use MIME::Base64;
 
 has [qw/p_start p_end o_start o_end term payload/];
 has store_offsets => 1;
@@ -9,12 +10,8 @@
   my $string = $self->term;
   if (defined $self->o_start) {
     $string .= '#' .$self->o_start .'-' . $self->o_end;
-#  }
-#  elsif (!$self->storeOffsets) {
-#    $string .= '#-';
   };
 
-
   my $pl = $self->p_end ? $self->p_end - 1 : $self->payload;
   if ($self->p_end || $self->payload) {
     $string .= '$';
@@ -34,4 +31,70 @@
   return $string;
 };
 
+sub to_solr {
+  my $self = shift;
+  my $increment = shift;
+
+  my (@payload_types, @payload) = ();
+
+  my $term = $self->term;
+  if ($term =~ s/\#(\d+)-(\d+)//) {
+    push(@payload, $1, $2);
+    push(@payload_types, 'l', 'l');
+  };
+
+  my %term = ( t => $term );
+  if (defined $increment && $increment == 0) {
+    $term{i} = 0;
+  };
+
+  if (defined $self->o_start && !@payload) {
+    push(@payload, $self->o_start, $self->o_end);
+    push(@payload_types, 'l', 'l');
+  };
+
+  if ($self->p_end || $self->payload) {
+    if ($self->p_end) {
+      push(@payload, $self->p_end);
+      push(@payload_types, 'l');
+    };
+    if ($self->payload) {
+      if (index($self->payload, '<') == 0) {
+	my @pls = split /(?=<)|(?<=>)/, $self->payload;
+	for (my $i = 0; $i < @pls; $i+=2) {
+	  if ($pls[$i] eq 'b') {
+	    push(@payload, $pls[$i+1]);
+	    push(@payload_types, 'c');
+	  }
+	  elsif ($pls[$i] eq 's') {
+	    push(@payload, $pls[$i+1]);
+	    push(@payload_types, 's');
+	  }
+	  elsif ($pls[$i] eq 'i') {
+	    push(@payload, $pls[$i+1]);
+	    push(@payload_types, 'l');
+	  }
+	  elsif ($pls[$i] eq 'l') {
+	    push(@payload, $pls[$i+1]);
+	    push(@payload_types, 'q');
+	  }
+	  else {
+	    push(@payload, $pls[$i+1]);
+	    push(@payload_types, 'w*');
+	  };
+	};
+      }
+      else {
+	push(@payload, $self->payload);
+	push(@payload_types, 'w*');
+      };
+    };
+  };
+  if (@payload) {
+    $term{p} = encode_base64(pack(join('', @payload_types), @payload), '');
+  };
+
+  return \%term;
+};
+
 1;
diff --git a/lib/KorAP/Field/MultiTermToken.pm b/lib/KorAP/Field/MultiTermToken.pm
index 2064e6e..6e69704 100644
--- a/lib/KorAP/Field/MultiTermToken.pm
+++ b/lib/KorAP/Field/MultiTermToken.pm
@@ -32,9 +32,46 @@
   return $string;
 };
 
+
 sub to_array {
   my $self = shift;
   [uniq(map($_->to_string, @{$self->{mt}}))];
 };
 
+sub to_solr {
+  my $self = shift;
+  my @array = map { $_->to_solr(0) } @{$self->{mt}};
+  $array[0]->{i} = 1;
+  return \@array;
+};
+
 1;
+
+
+__END__
+
+[
+  {
+   "e":128,
+   "i":22,
+   "p":"DQ4KDQsODg8=",
+   "s":123,
+   "t":"one",
+   "y":"word"
+  },
+  {
+   "e":8,
+   "i":1,
+   "s":5,
+   "t":"two",
+   "y":"word"
+  },
+  {
+   "e":22,
+   "i":1,
+   "s":20,
+   "t":"three",
+   "y":"foobar"
+  }
+ ]
+
diff --git a/lib/KorAP/Field/MultiTermTokenStream.pm b/lib/KorAP/Field/MultiTermTokenStream.pm
index d2e66a8..ea96a3e 100644
--- a/lib/KorAP/Field/MultiTermTokenStream.pm
+++ b/lib/KorAP/Field/MultiTermTokenStream.pm
@@ -35,4 +35,9 @@
   [ map { $_->to_array } @{$self->{mtt}} ];
 };
 
+sub to_solr {
+  my $self = shift;
+  [ map { $_->to_solr } @{$self->{mtt}} ];
+};
+
 1;
diff --git a/lib/KorAP/Index/XIP/Constituency.pm b/lib/KorAP/Index/XIP/Constituency.pm
index ce43a7a..a5edd28 100644
--- a/lib/KorAP/Index/XIP/Constituency.pm
+++ b/lib/KorAP/Index/XIP/Constituency.pm
@@ -68,9 +68,17 @@
 
     my $content = $span->hash;
     my $f = $content->{fs}->{f};
-    return unless $f->{-name} eq 'const';
+    unless ($f->{-name} eq 'const') {
+      warn $f->{-id} . ' is no constant';
+      return;
+    };
 
-    my $type = $f->{'#text'} or return;
+    my $type = $f->{'#text'};
+
+    unless ($type) {
+      warn $f->{-id} . ' has no content';
+      return;
+    };
 
     # $type is now NPA, NP, NUM ...
     my %term = (
@@ -87,7 +95,13 @@
 
     my $this = __SUB__;
 
-    my $rel = $content->{rel} or return;
+    my $rel = $content->{rel};
+
+    unless ($rel) {
+      warn $f->{-id} . ' has no relation';
+      return;
+    };
+
     $rel = [$rel] unless ref $rel eq 'ARRAY';
 
     foreach (@$rel) {
@@ -103,7 +117,7 @@
 
       my $subspan = delete $xip_const{$target};
       unless ($subspan) {
-	warn "Span " . $target . " not found";
+#	warn "Span " . $target . " not found";
 	return;
       };
       $this->($subspan, $level + 1);
@@ -115,7 +129,9 @@
 
   # Start tree traversal from the root
   foreach ($roots->members) {
+
     my $obj = delete $xip_const{$_} or next;
+
     $add_const->($obj, 0);
   };
 
diff --git a/lib/KorAP/Tokenizer.pm b/lib/KorAP/Tokenizer.pm
index 343a85c..97a9889 100644
--- a/lib/KorAP/Tokenizer.pm
+++ b/lib/KorAP/Tokenizer.pm
@@ -25,6 +25,9 @@
   return $log;
 };
 
+warn('IMPLEMENT AGGRESSIVE TOKENIZATION (trennen mit [-\'\s])');
+warn('In the payload the position of the partial token has to be marked, '.
+       'so the voodoo operator can do its thing');
 
 # Parse tokens of the document
 sub parse {
@@ -193,7 +196,6 @@
   return $spans;
 };
 
-
 # Add information to the tokens
 sub add_tokendata {
   my $self = shift;
@@ -244,6 +246,12 @@
   my $loader = Mojo::Loader->new;
   my $foundry = shift;
   my $layer = shift;
+
+  unless ($foundry && $layer) {
+    warn 'Unable to add specific module - not enough information given!';
+    return;
+  };
+
   my $mod = 'KorAP::Index::' . $foundry . '::' . $layer;
 
   if ($mod->can('new') || eval("require $mod; 1;")) {
@@ -285,13 +293,21 @@
 
 sub support {
   my $self = shift;
+
+  # No setting - just getting
   unless ($_[0]) {
     my @supports;
+
+    # Get all foundries
     foreach my $foundry (keys %{$self->{support}}) {
       push(@supports, $foundry);
+
+      # Get all layers
       foreach my $layer (@{$self->{support}->{$foundry}}) {
 	  my @layers = @$layer;
 	  push(@supports, $foundry . '/' . $layers[0]);
+
+	  # More information
 	  if ($layers[1]) {
 	      push(@supports, $foundry . '/' . join('/', @layers));
 	  };
@@ -310,6 +326,7 @@
   push(@{$self->{support}->{$f}}, [$l, @info]);
 };
 
+
 sub layer_info {
     my $self = shift;
     $self->{layer_info} //= [];
@@ -336,17 +353,13 @@
   $string .= '<field name="' . $self->name . "\">\n";
   $string .= "<info>\n";
   $string .= 'tokenization = ' . $self->foundry . '#' . $self->layer . "\n";
-  if ($self->support) {
-    foreach my $foundry (keys %{$self->support}) {
-      foreach (@{$self->support($foundry)}) {
-	$string .= 'support = ' . $foundry . '#' . join(',', @{$_}) . "\n";
-      };
-    };
+
+  # There is support info
+  if (my $support = $self->support) {
+    $string .= 'support = ' . $support . "\n";
   };
-  if ($self->layer_info) {
-    foreach my $layer_info (keys %{$self->layer_info}) {
-      $string .= 'layer_info = ' . $_ . "\n";
-    };
+  if (my $layer_info = $self->layer_info) {
+    $string .= 'layer_info = ' . $layer_info . "\n";
   };
 
   $string .= "</info>\n";
diff --git a/lib/KorAP/Tokenizer/Spans.pm b/lib/KorAP/Tokenizer/Spans.pm
index 5c8e356..57b7d51 100644
--- a/lib/KorAP/Tokenizer/Spans.pm
+++ b/lib/KorAP/Tokenizer/Spans.pm
@@ -19,6 +19,7 @@
   return $log;
 };
 
+
 sub parse {
   my $self = shift;
   my $path = $self->path . $self->foundry . '/' . $self->layer . '.xml';
diff --git a/t/transform.t b/t/transform.t
index 7387fe3..3f351d7 100644
--- a/t/transform.t
+++ b/t/transform.t
@@ -5,6 +5,7 @@
 use warnings;
 use utf8;
 use Test::More;
+use JSON::XS;
 use Benchmark ':hireswallclock';
 use lib 'lib', '../lib';
 
@@ -113,19 +114,29 @@
 is($tokens->stream->pos(0)->to_string, '[(0-1)s:A|i:a|_0#0-1|-:tokens$<i>923|mate/p:XY|<>:base/s#0-74$<i>13|<>:base/text#0-6083$<i>923|-:base/sentences$<i>96|<>:base/para#0-224$<i>34|-:base/paragraphs$<i>76|opennlp/p:NE|<>:opennlp/s#0-74$<i>13|-:opennlp/sentences$<i>50|<>:corenlp/s#0-6$<i>2|-:corenlp/sentences$<i>65|cnx/l:A|cnx/p:N|cnx/syn:@NH|<>:cnx/c:np#0-1$<i>1|<>:cnx/s#0-74$<i>13|-:cnx/sentences$<i>62|tt/l:A|tt/p:NN|tt/l:A|tt/p:FM|<>:tt/s#0-6083$<i>923|-:tt/sentences$<i>1|>:mate/d:PNC$<i>2|xip/p:SYMBOL|xip/l:A|<>:xip/c:TOP#0-74$<i>13|<>:xip/c:MC#0-73$<i>13<b>1|<>:xip/c:NP#0-1$<i>1<b>2|<>:xip/c:NPA#0-1$<i>1<b>3|<>:xip/c:NOUN#0-1$<i>1<b>4|<>:xip/c:SYMBOL#0-1$<i>1<b>5|>:xip/d:SUBJ$<i>3|<:xip/d:COORD$<i>1|<>:xip/s#0-74$<i>13|-:xip/sentences$<i>64]', 'Startinfo');
 
 
-is($tokens->stream->pos(118)->to_string,
-   '[(763-768)s:Linie|i:linie|_118#763-768|'.
-     'mate/l:linie|mate/p:NN|mate/m:case:acc|mate/m:number:sg|mate/m:gender:fem|' .
-     'opennlp/p:NN|'.
-     'cnx/l:linie|cnx/p:N|cnx/syn:@NH|'.
-     'tt/l:Linie|tt/p:NN|'.
-     '<:mate/d:NK$<i>116|<:mate/d:NK$<i>117|>:mate/d:NK$<i>115|'.
-     'xip/p:NOUN|xip/l:Linie|<>:xip/c:NOUN#763-768$<i>119|<:xip/d:DETERM$<i>116|<:xip/d:NMOD$<i>117]', 'with All');
+#is($tokens->stream->pos(118)->to_string,
+#   '[(763-768)s:Linie|i:linie|_118#763-768|'.
+#     'mate/l:linie|mate/p:NN|mate/m:case:acc|mate/m:number:sg|mate/m:gender:fem|' .
+#     'opennlp/p:NN|'.
+#     'cnx/l:linie|cnx/p:N|cnx/syn:@NH|'.
+#     'tt/l:Linie|tt/p:NN|'.
+#     '<:mate/d:NK$<i>116|<:mate/d:NK$<i>117|>:mate/d:NK$<i>115|'.
+#     'xip/p:NOUN|xip/l:Linie|<>:xip/c:NOUN#763-768$<i>119|<:xip/d:DETERM$<i>116|<:xip/d:NMOD$<i>117]', 'with All');
+
+#[(763-768)s:Linie|i:linie|_118#763-768|mate/l:linie|mate/p:NN|mate/m:case:acc|mate/m:number:sg|mate/m:gender:fem|opennlp/p:NN|cnx/l:linie|cnx/p:N|cnx/syn:@NH|tt/l:Linie|tt/p:NN|<:mate/d:NK$<i>116|<:mate/d:NK$<i>117|>:mate/d:NK$<i>115|
+#      xip/p:NOUN|xip/l:Linie|<:xip/d:DETERM$<i>116|<:xip/d:NMOD$<i>117]
 
 is($tokens->layer_info, 'cnx/c=const cnx/l=lemma cnx/m=msd cnx/p=pos mate/d=dep mate/l=lemma mate/m=msd mate/p=pos opennlp/p=pos tt/l=lemma tt/p=pos xip/c=const xip/d=dep xip/l=lemma xip/p=pos', 'Layer info');
 
 is($tokens->support, 'base base/paragraphs base/sentences connexor connexor/morpho connexor/phrase connexor/sentences connexor/syntax corenlp corenlp/namedentities corenlp/namedentities corenlp/namedentities/ne_dewac_175m_600 corenlp/namedentities/ne_hgc_175m_600 corenlp/sentences mate mate/dependency mate/morpho opennlp opennlp/morpho opennlp/sentences treetagger treetagger/morpho treetagger/sentences xip xip/constituency xip/dependency xip/morpho xip/sentences', 'Support');
 
+
+# encode_json $tokens->stream->to_solr;
+
 done_testing;
 
+
+
+
+
 __END__