Index: protocols/twitter/twitter.c
===================================================================
--- protocols/twitter/twitter.c	(revision 3da21cec0f649a5123ae1a8e8202b89a1621ee97)
+++ protocols/twitter/twitter.c	(revision c05108cf8f2aa1c14662f298ea39feeed58fcf60)
@@ -918,4 +918,5 @@
 	gboolean allow_post =
 	        g_strcasecmp(set_getstr(&ic->acc->set, "commands"), "strict") != 0;
+	gboolean auto_populate_reply_metadata = FALSE;
 	bee_user_t *bu = NULL;
 
@@ -996,4 +997,15 @@
 		in_reply_to = id;
 		allow_post = TRUE;
+	} else if (g_strcasecmp(cmd[0], "greply") == 0 && cmd[1] && cmd[2]) {
+		id = twitter_message_id_from_command_arg(ic, cmd[1], &bu);
+		if (!id || !bu) {
+			twitter_log(ic, "User `%s' does not exist or didn't "
+			            "post any statuses recently", cmd[1]);
+			goto eof;
+		}
+		message = new = g_strdup_printf("%s", cmd[2]);
+		in_reply_to = id;
+		auto_populate_reply_metadata = TRUE;
+		allow_post = TRUE;
 	} else if (g_strcasecmp(cmd[0], "rawreply") == 0 && cmd[1] && cmd[2]) {
 		id = twitter_message_id_from_command_arg(ic, cmd[1], NULL);
@@ -1047,5 +1059,5 @@
 		   this would delete the second-last Tweet. Prevent that. */
 		td->last_status_id = 0;
-		twitter_post_status(ic, message, in_reply_to);
+		twitter_post_status(ic, message, in_reply_to, auto_populate_reply_metadata);
 	} else {
 		twitter_log(ic, "Unknown command: %s", cmd[0]);
Index: protocols/twitter/twitter_lib.c
===================================================================
--- protocols/twitter/twitter_lib.c	(revision 3da21cec0f649a5123ae1a8e8202b89a1621ee97)
+++ protocols/twitter/twitter_lib.c	(revision c05108cf8f2aa1c14662f298ea39feeed58fcf60)
@@ -1696,22 +1696,51 @@
  * Function to POST a new status to twitter.
  */
-void twitter_post_status(struct im_connection *ic, char *msg, guint64 in_reply_to)
-{
-	char *args[4] = {
-		"status", msg,
-		"in_reply_to_status_id",
-		g_strdup_printf("%" G_GUINT64_FORMAT, in_reply_to)
-	};
-
-	if (set_getbool(&ic->acc->set, "in_korea") && !in_reply_to) {
-		g_free(args[3]);
-		args[2] = "place_id";
-		args[3] = g_strdup("c999e6a453e9ef72");
+void twitter_post_status(struct im_connection *ic, char *msg, guint64 in_reply_to, gboolean auto_populate_reply_metadata)
+{
+	size_t args_len = 0;
+	char * in_reply_to_str = NULL;
+	char * place_id_str = NULL;
+	gboolean in_korea = (set_getbool(&ic->acc->set, "in_korea") && !in_reply_to);
+
+	args_len = 2; /* "status", msg */
+	if (in_reply_to) {
+		args_len += 2;
+	}
+	if (auto_populate_reply_metadata) {
+		args_len += 2;
+	}
+	if (in_korea) {
+		args_len += 2;
+	}
+
+	char **args = g_new0(char *, args_len);
+	args_len = 0;
+	args[args_len++] = "status";
+	args[args_len++] = msg;
+	if (in_reply_to) {
+		in_reply_to_str = g_strdup_printf("%" G_GUINT64_FORMAT, in_reply_to);
+		args[args_len++] = "in_reply_to_status_id";
+		args[args_len++] = in_reply_to_str;
+	}
+	if (auto_populate_reply_metadata) {
+		args[args_len++] = "auto_populate_reply_metadata";
+		args[args_len++] = "true";
+	}
+	if (in_korea) {
+		place_id_str = g_strdup("c999e6a453e9ef72");
+		args[args_len++] = "place_id";
+		args[args_len++] = place_id_str;
 		in_reply_to = 1;
 	}
 
 	twitter_http(ic, TWITTER_STATUS_UPDATE_URL, twitter_http_post, ic, 1,
-	             args, in_reply_to ? 4 : 2);
-	g_free(args[3]);
+	             args, args_len);
+	if (in_reply_to_str) {
+		g_free(in_reply_to_str);
+	}
+	if (place_id_str) {
+		g_free(place_id_str);
+	}
+	g_free(args);
 }
 
Index: protocols/twitter/twitter_lib.h
===================================================================
--- protocols/twitter/twitter_lib.h	(revision 3da21cec0f649a5123ae1a8e8202b89a1621ee97)
+++ protocols/twitter/twitter_lib.h	(revision c05108cf8f2aa1c14662f298ea39feeed58fcf60)
@@ -96,5 +96,5 @@
 void twitter_get_statuses_friends(struct im_connection *ic, gint64 next_cursor);
 
-void twitter_post_status(struct im_connection *ic, char *msg, guint64 in_reply_to);
+void twitter_post_status(struct im_connection *ic, char *msg, guint64 in_reply_to, gboolean auto_populate_reply_metadata);
 void twitter_direct_messages_new(struct im_connection *ic, char *who, char *message);
 void twitter_friendships_create_destroy(struct im_connection *ic, char *who, int create);
