diff --git a/mysql-test/r/events.result b/mysql-test/r/events.result
index c3b94e580c21de39f0e28c04ee07ed4c06bb9eae..38c2d902ec1e7761ed97bd658dc12622afc136b7 100644
--- a/mysql-test/r/events.result
+++ b/mysql-test/r/events.result
@@ -4,8 +4,9 @@ drop event if exists event1;
 Warnings:
 Note	1305	Event event1 does not exist
 create event event1 on schedule every 15 minute starts now() ends date_add(now(), interval 5 hour) DO begin end;
-alter event event1 rename to event2;
-alter event event2 disabled;
+alter event event1 rename to event2 enable;
+alter event event2 disable;
+alter event event2 enable;
 alter event event2 on completion not preserve;
 alter event event2 on schedule every 1 year on completion preserve rename to event3 comment "new comment" do begin select 1; end__
 alter event event3 rename to event2;
@@ -40,6 +41,15 @@ count(*)
 0
 drop event event3;
 drop table t_event3;
+create event e_26 on schedule at '2017-01-01 00:00:00' disable do set @a = 5;
+select db, name, body, definer, convert_tz(execute_at, 'UTC', 'SYSTEM'), on_completion from mysql.event;
+db	name	body	definer	convert_tz(execute_at, 'UTC', 'SYSTEM')	on_completion
+events_test	e_26	 set @a = 5	root@localhost	2017-01-01 00:00:00	DROP
+drop event e_26;
+create event e_26 on schedule at NULL disabled do set @a = 5;
+ERROR HY000: Incorrect AT value: 'NULL'
+create event e_26 on schedule at 'definitely not a datetime' disabled do set @a = 5;
+ERROR HY000: Incorrect AT value: 'definitely not a datetime'
 set names utf8;
 create event задачка on schedule every 123 minute starts now() ends now() + interval 1 month do select 1;
 drop event задачка;
diff --git a/mysql-test/t/events.test b/mysql-test/t/events.test
index 3f9445fc84563b99f720b236636f5326c334b373..c92e247ef7fcf227b286c35c00f728122bcd4ace 100644
--- a/mysql-test/t/events.test
+++ b/mysql-test/t/events.test
@@ -2,8 +2,9 @@ create database if not exists events_test;
 use events_test;
 drop event if exists event1;
 create event event1 on schedule every 15 minute starts now() ends date_add(now(), interval 5 hour) DO begin end;
-alter event event1 rename to event2;
-alter event event2 disabled;
+alter event event1 rename to event2 enable;
+alter event event2 disable;
+alter event event2 enable;
 alter event event2 on completion not preserve;
 delimiter __;
 alter event event2 on schedule every 1 year on completion preserve rename to event3 comment "new comment" do begin select 1; end__
@@ -32,6 +33,15 @@ select count(*) from t_event3;
 drop event event3;
 drop table t_event3;
 
+
+create event e_26 on schedule at '2017-01-01 00:00:00' disable do set @a = 5;
+select db, name, body, definer, convert_tz(execute_at, 'UTC', 'SYSTEM'), on_completion from mysql.event;
+drop event e_26;
+--error 1503
+create event e_26 on schedule at NULL disabled do set @a = 5;
+--error 1503
+create event e_26 on schedule at 'definitely not a datetime' disabled do set @a = 5;
+
 set names utf8;
 create event задачка on schedule every 123 minute starts now() ends now() + interval 1 month do select 1;
 drop event задачка;
diff --git a/sql/event_timed.cc b/sql/event_timed.cc
index 3b59bb3359647ee08130afa39ab60441102be615..4e64ad2ee54547cf849467186f36b38119ef5a03 100644
--- a/sql/event_timed.cc
+++ b/sql/event_timed.cc
@@ -133,6 +133,7 @@ event_timed::init_body(THD *thd)
    0 - OK
    EVEX_PARSE_ERROR - fix_fields failed
    EVEX_BAD_PARAMS  - datetime is in the past
+   ER_WRONG_VALUE   - wrong value for execute at
 */
 
 int
@@ -148,19 +149,19 @@ event_timed::init_execute_at(THD *thd, Item *expr)
   if (expr->fix_fields(thd, &expr))
     DBUG_RETURN(EVEX_PARSE_ERROR);
 
-  if (expr->val_int() == MYSQL_TIMESTAMP_ERROR)
-    DBUG_RETURN(EVEX_BAD_PARAMS);
-
   // let's check whether time is in the past
   thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp, 
                               (my_time_t) thd->query_start()); 
 
-  if (expr->val_int() < TIME_to_ulonglong_datetime(&time_tmp))
-    DBUG_RETURN(EVEX_BAD_PARAMS);
 
   if ((not_used= expr->get_date(&ltime, TIME_NO_ZERO_DATE)))
+    DBUG_RETURN(ER_WRONG_VALUE);
+
+  if (TIME_to_ulonglong_datetime(&ltime) <
+      TIME_to_ulonglong_datetime(&time_tmp))
     DBUG_RETURN(EVEX_BAD_PARAMS);
 
