diff --git a/.clang-format b/.clang-format
index 11bdfea9d58845f7a46b066e9e6682d4bcfd9e0d..05b10dc8ce7802fa782322aca13d6d67d14c6cf8 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,10 +1,112 @@
 ---
-BasedOnStyle:  LLVM
-BreakConstructorInitializersBeforeComma: true
-ConstructorInitializerAllOnOneLineOrOnePerLine: true
+Language:        Cpp
+BasedOnStyle:  Chromium
+AccessModifierOffset: -2
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: true
+AlignConsecutiveDeclarations: true
+AlignEscapedNewlines: Right
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: All
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: true
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:   
+  AfterClass:      false
+  AfterControlStatement: false
+  AfterEnum:       false
+  AfterFunction:   true
+  AfterNamespace:  false
+  AfterObjCDeclaration: false
+  AfterStruct:     false
+  AfterUnion:      false
+  AfterExternBlock: false
+  BeforeCatch:     false
+  BeforeElse:      false
+  IndentBraces:    false
+  SplitEmptyFunction: true
+  SplitEmptyRecord: true
+  SplitEmptyNamespace: true
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Custom
+BreakBeforeInheritanceComma: false
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BreakConstructorInitializers: BeforeColon
+BreakAfterJavaFieldAnnotations: false
+BreakStringLiterals: true
+ColumnLimit:     120
+CommentPragmas:  '^ IWYU pragma:'
+CompactNamespaces: false
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
 Cpp11BracedListStyle: true
-Standard: Cpp11
-#SpaceBeforeParens: ControlStatements
-SpaceAfterControlStatementKeyword: true
-PointerBindsToType: true
+DerivePointerAlignment: false
+DisableFormat:   false
+ExperimentalAutoDetectBinPacking: false
+FixNamespaceComments: true
+ForEachMacros:   
+  - foreach
+  - Q_FOREACH
+  - BOOST_FOREACH
+IncludeBlocks:   Preserve
+IncludeCategories: 
+  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
+    Priority:        2
+  - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
+    Priority:        3
+  - Regex:           '.*'
+    Priority:        1
+IncludeIsMainRegex: '(Test)?$'
+IndentCaseLabels: false
+IndentPPDirectives: None
+IndentWidth:     2
+IndentWrappedFunctionNames: false
+JavaScriptQuotes: Leave
+JavaScriptWrapImports: true
+KeepEmptyLinesAtTheStartOfBlocks: true
+MacroBlockBegin: ''
+MacroBlockEnd:   ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: All
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakAssignment: 2
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+PointerAlignment: Left
+ReflowComments:  true
+SortIncludes:    true
+SortUsingDeclarations: true
+SpaceAfterCStyleCast: false
+SpaceAfterTemplateKeyword: true
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: ControlStatements
+#SpaceBeforeRangeBasedForLoopColon: true
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles:  false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard:        Cpp11
+TabWidth:        8
+UseTab:          Never
 ...
+
diff --git a/dis/src/pythia_dis.cc b/dis/src/pythia_dis.cc
index 71f92413c1f2790b1343487e8598e2963720d1a0..ce23c0f056579fb4e65bc4f338850bbeaed18a82 100644
--- a/dis/src/pythia_dis.cc
+++ b/dis/src/pythia_dis.cc
@@ -1,42 +1,124 @@
-// main45.cc is a part of the PYTHIA event generator.
-// Copyright (C) 2020 Torbjorn Sjostrand.
-// PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
-// Please respect the MCnet Guidelines, see GUIDELINES for details.
-
-// Author: Stefan Prestel <stefan.prestel@thep.lu.se>.
-
-// Keywords: LHE file; hepmc;
-
-// This program (main45.cc) illustrates how a file with HepMC3 events can be
-// generated by Pythia8. See main44.cc for how to ouput HepMC2 events instead.
-// Note: both main44.cc and main45.cc can use the same main44.cmnd input card.
-
 #include "Pythia8/Pythia.h"
 #include "Pythia8Plugins/HepMC3.h"
 #include <unistd.h>
 
 using namespace Pythia8;
 
