diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index d6c39a33096ed86da1f753dd16045c3d311f6652..bb539e9c750557a8f31482b19ef401b50b9501ff 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -55,6 +55,7 @@ var (
 	app = flags.NewApp(gitCommit, gitDate, fmt.Sprintf("the %s command line interface", repositoryIdentifier))
 	// flags that configure the node
 	nodeFlags = []cli.Flag{
+		utils.BorLogsFlag,
 		utils.IdentityFlag,
 		utils.UnlockedAccountFlag,
 		utils.PasswordFileFlag,
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 08f1720ade74a62846d6709606fb618b305ad3bb..9e4c34254cc6f8c1d039881994c87b0a3a70c568 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -373,6 +373,10 @@ var (
 		Value: ethconfig.Defaults.TxPool.Lifetime,
 	}
 	// Performance tuning settings
+	BorLogsFlag = cli.BoolFlag{
+		Name:  "bor.logs",
+		Usage: "Enable bor logs retrieval",
+	}
 	CacheFlag = cli.IntFlag{
 		Name:  "cache",
 		Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode)",
@@ -1482,7 +1486,11 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
 	setWhitelist(ctx, cfg)
 	setLes(ctx, cfg)
 
-	// Cap the cache allowance and tune the garbage collector
+	if ctx.GlobalIsSet(BorLogsFlag.Name) {
+		cfg.BorLogs = ctx.GlobalBool(BorLogsFlag.Name)
+	}
+
+  // Cap the cache allowance and tune the garbage collector
 	mem, err := gopsutil.VirtualMemory()
 	if err == nil {
 		if 32<<(^uintptr(0)>>63) == 32 && mem.Total > 2*1024*1024*1024 {
diff --git a/eth/backend.go b/eth/backend.go
index 85fadbf74121e7cd8db6b2720bc87328c5ece48d..d8ecda58a8a763415531c9a4b9ff17d27a83a105 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -310,7 +310,7 @@ func (s *Ethereum) APIs() []rpc.API {
 
 	// BOR change starts
 	// set genesis to public filter api
-	publicFilterAPI := filters.NewPublicFilterAPI(s.APIBackend, false, 5*time.Minute)
+	publicFilterAPI := filters.NewPublicFilterAPI(s.APIBackend, false, 5*time.Minute, s.config.BorLogs)
 	// avoiding constructor changed by introducing new method to set genesis
 	publicFilterAPI.SetChainConfig(s.blockchain.Config())
 	// BOR change ends
diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go
index 82a6648b5bdac570388b2b8ae2ce27ffb12d996b..a17f28c14fdf12ca2a56ba7208d58e6ef5c2f79a 100644
--- a/eth/ethconfig/config.go
+++ b/eth/ethconfig/config.go
@@ -209,6 +209,9 @@ type Config struct {
 
 	// Berlin block override (TODO: remove after the fork)
 	OverrideBerlin *big.Int `toml:",omitempty"`
+
+	// Bor logs flag
+	BorLogs bool
 }
 
 // CreateConsensusEngine creates a consensus engine for the given chain configuration.
diff --git a/eth/filters/api.go b/eth/filters/api.go
index d88d387f2f016e23b29104b3229721e535eb0da5..63e7f98e5520b2d22afa49e5160a2a18ff9f7063 100644
--- a/eth/filters/api.go
+++ b/eth/filters/api.go
@@ -57,18 +57,20 @@ type PublicFilterAPI struct {
 	filtersMu sync.Mutex
 	filters   map[rpc.ID]*filter
 	timeout   time.Duration
+	borLogs   bool
 
 	chainConfig *params.ChainConfig
 }
 
 // NewPublicFilterAPI returns a new PublicFilterAPI instance.
-func NewPublicFilterAPI(backend Backend, lightMode bool, timeout time.Duration) *PublicFilterAPI {
+func NewPublicFilterAPI(backend Backend, lightMode bool, timeout time.Duration, borLogs bool) *PublicFilterAPI {
 	api := &PublicFilterAPI{
 		backend: backend,
 		chainDb: backend.ChainDb(),
 		events:  NewEventSystem(backend, lightMode),
 		filters: make(map[rpc.ID]*filter),
 		timeout: timeout,
+		borLogs: borLogs,
 	}
 	go api.timeoutLoop(timeout)
 
@@ -347,7 +349,9 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([
 		// Block filter requested, construct a single-shot filter
 		filter = NewBlockFilter(api.backend, *crit.BlockHash, crit.Addresses, crit.Topics)
 		// Block bor filter
-		borLogsFilter = NewBorBlockLogsFilter(api.backend, sprint, *crit.BlockHash, crit.Addresses, crit.Topics)
+		if api.borLogs {
+			borLogsFilter = NewBorBlockLogsFilter(api.backend, sprint, *crit.BlockHash, crit.Addresses, crit.Topics)
+		}
 	} else {
 		// Convert the RPC block numbers into internal representations
 		begin := rpc.LatestBlockNumber.Int64()
@@ -361,7 +365,9 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([
 		// Construct the range filter
 		filter = NewRangeFilter(api.backend, begin, end, crit.Addresses, crit.Topics)
 		// Block bor filter
-		borLogsFilter = NewBorBlockLogsRangeFilter(api.backend, sprint, begin, end, crit.Addresses, crit.Topics)
+		if api.borLogs {
+			borLogsFilter = NewBorBlockLogsRangeFilter(api.backend, sprint, begin, end, crit.Addresses, crit.Topics)
+		}
 	}
 
 	// Run the filter and return all the logs
@@ -369,14 +375,19 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([
 	if err != nil {
 		return nil, err
 	}
-	// Run the filter and return all the logs
-	borBlockLogs, err := borLogsFilter.Logs(ctx)
-	if err != nil {
-		return nil, err
+
+	if borLogsFilter != nil {
+		// Run the filter and return all the logs
+		borBlockLogs, err := borLogsFilter.Logs(ctx)
+		if err != nil {
+			return nil, err
+		}
+
+		return returnLogs(types.MergeBorLogs(logs, borBlockLogs)), err
 	}
 
 	// merge bor block logs and receipt logs and return it
-	return returnLogs(types.MergeBorLogs(logs, borBlockLogs)), err
+	return returnLogs(logs), err
 }
 
 // UninstallFilter removes the filter with the given filter id.
diff --git a/les/client.go b/les/client.go
index bdb6c8cbd7171adc3a8c767f57b12952c0caa8cb..6fa8e3597e38206cc2b0d4096007378fe4933b52 100644
--- a/les/client.go
+++ b/les/client.go
@@ -301,7 +301,7 @@ func (s *LightEthereum) APIs() []rpc.API {
 		}, {
 			Namespace: "eth",
 			Version:   "1.0",
-			Service:   filters.NewPublicFilterAPI(s.ApiBackend, true, 5*time.Minute),
+			Service:   filters.NewPublicFilterAPI(s.ApiBackend, true, 5*time.Minute, false),
 			Public:    true,
 		}, {
 			Namespace: "net",