+
   /*
       This may result in a 1970-01-01 date if ltime is > 2037-xx-xx
       CONVERT_TZ has similar problem
@@ -292,8 +293,7 @@ int
 event_timed::init_starts(THD *thd, Item *new_starts)
 {
   my_bool not_used;
-  TIME ltime;
-  my_time_t my_time_tmp;
+  TIME ltime, time_tmp;
 
   DBUG_ENTER("event_timed::init_starts");
 
@@ -306,6 +306,14 @@ event_timed::init_starts(THD *thd, Item *new_starts)
   if ((not_used= new_starts->get_date(&ltime, TIME_NO_ZERO_DATE)))
     DBUG_RETURN(EVEX_BAD_PARAMS);
 
+  // let's check whether time is in the past
+  thd->variables.time_zone->gmt_sec_to_TIME(&time_tmp, 
+                              (my_time_t) thd->query_start()); 
+
+  if (TIME_to_ulonglong_datetime(&ltime) <
+      TIME_to_ulonglong_datetime(&time_tmp))
+    DBUG_RETURN(EVEX_BAD_PARAMS);
+
   /*
       This may result in a 1970-01-01 date if ltime is > 2037-xx-xx
       CONVERT_TZ has similar problem
diff --git a/sql/lex.h b/sql/lex.h
index e0b4855abc3fcffe302e0c11f961ccd63346d032..3dfaa0cf6cb0b1a224ea0e1ea3d8046539636f28 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -168,7 +168,6 @@ static SYMBOL symbols[] = {
   { "DETERMINISTIC",    SYM(DETERMINISTIC_SYM)},
   { "DIRECTORY",	SYM(DIRECTORY_SYM)},
   { "DISABLE",		SYM(DISABLE_SYM)},
-  { "DISABLED",		SYM(DISABLED_SYM)},
   { "DISCARD",		SYM(DISCARD)},
   { "DISK",		SYM(DISK_SYM)},
   { "DISTINCT",		SYM(DISTINCT)},
@@ -185,7 +184,6 @@ static SYMBOL symbols[] = {
   { "ELSE",             SYM(ELSE)},
   { "ELSEIF",           SYM(ELSEIF_SYM)},
   { "ENABLE",		SYM(ENABLE_SYM)},
-  { "ENABLED",		SYM(ENABLED_SYM)},
   { "ENCLOSED",		SYM(ENCLOSED)},
   { "END",		SYM(END)},
   { "ENDS",		SYM(ENDS_SYM)},
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt
index 6cc5eec1afd6296d52cf6a6e6aaa053ea55fa63c..4c273258815d1d4caebe2233446c7e6bce2142b6 100644
--- a/sql/share/errmsg.txt
+++ b/sql/share/errmsg.txt
@@ -5793,7 +5793,7 @@ ER_EVENT_DATA_TOO_LONG
         eng "Data for column '%s' too long"
 ER_DROP_INDEX_FK
         eng "Cannot drop index '%-.64s': needed in a foreign key constraint"
-        ger "Kann Index '%-.64s' nicht löschen: wird für einen einen Fremdschlüssel benötigt"
+        ger "Kann Index '%-.64s' nicht löschen: wird für einen Fremdschlüssel benötigt"
 ER_CANT_WRITE_LOCK_LOG_TABLE
         eng "You can't write-lock a log table. Only read access is possible."
 ER_CANT_READ_LOCK_LOG_TABLE
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 224b598e9829e04104657d083c78c0e1432dfa99..a07bed584d09df6b7982cffc08cf6643aff3cec8 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -243,7 +243,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
 %token  DETERMINISTIC_SYM
 %token  DIRECTORY_SYM
 %token  DISABLE_SYM
-%token  DISABLED_SYM
 %token  DISCARD
 %token  DISK_SYM
 %token  DISTINCT
@@ -259,7 +258,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
 %token  ELSEIF_SYM
 %token  ELT_FUNC
 %token  ENABLE_SYM
-%token  ENABLED_SYM
 %token  ENCLOSED
 %token  ENCODE_SYM
 %token  ENCRYPT
@@ -1436,6 +1434,16 @@ ev_schedule_time: EVERY_SYM expr interval
                 yyerror(ER(ER_SYNTAX_ERROR));
                 YYABORT;  
                 break;
+              case ER_WRONG_VALUE:
+                {
+                  char buff[120];
+                  String str(buff,(uint32) sizeof(buff), system_charset_info);
+                  String *str2= $2->val_str(&str);
+                  my_error(ER_WRONG_VALUE, MYF(0), "AT",
+                           str2? str2->c_ptr():"NULL");
+                  YYABORT;
+                  break;
+                }          
               case EVEX_BAD_PARAMS:
                 my_error(ER_EVENT_EXEC_TIME_IN_THE_PAST, MYF(0));
                 YYABORT;
@@ -1446,14 +1454,14 @@ ev_schedule_time: EVERY_SYM expr interval
       ;
     
 opt_ev_status: /* empty */ {$<ulong_num>$= 0;}
-        | ENABLED_SYM
+        | ENABLE_SYM
           {
             LEX *lex=Lex;
             if (!lex->et_compile_phase)
               lex->et->status= MYSQL_EVENT_ENABLED;
             $<ulong_num>$= 1;	   
           }
-        | DISABLED_SYM
+        | DISABLE_SYM
           {
             LEX *lex=Lex;
             
@@ -9302,7 +9310,7 @@ keyword_sp:
 	| DELAY_KEY_WRITE_SYM	{}
 	| DES_KEY_FILE		{}
 	| DIRECTORY_SYM		{}
-	| DISABLED_SYM		{}
+	| DISABLE_SYM		{}
 	| DISCARD		{}
 	| DISK_SYM              {}
 	| DUMPFILE		{}
@@ -9322,9 +9330,7 @@ keyword_sp:
 	| EXTENT_SIZE_SYM       {}
 	| FAST_SYM		{}
 	| FOUND_SYM		{}
-	| DISABLE_SYM		{}
 	| ENABLE_SYM		{}
-	| ENABLED_SYM		{}
 	| FULL			{}
 	| FILE_SYM		{}
 	| FIRST_SYM		{}