diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..6d2d827b06bd4671b38505aae7b79c2659a743ae
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+*.iml
+.idea
+target
+.bsp
diff --git a/src/main/scala/lisa/kernel/Printer.scala b/src/main/scala/lisa/kernel/Printer.scala
index 752eb43f989520fbdf1d7ece469ceee2689637cc..c5d2967ded8c571b051e165f166bf87c27d894cc 100644
--- a/src/main/scala/lisa/kernel/Printer.scala
+++ b/src/main/scala/lisa/kernel/Printer.scala
@@ -90,7 +90,16 @@ object Printer {
                     val leftParenthesized = if(isLeftParentheses) prettyParentheses(leftString) else leftString
                     val rightParenthesized = if(isRightParentheses) prettyParentheses(rightString) else rightString
                     prettyInfix(label.id, leftParenthesized, rightParenthesized, compact)
-                case _ => label.id+"("+args.map(a => prettyFormulaInternal(a, isRightMost, compact)).mkString(",")+")" //throw new Exception // Invalid number of arguments, cannot print
+                case (nary @ (And | Or), args) if args.nonEmpty =>
+                    // Rewriting to match the above case; namely op(a) --> a, and op(a, ...rest) --> op(a, op(...rest))
+                    // Empty args aren't allowed here
+                    // Invariant: args.size > 2
+                    if(args.sizeIs == 1) {
+                        prettyFormulaInternal(args.head, isRightMost, compact)
+                    } else {
+                        prettyFormulaInternal(ConnectorFormula(nary, Seq(args.head, ConnectorFormula(nary, args.tail))), isRightMost, compact)
+                    }
+                case _ => prettyFunction(label.id, args.map(a => prettyFormulaInternal(a, isRightMost, compact)), compact)
             }
         case BinderFormula(label, bound, inner) =>
             def accumulateNested(f: Formula, acc: Seq[VariableLabel]): (Seq[VariableLabel], Formula) = f match {
@@ -102,25 +111,25 @@ object Printer {
     }
 
     /**
-     * Returns a string representation of this formula. See also {@link prettyTerm}.
+     * Returns a string representation of this formula. See also [[prettyTerm]].
      * Example output:
      * <pre>
      * ∀x, y. (∀z. (z ∈ x) ↔ (z ∈ y)) ↔ (x = y)
      * </pre>
      * @param formula the formula
-     * @param compact if spaces should be omitted between separators
+     * @param compact whether spaces should be omitted between tokens
      * @return the string representation of this formula
      */
     def prettyFormula(formula: Formula, compact: Boolean = false): String = prettyFormulaInternal(formula, true, compact)
 
     /**
-     * Returns a string representation of this term. See also {@link prettyFormula}.
+     * Returns a string representation of this term. See also [[prettyFormula]].
      * Example output:
      * <pre>
      * f({w, (x, y)}, z)
      * </pre>
      * @param term the term
-     * @param compact if spaces should be omitted between separators
+     * @param compact whether spaces should be omitted between tokens
      * @return the string representation of this term
      */
     def prettyTerm(term: Term, compact: Boolean = false): String = term match {
@@ -162,7 +171,7 @@ object Printer {
      * ⊢ ∀x, y. (∀z. (z ∈ x) ↔ (z ∈ y)) ↔ (x = y)
      * </pre>
      * @param sequent the sequent
-     * @param compact if spaces should be omitted between separators
+     * @param compact whether spaces should be omitted between tokens
      * @return the string representation of this sequent
      */
     def prettySequent(sequent: Sequent, compact: Boolean = false): String = {
@@ -221,17 +230,9 @@ object Printer {
                         Seq(stepName, topSteps.mkString(commaSeparator(compact = false))).filter(_.nonEmpty).mkString(" "),
                         prettySequent(step.bot)
                     )
-                def prettyDefinition(stepName: String, left: String, right: String, condition: Option[String] = None): (Boolean, String, String, String) =
-                    ( // This method is an alternative to print something more meaningful for definitions
-                        showErrorForLine,
-                        prefixString,
-                        stepName,
-                        Seq(Seq(left, ":=", right) ++ condition.toSeq).filter(_.nonEmpty).map(_.mkString(" ")).mkString(", ")
-                    )
                 step match {
                     case sp @ SCSubproof(_, _, true) => pretty("Subproof", sp.premises*) +: prettySCProofRecursive(sp.sp, level + 1, currentTree, (if(i == 0) topMostIndices else IndexedSeq.empty) :+ i)
                     case other =>
-
                         val line = other match {
                             case Rewrite(_, t1) => pretty("Rewrite", t1)
                             case Hypothesis(_, _) => pretty("Hypo.")
@@ -245,14 +246,14 @@ object Printer {
                             case LeftOr(_, l, _) => pretty("Left ∨", l*)
                             case RightExists(_, t1, _, _, _) => pretty("Right ∃", t1)
                             case RightForall(_, t1, _, _) => pretty("Right ∀", t1)
-                            case RightAnd(_, l,_) => pretty("Right ∧", l*)
+                            case RightAnd(_, l, _) => pretty("Right ∧", l*)
                             case RightIff(_, t1, t2, _, _) => pretty("Right ↔", t1, t2)
                             case RightImplies(_, t1, _, _) => pretty("Right →", t1)
                             case Weakening(_, t1) => pretty("Weakening", t1)
                             case LeftImplies(_, t1, t2, _, _) => pretty("Left →", t1, t2)
                             case LeftIff(_, t1, _, _) => pretty("Left ↔", t1)
-                            case LeftRefl(_, t1, _) => pretty("L. Axiom", t1)
-                            case RightRefl(_, _) => pretty("R. Axiom")
+                            case LeftRefl(_, t1, _) => pretty("L. Refl", t1)
+                            case RightRefl(_, _) => pretty("R. Refl")
                             case LeftSubstEq(_, t1, _, _, _, _) => pretty("L. SubstEq", t1)
                             case RightSubstEq(_, t1, _, _, _, _) => pretty("R. SubstEq", t1)
                             case LeftSubstIff(_, t1, _, _, _, _) => pretty("L. SubstIff", t1)
@@ -275,7 +276,7 @@ object Printer {
                 val suffix = Seq(indices, rightPadSpaces(stepName, maxStepNameLength), sequent)
                 val full = if(showError.nonEmpty) (if(isMarked) marker else leftPadSpaces("", marker.length)) +: suffix else suffix
                 full.mkString(" ")
-        }.mkString("\n")+(if (showError.nonEmpty) s"\nProof checker has reported error at line ${showError.get._1}: ${showError.get._2}" else "")
+        }.mkString("\n") + (if (showError.nonEmpty) s"\nProof checker has reported error at line ${showError.get._1}: ${showError.get._2}" else "")
     }
 
 }