diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h
index 0823a5ed47..550376abdd 100644
--- a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h
+++ b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h
@@ -54,6 +54,7 @@ ESP8266WebServerTemplate<ServerType>::ESP8266WebServerTemplate(IPAddress addr, i
 , _lastHandler(nullptr)
 , _currentArgCount(0)
 , _currentArgs(nullptr)
+, _currentArgsHavePlain(0)
 , _postArgsLen(0)
 , _postArgs(nullptr)
 , _headerKeysCount(0)
@@ -76,6 +77,7 @@ ESP8266WebServerTemplate<ServerType>::ESP8266WebServerTemplate(int port)
 , _lastHandler(nullptr)
 , _currentArgCount(0)
 , _currentArgs(nullptr)
+, _currentArgsHavePlain(0)
 , _postArgsLen(0)
 , _postArgs(nullptr)
 , _headerKeysCount(0)
@@ -565,7 +567,7 @@ const String& ESP8266WebServerTemplate<ServerType>::arg(const String& name) cons
     if ( _postArgs[j].key == name )
       return _postArgs[j].value;
   }
-  for (int i = 0; i < _currentArgCount; ++i) {
+  for (int i = 0; i < _currentArgCount + _currentArgsHavePlain; ++i) {
     if ( _currentArgs[i].key == name )
       return _currentArgs[i].value;
   }
@@ -574,14 +576,14 @@ const String& ESP8266WebServerTemplate<ServerType>::arg(const String& name) cons
 
 template <typename ServerType>
 const String& ESP8266WebServerTemplate<ServerType>::arg(int i) const {
-  if (i >= 0 && i < _currentArgCount)
+  if (i >= 0 && i < _currentArgCount + _currentArgsHavePlain)
     return _currentArgs[i].value;
   return emptyString;
 }
 
 template <typename ServerType>
 const String& ESP8266WebServerTemplate<ServerType>::argName(int i) const {
-  if (i >= 0 && i < _currentArgCount)
+  if (i >= 0 && i < _currentArgCount + _currentArgsHavePlain)
     return _currentArgs[i].key;
   return emptyString;
 }
@@ -597,7 +599,7 @@ bool ESP8266WebServerTemplate<ServerType>::hasArg(const String& name) const {
     if (_postArgs[j].key == name)
       return true;
   }
-  for (int i = 0; i < _currentArgCount; ++i) {
+  for (int i = 0; i < _currentArgCount + _currentArgsHavePlain; ++i) {
     if (_currentArgs[i].key == name)
       return true;
   }
diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h
index 2ace5dc107..85eab1b7df 100644
--- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h
+++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h
@@ -233,6 +233,7 @@ class ESP8266WebServerTemplate
 
   int              _currentArgCount;
   RequestArgument* _currentArgs;
+  int              _currentArgsHavePlain;
   std::unique_ptr<HTTPUpload> _currentUpload;
   int              _postArgsLen;
   RequestArgument* _postArgs;
diff --git a/libraries/ESP8266WebServer/src/Parsing-impl.h b/libraries/ESP8266WebServer/src/Parsing-impl.h
index 54bcd6c28e..6c96d564a8 100644
--- a/libraries/ESP8266WebServer/src/Parsing-impl.h
+++ b/libraries/ESP8266WebServer/src/Parsing-impl.h
@@ -208,6 +208,7 @@ bool ESP8266WebServerTemplate<ServerType>::_parseRequest(ClientType& client) {
         RequestArgument& arg = _currentArgs[_currentArgCount++];
         arg.key = F("plain");
         arg.value = plainBuf;
+        _currentArgsHavePlain = 1;
       }
     } else { // isForm is true
       // here: content is not yet read (plainBuf is still empty)