diff --git a/custodian/vasp/handlers.py b/custodian/vasp/handlers.py
index <HASH>..<HASH> 100644
--- a/custodian/vasp/handlers.py
+++ b/custodian/vasp/handlers.py
@@ -235,8 +235,22 @@ class VaspErrorHandler(ErrorHandler):
 
         if self.errors.intersection(["subspacematrix", "rspher",
                                      "real_optlay"]):
-            actions.append({"dict": "INCAR",
-                            "action": {"_set": {"LREAL": False}}})
+            s = vi["POSCAR"].structure
+            if len(s) < 50:
+                actions.append({"dict": "INCAR",
+                                "action": {"_set": {"LREAL": False}}})
+            else:
+                # for large supercell, try an in-between option LREAL = True
+                # prior to LREAL = False
+                if self.error_count['real_optlay'] == 0:
+                    # use real space projectors generated by pot
+                    actions.append({"dict": "INCAR",
+                                    "action": {"_set": {"LREAL": True}}})
+                    self.error_count['real_optlay'] += 1
+                elif self.error_count['real_optlay'] == 1:
+                    actions.append({"dict": "INCAR",
+                                    "action": {"_set": {"LREAL": False}}})
+                    self.error_count['real_optlay'] += 1
 
         if self.errors.intersection(["tetirr", "incorrect_shift"]):
use LREAL = True as buffer layer to LREAL = False for large supercell