Buggy code:
PublicCompany minor = null ; StartCompany_18EU startAction = null ; Stop selectedHomeCity = null ; currentPlayer = playerManager . getCurrentPlayer ( ) ; while ( true ) { if ( ! ( action instanceof StartCompany_18EU ) ) { errMsg = LocalText . getText ( "InvalidAction" ) ; break ; } startAction = ( ( StartCompany_18EU ) ( action ) ) ; if ( ( companyBoughtThisTurnWrapper . value ( ) ) != null ) { errMsg = LocalText . getText ( "AlreadyBought" , playerName ) ; break ; } company = companyManager . getPublicCompany ( companyName ) ; if ( company == null ) { errMsg = LocalText . getText ( "CompanyDoesNotExist" , companyName ) ; break ; } if ( company . hasStarted ( ) ) { errMsg = LocalText . getText ( "CompanyAlreadyStarted" , companyName ) ; break ; } cert = ipo . findCertificate ( company , true ) ; if ( shares < ( cert . getShares ( ) ) ) shares = cert . getShares ( ) ; numberOfCertsToBuy = shares - ( ( cert . getShares ( ) ) - 1 ) ; if ( ! ( mayPlayerBuyCertificate ( currentPlayer , company , numberOfCertsToBuy ) ) ) { errMsg = LocalText . getText ( "CantBuyMoreCerts" ) ; break ; } if ( ( startSpace = stockMarket . getStartSpace ( price ) ) == null ) { errMsg = LocalText . getText ( "InvalidStartPrice" , Bank . format ( this , price ) , company . getId ( ) ) ; break ; } if ( ( currentPlayer . getCashValue ( ) ) < ( shares * price ) ) { errMsg = LocalText . getText ( "NoMoney" ) ; break ; } if ( ! ( phase5Reached ) ) { minor = startAction . getChosenMinor ( ) ; if ( ( minor != null ) && ( ( currentPlayer . getPortfolioModel ( ) . getCertificates ( minor ) ) == null ) ) { errMsg = LocalText . getText ( "PlayerDoesNotOwn" , currentPlayer . getId ( ) , minor . getId ( ) ) ; break ; } } else { selectedHomeCity = startAction . getSelectedHomeStation ( ) ; if ( ( selectedHomeCity . getSlots ( ) ) <= ( selectedHomeCity . getBaseTokens ( ) . size ( ) ) ) { errMsg = LocalText . getText ( "InvalidHomeBase" , selectedHomeCity . toString ( ) , company . getId ( ) ) ; break ; } } numberOfCertsToBuy ++ ; break ; } if ( errMsg != null ) { DisplayBuffer . add ( this , LocalText . getText ( "CantStart" , playerName , companyName , Bank . format ( this , price ) , errMsg ) ) ; return false ; } MapHex homeHex = null ; int homeCityNumber = 1 ; if ( minor != null ) { homeHex = minor . getHomeHexes ( ) . get ( 0 ) ; homeCityNumber = homeHex . getStopOfBaseToken ( minor ) . getRelatedNumber ( ) ; } else if ( selectedHomeCity != null ) { homeHex = selectedHomeCity . getParent ( ) ; homeCityNumber = selectedHomeCity . getRelatedNumber ( ) ; homeHex . addHome ( company , selectedHomeCity ) ; } company . setHomeHex ( homeHex ) ; company . setHomeCityNumber ( homeCityNumber ) ; company . start ( startSpace ) ; ReportBuffer . add ( this , LocalText . getText ( "START_COMPANY_LOG" , playerName , companyName , Bank . format ( this , price ) , Bank . format ( this , ( shares * price ) ) , shares , cert . getShare ( ) , company . getId ( ) ) ) ; cert . moveTo ( currentPlayer ) ; Currency . wire ( currentPlayer , ( shares * price ) , company ) ; if ( minor != null ) { PublicCertificate cert2 = ipo . findCertificate ( company , false ) ; cert2 . moveTo ( currentPlayer ) ; int minorCash = minor . getCash ( ) ; int minorTrains = minor . getPortfolioModel ( ) . getTrainList ( ) . size ( ) ; company . transferAssetsFrom ( minor ) ; minor . setClosed ( ) ; ReportBuffer . add ( this , LocalText . getText ( "MERGE_MINOR_LOG" , currentPlayer . getId ( ) , minor . getId ( ) , company . getId ( ) , Bank . format ( this , minorCash ) , minorTrains ) ) ; ReportBuffer . add ( this , LocalText . getText ( "GetShareForMinor" , currentPlayer . getId ( ) , cert2 . getShare ( ) , company . getId ( ) , ipo . getParent ( ) . getId ( ) , minor . getId ( ) ) ) ; } else { <START_BUG> ReportBuffer . add ( this , LocalText . getText ( "SelectedHomeBase" , company . getId ( ) , selectedHomeCity . toString ( ) ) ) ; <END_BUG> } Portfolio . moveAll ( ipo . getCertificates ( company ) , company ) ; ReportBuffer . add ( this , LocalText . getText ( "SharesPutInTreasury" , company . getPortfolioModel ( ) . getShare ( company ) , company . getId ( ) ) ) ; int tokensCost = 100 ; String costText = Currency . toBank ( company , tokensCost ) ; ReportBuffer . add ( this , LocalText . getText ( "PaysForTokens" , company . getId ( ) , costText , company . getNumberOfBaseTokens ( ) ) ) ; companyBoughtThisTurnWrapper . set ( company ) ; hasActed . set ( true ) ; setPriority ( ) ; return true ; } @ Override protected boolean processGameSpecificAction ( PossibleAction action ) { } protected boolean mergeCompanies ( MergeCompanies action ) { } @ Override protected void floatCompany ( PublicCompany company ) { } public boolean discardTrain ( DiscardTrain action ) { } @ Override protected void finishTurn ( ) { } @ Override protected void finishRound ( ) { } }

Fix:
ReportBuffer . add ( this , LocalText . getText ( "SelectedHomeBase" , company . getId ( ) , selectedHomeCity . toText ( ) ) ) ;