diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp
index 84f6f7bea4bb8ab89506c600b435a8dd2232b2c4..bbf729c66810c7c49ff8c7ecbcee8c2e837f7fb2 100644
--- a/aarbology2/src/aarbology.cpp
+++ b/aarbology2/src/aarbology.cpp
@@ -56,6 +56,8 @@ int main ( int argc, char * argv[] ) {
 		allowed.push_back ( "exactSubtreeRepeatsNaive" );
 		allowed.push_back ( "compressedBitParallelIndex" );
 		allowed.push_back ( "fullAndLinearIndex" );
+
+		allowed.push_back ( "badCharacterShiftTable" );
 		TCLAP::ValuesConstraint < std::string > allowedVals ( allowed );
 
 		TCLAP::ValueArg < std::string > algorithm ( "a", "algorithm", "Execute algorithm", false, "exactSubtreeMatch", & allowedVals );
@@ -281,6 +283,18 @@ int main ( int argc, char * argv[] ) {
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
 
 			alib::XmlDataFactory::toStdout ( fullAndLinearIndex );
+		} else if ( algorithm.getValue ( ) == "badCharacterShiftTable" ) {
+			tree::RankedTreeWrapper pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
+
+			measurements::end ( );
+			measurements::start ( "Algorithm", measurements::Type::MAIN );
+
+			std::map < std::ranked_symbol < DefaultSymbolType, DefaultRankType >, size_t > bcs = tree::properties::BadCharacterShiftTable::bcs ( pattern );
+
+			measurements::end ( );
+			measurements::start ( "Output write", measurements::Type::AUXILIARY );
+
+			alib::XmlDataFactory::toStdout ( bcs );
 		} else {
 			throw exception::CommonException ( "Invalid algorithm" );
 		}