-//==========================================================================
-
-// Example main programm to illustrate merging.
+#include "clipp.h"
+using namespace clipp;
+using std::string;
+//______________________________________________________________________________
+
+enum class mode { none, help, list, part };
+
+struct settings {
+  double      E_electron   = 10.0;  // GeV
+  double      E_ion        = 275.0; // GeV
+  std::string outfile      = "dis.hepmc";
+  int         ion_PID      = 2212;
+  int         electron_PID = 11;
+  bool        help         = false;
+  bool        success      = false;
+  double      Q2_min       = 4.0;
+  int         N_events     = 1000;
+};
+
+template <typename T>
+void print_usage(T cli, const char* argv0)
+{
+  // used default formatting
+  std::cout << "Usage:\n" << usage_lines(cli, argv0) << "\nOptions:\n" << documentation(cli) << '\n';
+}
+//______________________________________________________________________________
+
+template <typename T>
+void print_man_page(T cli, const char* argv0)
+{
+  // all formatting options (with their default values)
+  auto fmt = clipp::doc_formatting{}
+                 .start_column(8)                    // column where usage lines and documentation starts
+                 .doc_column(20)                     // parameter docstring start col
+                 .indent_size(4)                     // indent of documentation lines for children of a
+                                                     // documented group
+                 .line_spacing(0)                    // number of empty lines after single documentation lines
+                 .paragraph_spacing(1)               // number of empty lines before and after paragraphs
+                 .flag_separator(", ")               // between flags of the same parameter
+                 .param_separator(" ")               // between parameters
+                 .group_separator(" ")               // between groups (in usage)
+                 .alternative_param_separator("|")   // between alternative flags
+                 .alternative_group_separator(" | ") // between alternative groups
+                 .surround_group("(", ")")           // surround groups with these
+                 .surround_alternatives("(", ")")    // surround group of alternatives with these
+                 .surround_alternative_flags("", "") // surround alternative flags with these
+                 .surround_joinable("(", ")")        // surround group of joinable flags with these
+                 .surround_optional("[", "]")        // surround optional parameters with these
+                 .surround_repeat("", "...");        // surround repeatable parameters with these
+
+  auto mp = make_man_page(cli, argv0, fmt);
+  mp.prepend_section("DESCRIPTION", "Simple pythia dis generator.");
+  mp.append_section("EXAMPLES", " $ pythia_dis [output_file]");
+  std::cout << mp << "\n";
+}
+//______________________________________________________________________________
+
+settings cmdline_settings(int argc, char* argv[]) {
+  settings s;
+  auto     lastOpt =
+      " options:" % (option("-h", "--help").set(s.selected, mode::help) % "show help",
+                     option("-o", "--output") & value("out", s.outfile), value("file", s.infile).if_missing([] {
+                       std::cout << "You need to provide an input xml filename as the last "
+                                    "argument!\n";
+                     }) % "input xml file");
+
+  auto server_cli =
+      ((option("-p", "--port") & value("http_port", s.http_port)) %
+           "port to which the http serve attaches. Default: 8090 ",
+       (option("-H", "--host") & value("http_host", s.http_host)) %
+           "Http server host name or IP address. Default: 127.0.0.1",
+       (option("-f", "--file") & value("io_file", s.in_out_file)) %
+           "File used to initialize and save plots. Default: top_folder.root");
+
+  auto cli =
+      (command("help").set(s.selected, mode::help) | (server_cli, lastOpt));
+
+  assert(cli.flags_are_prefix_free());
+
+  auto res = parse(argc, argv, cli);
+
+  // if( res.any_error() ) {
+  //  s.success = false;
+  //  std::cout << make_man_page(cli, argv[0]).prepend_section("error: ",
+  //                                                           "    The best
+  //                                                           thing since
+  //                                                           sliced bread.");
+  //  return s;
+  //}
+  s.success = true;
+
+  if (s.selected == mode::help) {
+    print_man_page<decltype(cli)>(cli, argv[0]);
+  };
+  return s;
+}
+//______________________________________________________________________________
 
