diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp
index a9cbb62547ce75e5df45c9bf067d93a1b9013b29..dd96da5a99a9524279cdd07010d1c11318a84ad8 100644
--- a/src/guiFormSpecMenu.cpp
+++ b/src/guiFormSpecMenu.cpp
@@ -104,6 +104,7 @@ GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev,
 	m_formspec_version(0),
 	m_focused_element(""),
 	m_joystick(joystick),
+	current_field_enter_pending(""),
 	m_font(NULL),
 	m_remap_dbl_click(remap_dbl_click)
 #ifdef __ANDROID__
@@ -2695,6 +2696,10 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
 			current_keys_pending.key_enter = false;
 		}
 
+		if (!current_field_enter_pending.empty()) {
+			fields["key_enter_field"] = current_field_enter_pending;
+		}
+
 		if (current_keys_pending.key_escape) {
 			fields["key_escape"] = "true";
 			current_keys_pending.key_escape = false;
@@ -3625,8 +3630,16 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
 
 		if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) {
 			if (event.GUIEvent.Caller->getID() > 257) {
+				for (u32 i = 0; i < m_fields.size(); i++) {
+					FieldSpec &s = m_fields[i];
+					if (s.ftype == f_Unknown &&
+							s.fid == event.GUIEvent.Caller->getID()) {
+						current_field_enter_pending = s.fname;
+					}
+				}
 
 				if (m_allowclose) {
+					current_keys_pending.key_enter = true;
 					acceptInput(quit_mode_accept);
 					quitMenu();
 				} else {
diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h
index 2fb55070dac82806b41252f728a02a266aae7e5e..7b809df7128b1c14ac18d8e7f7d881eb40732562 100644
--- a/src/guiFormSpecMenu.h
+++ b/src/guiFormSpecMenu.h
@@ -463,6 +463,7 @@ class GUIFormSpecMenu : public GUIModalMenu
 	} fs_key_pendig;
 
 	fs_key_pendig current_keys_pending;
+	std::string current_field_enter_pending;
 
 	void parseElement(parserData* data,std::string element);
 
@@ -557,4 +558,3 @@ class FormspecFormSource: public IFormSource
 };
 
 #endif
-