diff --git a/pom.xml b/pom.xml
index 52b0281..b3e122c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
                         <manifest>
                             <addClasspath>true</addClasspath>
                             <classpathPrefix>dependency/</classpathPrefix>
-                            <mainClass>org.ids_mannheim.TotalNGram</mainClass>
+                            <mainClass>org.ids_mannheim.TotalNGrams</mainClass>
                         </manifest>
                     </archive>
                 </configuration>
@@ -134,7 +134,7 @@
                         <manifest>
                             <addClasspath>true</addClasspath>
                             <classpathPrefix>dependency/</classpathPrefix>
-                            <mainClass>org.ids_mannheim.TotalNGram</mainClass>
+                            <mainClass>org.ids_mannheim.TotalNGrams</mainClass>
                         </manifest>
                     </archive>
                     <descriptorRefs>
@@ -157,15 +157,15 @@
                     </execution>
                 </executions>
                 <configuration>
-                    <binFolder>${user.home}/bin/</binFolder>
+                    <binFolder>bin</binFolder>
                     <extraJvmArguments>-Xmx512000m</extraJvmArguments>
                     <binFileExtensions>
                         <unix></unix>
                     </binFileExtensions>
                     <programs>
                         <program>
-                            <mainClass>org.ids_mannheim.TotalNGram</mainClass>
-                            <id>totalngram</id>
+                            <mainClass>org.ids_mannheim.TotalNGrams</mainClass>
+                            <id>totalngrams</id>
                         </program>
                     </programs>
                 </configuration>
diff --git a/src/main/java/org/ids_mannheim/TotalNGrams.java b/src/main/java/org/ids_mannheim/TotalNGrams.java
index b5019f1..ba1a40d 100644
--- a/src/main/java/org/ids_mannheim/TotalNGrams.java
+++ b/src/main/java/org/ids_mannheim/TotalNGrams.java
@@ -8,7 +8,6 @@
 import java.io.FileOutputStream;
 import java.io.PrintStream;
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -20,17 +19,17 @@
 @CommandLine.Command(mixinStandardHelpOptions = true,
         name = "totalngram", description = "add ngram counts from KorAP-XML or CoNLL-U files")
 
-public class TotalNGram implements Callable<Integer> {
+public class TotalNGrams implements Callable<Integer> {
     static public final Logger logger;
     private static final int MAX_THREADS = Runtime.getRuntime().availableProcessors() - 2;
     private static final String DEFAULT_LOGFILE = "totalngram.log";
 
     static {
-        String path = TotalNGram.class.getClassLoader()
+        String path = TotalNGrams.class.getClassLoader()
                 .getResource("logging.properties")
                 .getFile();
         System.setProperty("java.util.logging.config.file", path);
-        logger = Logger.getLogger(TotalNGram.class.getSimpleName());
+        logger = Logger.getLogger(TotalNGrams.class.getSimpleName());
     }
 
     @CommandLine.Parameters(arity = "1..*", description = "input files")
@@ -79,11 +78,11 @@
 
     private Progressbar etaPrinter;
 
-    public TotalNGram() {
+    public TotalNGrams() {
     }
 
     public static void main(String[] args) {
-        System.exit(new CommandLine(new TotalNGram()).execute(args));
+        System.exit(new CommandLine(new TotalNGrams()).execute(args));
     }
 
     private void initLogging() {
diff --git a/src/main/java/org/ids_mannheim/Utils.java b/src/main/java/org/ids_mannheim/Utils.java
index 966236a..bde120a 100644
--- a/src/main/java/org/ids_mannheim/Utils.java
+++ b/src/main/java/org/ids_mannheim/Utils.java
@@ -23,12 +23,12 @@
         } catch (AccessDeniedException e) {
             final String message = "ERROR: Cannot write file '" + fname + "'";
             System.err.println(message);
-            TotalNGram.logger.severe(message);
+            TotalNGrams.logger.severe(message);
             System.exit(-1);
         } catch (FileAlreadyExistsException e) {
             if (!force_overwrite) {
                 final String message = "ERROR: '" + fname + "' already exits. Use --force to overwrite";
-                TotalNGram.logger.severe(message);
+                TotalNGrams.logger.severe(message);
                 System.err.println(message);
                 System.exit(-1);
             }
diff --git a/src/main/java/org/ids_mannheim/WorkerNodePool.java b/src/main/java/org/ids_mannheim/WorkerNodePool.java
index a175926..429d286 100644
--- a/src/main/java/org/ids_mannheim/WorkerNodePool.java
+++ b/src/main/java/org/ids_mannheim/WorkerNodePool.java
@@ -40,7 +40,7 @@
                 busy.set(i, true);
                 return i;
             } else {
-                TotalNGram.logger.warning("No free worker node. This should not happen.");
+                TotalNGrams.logger.warning("No free worker node. This should not happen.");
                 //noinspection BusyWait
                 Thread.sleep(1000);
             }
@@ -60,7 +60,7 @@
                 host = single[1];
             } else {
                 host = "";
-                TotalNGram.logger.severe("Wrong worker node format: " + s);
+                TotalNGrams.logger.severe("Wrong worker node format: " + s);
                 System.exit(-1);
             }
             IntStream.range(0, procs).forEach(u -> {
diff --git a/src/test/java/org/ids_mannheim/WorkerTest.java b/src/test/java/org/ids_mannheim/WorkerTest.java
index 8f3020f..40bf344 100644
--- a/src/test/java/org/ids_mannheim/WorkerTest.java
+++ b/src/test/java/org/ids_mannheim/WorkerTest.java
@@ -66,7 +66,7 @@
                 true,
                 new WorkerNodePool(""),
                 new Progressbar(tempFile.length()),
-                Logger.getLogger(TotalNGram.class.getSimpleName()));
+                Logger.getLogger(TotalNGrams.class.getSimpleName()));
 
         queue.add(0);
         queue.add(-1);
@@ -75,4 +75,4 @@
         assertTrue(errContent.toString().contains("with 1 text"));
         assertTrue(errContent.toString().contains("100%"));
     }
-}
\ No newline at end of file
+}