-int main( int argc, char* argv[] ){
+int main(int argc, char* argv[]) {
 
-  // Check that correct number of command-line arguments
-  if (argc != 2) {
-    cerr << " Unexpected number of command-line arguments ("<<argc<<"). \n"
-         << " You are expected to provide the arguments" << endl
-         << " 1. Output file for HepMC events" << endl
-         << " Program stopped. " << endl;
+  settings s = cmdline_settings(argc, argv);
+  if (!s.success) {
     return 1;
   }
 
-  // Beam energies, minimal Q2, number of events to generate.
-  double eProton   = 250.;
-  double eElectron = 10.0;
-  double Q2min     = 5.;
-  int    nEvent    = 10000;
+  if (s.selected == mode::help) {
+    return 0;
+  }
+
+
+    // Beam energies, minimal Q2, number of events to generate.
+  double eProton   = s.E_ion;
+  double eElectron = s.E_electron;
+  double Q2min     = s.Q2_min;
+  int    nEvent    = s.N_events;
 
   // Generator. Shorthand for event.
   Pythia pythia;
@@ -45,7 +127,7 @@ int main( int argc, char* argv[] ){
   // Set up incoming beams, for frame with unequal beam energies.
   pythia.readString("Beams:frameType = 2");
   // BeamA = proton.
-  pythia.readString("Beams:idA = 2212");
+  pythia.readString("Beams:idA = " +std::to_string(s.ion_PID));
   pythia.settings.parm("Beams:eA", eProton);
   // BeamB = electron.
   pythia.readString("Beams:idB = 11");
@@ -55,7 +137,7 @@ int main( int argc, char* argv[] ){
   // Neutral current (with gamma/Z interference).
   pythia.readString("WeakBosonExchange:ff2ff(t:gmZ) = on");
   // Uncomment to allow charged current.
-  //pythia.readString("WeakBosonExchange:ff2ff(t:W) = on");
+  // pythia.readString("WeakBosonExchange:ff2ff(t:W) = on");
   // Phase-space cut: minimal Q2 of process.
   pythia.settings.parm("PhaseSpace:Q2Min", Q2min);
 
@@ -80,21 +162,21 @@ int main( int argc, char* argv[] ){
   cout << endl << endl << endl;
 
   // Histograms.
-  double Wmax = sqrt(4.* eProton * eElectron);
-  Hist Qhist("Q [GeV]", 100, 0., 50.);
-  Hist Whist("W [GeV]", 100, 0., Wmax);
-  Hist xhist("x", 100, 0., 1.);
-  Hist yhist("y", 100, 0., 1.);
-  Hist pTehist("pT of scattered electron [GeV]", 100, 0., 50.);
-  Hist pTrhist("pT of radiated parton [GeV]", 100, 0., 50.);
-  Hist pTdhist("ratio pT_parton/pT_electron", 100, 0., 5.);
+  double Wmax = sqrt(4. * eProton * eElectron);
+  Hist   Qhist("Q [GeV]", 100, 0., 50.);
+  Hist   Whist("W [GeV]", 100, 0., Wmax);
+  Hist   xhist("x", 100, 0., 1.);
+  Hist   yhist("y", 100, 0., 1.);
+  Hist   pTehist("pT of scattered electron [GeV]", 100, 0., 50.);
+  Hist   pTrhist("pT of radiated parton [GeV]", 100, 0., 50.);
+  Hist   pTdhist("ratio pT_parton/pT_electron", 100, 0., 5.);
 
   double sigmaTotal(0.), errorTotal(0.);
-  bool wroteRunInfo = false;
-    // Get the inclusive x-section by summing over all process x-sections.
-    double xs = 0.;
-    for (int i=0; i < pythia.info.nProcessesLHEF(); ++i)
-      xs += pythia.info.sigmaLHEF(i);
+  bool   wroteRunInfo = false;
+  // Get the inclusive x-section by summing over all process x-sections.
+  double xs = 0.;
+  for (int i = 0; i < pythia.info.nProcessesLHEF(); ++i)
+    xs += pythia.info.sigmaLHEF(i);
 
   // Begin event loop.
   for (int iEvent = 0; iEvent < nEvent; ++iEvent) {
@@ -176,8 +258,6 @@ int main( int argc, char* argv[] ){
     // Write the HepMC event to file. Done with it.
     ascii_io.write_event(hepmcevt);
 
-
-
     // End of event loop. Statistics and histograms.
   }
   pythia.stat();
@@ -185,5 +265,4 @@ int main( int argc, char* argv[] ){
 
 
   return 0;
-
-}
+  }