diff --git a/BUGS b/BUGS
index 60e4dff49b48b08ccb1237c0fe54eb53f55c9083..b1b07d75015e9cb367ef1bd11ac2d88267a5bbb7 100755
--- a/BUGS
+++ b/BUGS
@@ -10,6 +10,10 @@
   three way call up, the parties in the three way cannot hear one another
   in the general case.
 
+* No auto-reload in chan_zap yet
+
+* Must be able to call park with flash-hook transfer
+
 ======================================================================
 Short report on the voicemail system
 ======================================================================
diff --git a/channels/chan_modem_i4l.c b/channels/chan_modem_i4l.c
index 5133a57c7b766769742068c7025f454652e021cb..511db64b11705e397fd7e43cb69f02934b81feb4 100755
--- a/channels/chan_modem_i4l.c
+++ b/channels/chan_modem_i4l.c
@@ -58,7 +58,7 @@ static int i4l_setdev(struct ast_modem_pvt *p, int dev)
 		return -1;
 	}
 	ast_modem_trim(p->response);
-	strncpy(cmd, p->response, sizeof(cmd));
+	strncpy(cmd, p->response, sizeof(cmd)-1);
 	if (ast_modem_expect(p, "OK", 5)) {
 		ast_log(LOG_WARNING, "Modem did not respond properly\n");
 		return -1;
@@ -287,12 +287,12 @@ static struct ast_frame *i4l_read(struct ast_modem_pvt *p)
 				return i4l_handle_escape(p, 'b');
 			} else
 			if (!strncasecmp(result, "CALLER NUMBER: ", 15 )) {
-				strncpy(p->cid, result + 15, sizeof(p->cid));
+				strncpy(p->cid, result + 15, sizeof(p->cid)-1);
 				return i4l_handle_escape(p, 'R');
 			} else
 			if (!strncasecmp(result, "RING", 4)) {
 				if (result[4]=='/') 
-					strncpy(p->dnid, result + 4, sizeof(p->dnid));
+					strncpy(p->dnid, result + 4, sizeof(p->dnid)-1);
 				return i4l_handle_escape(p, 'R');
 			} else
 			if (!strcasecmp(result, "NO CARRIER")) {
@@ -439,7 +439,7 @@ static void i4l_decusecnt()
 
 static int i4l_answer(struct ast_modem_pvt *p)
 {
-	if (ast_modem_send(p, "ATA", 0) ||
+	if (ast_modem_send(p, "ATA\r", 4) ||
 	     ast_modem_expect(p, "VCON", 10)) {
 		ast_log(LOG_WARNING, "Unable to answer: %s", p->response);
 		return -1;