diff --git a/lib/Redmine/CLI.pm b/lib/Redmine/CLI.pm
index de612dc8783262989e3a1d05c88966207260fd5f..d3b92f056c9ed5b2e7ef648c4b4a08dd9d6ec822 100644
--- a/lib/Redmine/CLI.pm
+++ b/lib/Redmine/CLI.pm
@@ -73,7 +73,7 @@ EOPOD
 my $default_config_fnm= 'redmine.json';
 my @default_home_dirs= ('etc', undef, 'bin');
 
-my @env_vars= qw(project_name ticket_number out_csv);
+my @env_vars= qw(project_name tracker_name ticket_number out_csv subject);
 my %env_vars= map { $_ => 1 } @env_vars;
 
 sub new
@@ -86,6 +86,7 @@ sub new
      'cfg_stanza'   => 'Redmine',
      'op_mode'      => undef,
      # 'project_name' => undef,
+     'tracker_name' => 'Task',
   };
 
   my @cfg_fnm= (
@@ -116,14 +117,14 @@ sub new
 
 sub set
 {
-  my $obj= shift;
+  my $self= shift;
   my %par= @_;
 
   my %res;
   foreach my $par (keys %par)
   {
-    $res{$par}= $obj->{$par};
-    $obj->{$par}= $par{$par};
+    $res{$par}= $self->{$par};
+    $self->{$par}= $par{$par};
   }
 
   (wantarray) ? %res : \%res;
@@ -207,6 +208,13 @@ sub init
   ($cfg, $mRM);
 }
 
+sub get_wrapper
+{
+  my $self= shift;
+
+  my $mRM= $self->{_rm_wrapper};
+}
+
 sub main_part2
 {
   my $self= shift;
@@ -335,6 +343,15 @@ sub interpret
       print "no parent issue found for $ticket_number\n";
     }
   }
+  elsif ($op_mode eq 'prepare')
+  {
+    my $project_name= $self->{project_name};
+    my $tracker_name= $self->{tracker_name};
+    my $subject= $self->{subject};
+    my $description;
+
+    my $t= prepare_ticket ($mRM, $project_name, $tracker_name, $subject, $description);
+  }
 
 =begin comment
 
@@ -382,12 +399,17 @@ sub interact
   }
 }
 
+=head1 methods belonging WebService::Redmine
+
+=cut
+
 sub show_issues
 {
   my $rm= shift;
   my $proj_name= shift;
   my $save_as_tsv= shift;
 
+  print "rm=[$rm]\n";
   my $proj= $rm->project($proj_name);
   print "proj_name=[$proj_name] proj: ", Dumper ($proj);
 
@@ -461,6 +483,47 @@ sub filter1
   (\@dx, \%dy);
 }
 
