diff --git a/src/language/ASTBuilder.cpp b/src/language/ASTBuilder.cpp
index 6790f5bc6cfde884b963abee09c0a3eacf3ee1d4..22acb285c9eda3f1c026bdf5d2aa23c6a65ac660 100644
--- a/src/language/ASTBuilder.cpp
+++ b/src/language/ASTBuilder.cpp
@@ -237,8 +237,6 @@ using selector =
                                                       and_op,
                                                       or_op,
                                                       xor_op,
-                                                      bitand_op,
-                                                      bitor_op,
                                                       eq_op,
                                                       multiplyeq_op,
                                                       divideeq_op,
diff --git a/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp b/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp
index 8d710ac11005f59b3fc37862f5d9c7eac2fd996c..c14a89bec57ea1499c74094030258e4d30f488ae 100644
--- a/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp
+++ b/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp
@@ -42,28 +42,6 @@ struct BinOp<language::xor_op>
   }
 };
 
-template <>
-struct BinOp<language::bitand_op>
-{
-  template <typename A, typename B>
-  PUGS_INLINE auto
-  eval(const A& a, const B& b) -> decltype(a & b)
-  {
-    return a & b;
-  }
-};
-
-template <>
-struct BinOp<language::bitor_op>
-{
-  template <typename A, typename B>
-  PUGS_INLINE auto
-  eval(const A& a, const B& b) -> decltype(a | b)
-  {
-    return a | b;
-  }
-};
-
 template <>
 struct BinOp<language::eqeq_op>
 {
@@ -185,8 +163,7 @@ class BinaryExpressionProcessor final : public INodeProcessor
     // Add 'signed' when necessary to avoid signed/unsigned comparison warnings
     if constexpr ((not(std::is_same_v<A_DataT, bool> or std::is_same_v<B_DataT, bool>)) and
                   (std::is_same_v<BinaryOpT, language::and_op> or std::is_same_v<BinaryOpT, language::or_op> or
-                   std::is_same_v<BinaryOpT, language::xor_op> or std::is_same_v<BinaryOpT, language::bitand_op> or
-                   std::is_same_v<BinaryOpT, language::bitor_op> or std::is_same_v<BinaryOpT, language::eqeq_op> or
+                   std::is_same_v<BinaryOpT, language::xor_op> or std::is_same_v<BinaryOpT, language::eqeq_op> or
                    std::is_same_v<BinaryOpT, language::not_eq_op> or std::is_same_v<BinaryOpT, language::lesser_op> or
                    std::is_same_v<BinaryOpT, language::lesser_or_eq_op> or
                    std::is_same_v<BinaryOpT, language::greater_op> or
@@ -212,8 +189,7 @@ class BinaryExpressionProcessor final : public INodeProcessor
   }
 
   static inline const bool _is_defined{[] {
-    if constexpr (std::is_same_v<BinaryOpT, language::bitand_op> or std::is_same_v<BinaryOpT, language::xor_op> or
-                  std::is_same_v<BinaryOpT, language::bitor_op>) {
+    if constexpr (std::is_same_v<BinaryOpT, language::xor_op>) {
       return std::is_same_v<std::decay_t<A_DataT>, std::decay_t<B_DataT>> and std::is_integral_v<std::decay_t<A_DataT>>;
     }
     return true;
@@ -304,17 +280,13 @@ ASTNodeBinaryOperatorExpressionBuilder::ASTNodeBinaryOperatorExpressionBuilder(A
     set_binary_operator_processor(n, language::plus_op{});
   } else if (n.is<language::minus_op>()) {
     set_binary_operator_processor(n, language::minus_op{});
+
   } else if (n.is<language::or_op>()) {
     set_binary_operator_processor(n, language::or_op{});
   } else if (n.is<language::and_op>()) {
     set_binary_operator_processor(n, language::and_op{});
-
   } else if (n.is<language::xor_op>()) {
     set_binary_operator_processor(n, language::xor_op{});
-  } else if (n.is<language::bitand_op>()) {
-    set_binary_operator_processor(n, language::bitand_op{});
-  } else if (n.is<language::bitor_op>()) {
-    set_binary_operator_processor(n, language::bitor_op{});
 
   } else if (n.is<language::greater_op>()) {
     set_binary_operator_processor(n, language::greater_op{});
diff --git a/src/language/ASTNodeDataTypeBuilder.cpp b/src/language/ASTNodeDataTypeBuilder.cpp
index 088eada9b942cd38cb63ff8cbd46a99092e88c09..a7268f8a39f14964420ad1c70d153e0c07ea4e50 100644
--- a/src/language/ASTNodeDataTypeBuilder.cpp
+++ b/src/language/ASTNodeDataTypeBuilder.cpp
@@ -100,7 +100,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n)
     } else if (n.is<language::unary_not>() or n.is<language::lesser_op>() or n.is<language::lesser_or_eq_op>() or
                n.is<language::greater_op>() or n.is<language::greater_or_eq_op>() or n.is<language::eqeq_op>() or
                n.is<language::not_eq_op>() or n.is<language::and_op>() or n.is<language::or_op>() or
-               n.is<language::xor_op>() or n.is<language::bitand_op>() or n.is<language::bitor_op>()) {
+               n.is<language::xor_op>()) {
       n.m_data_type = ASTNodeDataType::bool_t;
     } else if (n.is<language::unary_minus>() or n.is<language::unary_plus>() or n.is<language::unary_plusplus>() or
                n.is<language::unary_minusminus>()) {
diff --git a/src/language/ASTNodeExpressionBuilder.cpp b/src/language/ASTNodeExpressionBuilder.cpp
index bb56d9b78cadd9f72aba7b78fd246bf3372fcb7c..498830c75372efbb6cf438f95cc4e4bcc5979ada 100644
--- a/src/language/ASTNodeExpressionBuilder.cpp
+++ b/src/language/ASTNodeExpressionBuilder.cpp
@@ -295,9 +295,9 @@ build_node_type(ASTNode& n)
 
   } else if (n.is<language::multiply_op>() or n.is<language::divide_op>() or n.is<language::plus_op>() or
              n.is<language::minus_op>() or n.is<language::or_op>() or n.is<language::and_op>() or
-             n.is<language::xor_op>() or n.is<language::bitand_op>() or n.is<language::bitor_op>() or
-             n.is<language::greater_op>() or n.is<language::greater_or_eq_op>() or n.is<language::lesser_op>() or
-             n.is<language::lesser_or_eq_op>() or n.is<language::eqeq_op>() or n.is<language::not_eq_op>()) {
+             n.is<language::xor_op>() or n.is<language::greater_op>() or n.is<language::greater_or_eq_op>() or
+             n.is<language::lesser_op>() or n.is<language::lesser_or_eq_op>() or n.is<language::eqeq_op>() or
+             n.is<language::not_eq_op>()) {
     ASTNodeBinaryOperatorExpressionBuilder{n};
 
   } else if (n.is<language::B_set>()) {
diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp
index 56a650baa1dcd24687d99e61c920d6d547081fb1..83748365c1ba8ae2048069509744127d6a17470f 100644
--- a/src/language/PEGGrammar.hpp
+++ b/src/language/PEGGrammar.hpp
@@ -75,8 +75,6 @@ struct and_kw :  TAO_PEGTL_KEYWORD("and") {};
 struct or_kw :  TAO_PEGTL_KEYWORD("or") {};
 
 struct xor_kw :  TAO_PEGTL_KEYWORD("xor") {};
-struct bitand_kw :  TAO_PEGTL_KEYWORD("bitand") {};
-struct bitor_kw :  TAO_PEGTL_KEYWORD("bitor") {};
 
 struct and_eq_kw :  TAO_PEGTL_KEYWORD("and_eq") {};
 struct xor_eq_kw :  TAO_PEGTL_KEYWORD("xor_eq") {};
@@ -113,7 +111,7 @@ struct cout_kw : TAO_PEGTL_KEYWORD("cout") {};
 struct cerr_kw : TAO_PEGTL_KEYWORD("cerr") {};
 struct clog_kw : TAO_PEGTL_KEYWORD("clog") {};
 
-struct keywork : sor < basic_type, true_kw, false_kw, do_kw, while_kw, for_kw, if_kw, else_kw, and_kw, or_kw, xor_kw,  bitand_kw, bitor_kw, and_eq_kw, xor_eq_kw, or_eq_kw, break_kw, continue_kw, cout_kw, cerr_kw, clog_kw > {};
+struct keywork : sor < basic_type, true_kw, false_kw, do_kw, while_kw, for_kw, if_kw, else_kw, and_kw, or_kw, xor_kw, and_eq_kw, xor_eq_kw, or_eq_kw, break_kw, continue_kw, cout_kw, cerr_kw, clog_kw > {};
 
 struct name : minus< identifier, keywork >  {};
 struct NAME : seq < name, ignored > {};
@@ -150,10 +148,7 @@ struct unary_expression : sor< seq< unary_operator, unary_expression >,
 
 struct and_op : seq< and_kw, ignored > {};
 struct or_op : seq< or_kw, ignored > {};
-
 struct xor_op : seq< xor_kw, ignored >{};
-struct bitand_op : seq< bitand_kw, ignored >{};
-struct bitor_op : seq< bitor_kw, ignored >{};
 
 struct eqeq_op : seq< TAO_PEGTL_STRING("=="), ignored > {};
 struct not_eq_op : seq< TAO_PEGTL_STRING("!="), ignored > {};
@@ -189,13 +184,9 @@ struct compare : list_must<sum, sor< lesser_or_eq_op, greater_or_eq_op, lesser_o
 
 struct equality : list_must< compare, sor< eqeq_op, not_eq_op > >{};
 
-struct bitwise_and : list_must < equality, bitand_op >{};
-
-struct bitwise_xor : list_must< bitwise_and, xor_op >{};
-
-struct bitwise_or : list_must< bitwise_xor, bitor_op >{};
+struct bitwise_xor : list_must< equality, xor_op >{};
 
-struct logical_and : list_must< bitwise_or, and_op >{};
+struct logical_and : list_must< bitwise_xor, and_op >{};
 
 struct logical_or : list_must< logical_and, or_op >{};
 
@@ -301,12 +292,8 @@ inline const std::string errors<language::compare>::error_message = "parse error
 template <>
 inline const std::string errors<language::equality>::error_message = "parse error, missing expression";
 template <>
-inline const std::string errors<language::bitwise_and>::error_message = "parse error, missing expression";
-template <>
 inline const std::string errors<language::bitwise_xor>::error_message = "parse error, missing expression";
 template <>
-inline const std::string errors<language::bitwise_or>::error_message = "parse error, missing expression";
-template <>
 inline const std::string errors<language::logical_and>::error_message = "parse error, missing expression";
 template <>
 inline const std::string errors<language::logical_or>::error_message = "parse error, missing expression";
diff --git a/tests/test_ASTBuilder.cpp b/tests/test_ASTBuilder.cpp
index 8807bfc6817d58444be3ae3dc8863a065a06853a..dd5afa0b72508a54a55ae5cf717ed80b3ecd0447 100644
--- a/tests/test_ASTBuilder.cpp
+++ b/tests/test_ASTBuilder.cpp
@@ -165,51 +165,45 @@ string s; s = "foo";
       SECTION("all operators mix")
       {
         std::string_view data = R"(
-1+2 and 3<= 2 * 4 - 1 == 2 or 2>=1 / 5 xor 6 bitand 7 and 2 or 1 bitor 2 <3 >7 xor -2 bitand 2 bitor + true - not false;
+1+2 and 3<= 2 * 4 - 1 == 2 or 2>=1 / 5 xor 7 and 2 or 2 <3 >7 xor -2 + true - not false;
 )";
 
         std::string_view result = R"(
 (root)
  `-(language::minus_op)
-     +-(language::bitor_op)
-     |   +-(language::bitand_op)
-     |   |   +-(language::xor_op)
-     |   |   |   +-(language::greater_op)
-     |   |   |   |   +-(language::lesser_op)
-     |   |   |   |   |   +-(language::bitor_op)
-     |   |   |   |   |   |   +-(language::or_op)
-     |   |   |   |   |   |   |   +-(language::and_op)
-     |   |   |   |   |   |   |   |   +-(language::bitand_op)
-     |   |   |   |   |   |   |   |   |   +-(language::xor_op)
-     |   |   |   |   |   |   |   |   |   |   +-(language::greater_or_eq_op)
-     |   |   |   |   |   |   |   |   |   |   |   +-(language::or_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   +-(language::eqeq_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::minus_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::lesser_or_eq_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::and_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::plus_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::integer:1)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:3)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::multiply_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       +-(language::integer:2)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |       `-(language::integer:4)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:1)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   |   |   |   |   |   |   `-(language::divide_op)
-     |   |   |   |   |   |   |   |   |   |   |       +-(language::integer:1)
-     |   |   |   |   |   |   |   |   |   |   |       `-(language::integer:5)
-     |   |   |   |   |   |   |   |   |   |   `-(language::integer:6)
-     |   |   |   |   |   |   |   |   |   `-(language::integer:7)
-     |   |   |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   |   |   `-(language::integer:1)
+     +-(language::plus_op)
+     |   +-(language::xor_op)
+     |   |   +-(language::greater_op)
+     |   |   |   +-(language::lesser_op)
+     |   |   |   |   +-(language::or_op)
+     |   |   |   |   |   +-(language::and_op)
+     |   |   |   |   |   |   +-(language::xor_op)
+     |   |   |   |   |   |   |   +-(language::greater_or_eq_op)
+     |   |   |   |   |   |   |   |   +-(language::or_op)
+     |   |   |   |   |   |   |   |   |   +-(language::eqeq_op)
+     |   |   |   |   |   |   |   |   |   |   +-(language::minus_op)
+     |   |   |   |   |   |   |   |   |   |   |   +-(language::lesser_or_eq_op)
+     |   |   |   |   |   |   |   |   |   |   |   |   +-(language::and_op)
+     |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::plus_op)
+     |   |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::integer:1)
+     |   |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:2)
+     |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:3)
+     |   |   |   |   |   |   |   |   |   |   |   |   `-(language::multiply_op)
+     |   |   |   |   |   |   |   |   |   |   |   |       +-(language::integer:2)
+     |   |   |   |   |   |   |   |   |   |   |   |       `-(language::integer:4)
+     |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:1)
+     |   |   |   |   |   |   |   |   |   |   `-(language::integer:2)
+     |   |   |   |   |   |   |   |   |   `-(language::integer:2)
+     |   |   |   |   |   |   |   |   `-(language::divide_op)
+     |   |   |   |   |   |   |   |       +-(language::integer:1)
+     |   |   |   |   |   |   |   |       `-(language::integer:5)
+     |   |   |   |   |   |   |   `-(language::integer:7)
      |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   `-(language::integer:3)
-     |   |   |   |   `-(language::integer:7)
-     |   |   |   `-(language::unary_minus)
-     |   |   |       `-(language::integer:2)
-     |   |   `-(language::integer:2)
+     |   |   |   |   |   `-(language::integer:2)
+     |   |   |   |   `-(language::integer:3)
+     |   |   |   `-(language::integer:7)
+     |   |   `-(language::unary_minus)
+     |   |       `-(language::integer:2)
      |   `-(language::true_kw)
      `-(language::unary_not)
          `-(language::false_kw)