+=head1 methods belonging Redmine::Wrapper
+
+=cut
+
+sub prepare_ticket
+{
+  my $mRM= shift;
+  my $project_name= shift;
+  my $tracker_name= shift;
+  my $subject= shift;
+  my $description= shift;
+
+  my $rm= $mRM->attach();
+
+  # print "rm=[$rm]\n";
+
+  my $proj_id= $mRM->get_project_id($project_name);
+  # my $proj_id= $proj->{'project'}->{'id'};
+  print "project_name=[$project_name] proj_id=[$proj_id]\n";
+
+  my $tr_id= $mRM->get_tracker_id($tracker_name);
+  # print "tr: ", Dumper ($tr);
+  # my $tr_id= $tr->{'tracker'}->{'id'};
+  print "tracker_name=[Task] tr_id=[$tr_id]\n";
+
+  my $ticket=
+  {
+    issue => my $issue=
+    {
+      'project_id' => $proj_id,
+      'tracker_id' => $tr_id,
+      'subject' => $subject,
+      'description' => $description,
+    }
+  };
+
+  # print "ticket: ", Dumper ($ticket);
+
+  $ticket;
+}
+
 sub show_issue
 {
   my $rm= shift;
@@ -509,7 +572,7 @@ __END__
 
 =over 1
 
-=item There command line options need to be evolved
+=item The command line options need to be evolved
 
 =back
 
diff --git a/lib/Redmine/Wrapper.pm b/lib/Redmine/Wrapper.pm
index 2e5a4248cf379a1d255a5291e44cfd983f92a7ea..81dab0de06c8754b6e7be795c2caee626e4f99aa 100644
--- a/lib/Redmine/Wrapper.pm
+++ b/lib/Redmine/Wrapper.pm
@@ -5,9 +5,13 @@ use strict;
 
 use WebService::Redmine;
 
+sub get_project_info;
+sub get_tracker_map;
+
 my %automapping=
 (
-  'project_ids' => 1,
+  'project_ids' => { automap => 1, object => 'project', info => \&get_project_info },
+  'tracker_ids' => { automap => 1, object => 'tracker', map => \&get_tracker_map },
 );
 
 my %USER_NAMES= map { $_ => 1 } qw(assigned_to);
@@ -57,41 +61,73 @@ sub get_mapped_id
   my $map_name= shift;
   my $name= shift;
 
-  my $c= $self->{'cfg'};
-  # print "cfg: ", main::Dumper ($c);
+  my $cfg= $self->{'cfg'};
+  # print "cfg: ", main::Dumper ($cfg);
 
-  $map_name= 'user' if (exists ($USER_NAMES{$map_name}));
-  my $m= $c->{$map_name.'_ids'};
+  $map_name= 'user_ids' if (exists ($USER_NAMES{$map_name}));
+  my $m= $self->{$map_name};
+  if (!defined ($m) && exists ($cfg->{$map_name}))
+  {
+    $m= $self->{$map_name}= { %$m }; # copy from config
+  }
 
   # print "map_name=[$map_name] name=[$name] m=", main::Dumper ($m);
 
   my $id;
-  my $perform_lookup= 0;
+  my $perform_lookup= 1;
   if (exists ($m->{$name}))
   {
     $id= $m->{$name};
-    print "ATTN: no id known for $map_name=[$name]\n";
+    # print "ATTN: no id known for $map_name=[$name]\n";
 
-    if (exists ($self->{automapping}) && $self->{automapping} >= 1)
+=begin comment
+
+    if (exists ($cfg->{automapping}) && $cfg->{automapping} >= 1)
     { # TODO: add an *optional* lookup ...
       $perform_lookup= 1;
     }
+
+=end comment
+=cut
+
   }
   else
   {
-    print "ATTN: no *map* named [$map_name] available\n";
-    if (exists ($self->{automapping}) && $self->{automapping} >= 2 && exists ($automapping{$map_name}))
-    { # TODO: allow dynamically fetched maps, when the map name is valied, e.g. project_ids etc..
-      if ($name eq 'project')
-      {
-        my $pi= $self->get_project_info ($name);
-        $perform_lookup= 1 if (defined ($pi));
-      }
+    # print "ATTN: no *map* named [$map_name] available\n";
+
+=begin comment
+
+    if (exists ($cfg->{automapping}) && $cfg->{automapping} >= 2)
+    {
+      $perform_lookup= 1;
     }
+
+=end comment
+=cut
+
   }
 
   if (!defined ($id) && $perform_lookup)
   {
+    # print "map_name=[$map_name] id not found, perform_lookup=[$perform_lookup]\n";
+
+    if (exists ($automapping{$map_name}))
+    { # TODO: allow dynamically fetched maps, when the map name is valid, e.g. project_ids etc..
+      my $automap= $automapping{$map_name};
+      # print "NOTE: checking automap: ", main::Dumper ($automap);
+      if (defined (my $c_i= $automap->{info}))
+      {
+        my $pi= &$c_i ($self, $name);
+        # print "pi: ", main::Dumper ($pi);
+        $id= $pi->{id} if (defined ($pi));
+      }
+      elsif (defined (my $c_m= $automap->{map}))
+      {
+        my $map= &$c_m ($self);
+        # print "map: ", main::Dumper ($map);
+        $id= $map->{$name} if (defined ($map));
+      }
+    }
   }
 
   $id;
@@ -105,6 +141,25 @@ sub get_tracker_id
   $self->get_mapped_id ('tracker_ids', $tracker_name);
 }
 
+# Note: for some reason, receiving info for one tracker is not possible
+sub get_tracker_map
+{
+  my $self= shift;
+
+  my $rm= $self->attach();
+  my $tracker_list= $rm->trackers();
+  # print __LINE__, " tracker_list: ", main::Dumper ($tracker_list);
+
+  my %trackers;
+  if (defined ($tracker_list))
+  {
+    %trackers= map { $_->{name} => $_->{id} } @{$tracker_list->{trackers}};
+    $self->{tracker_ids}= \%trackers;
+  }
+
+  \%trackers;
+}
+
 sub get_project_id
 {
   my $self= shift;
@@ -120,7 +175,11 @@ sub get_project_info
 
   my $rm= $self->attach();
   my $proj= $rm->project( $name );
-  print __LINE__, " get_project_info: name=[$name] proj: ", main::Dumper ($proj);
+
+  return undef unless (defined ($proj));
+
+  # print __LINE__, " get_project_info: name=[$name] proj: ", main::Dumper ($proj);
+  return $proj->{'project'};
 }
 
 sub fixup_issue