diff --git a/src/os_qnx.c b/src/os_qnx.c
index 84b6a1c..d482b34 100644
--- a/src/os_qnx.c
+++ b/src/os_qnx.c
@@ -24,10 +24,10 @@
 #if defined(FEAT_GUI_PHOTON)
     PhChannelParms_t parms;
 
-    memset( &parms, 0, sizeof( parms ) );
+    memset(&parms, 0, sizeof(parms));
     parms.flags = Ph_DYNAMIC_BUFFER;
 
-    is_photon_available = (PhAttach( NULL, &parms ) != NULL) ? TRUE : FALSE;
+    is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE;
 #endif
 }
 
@@ -39,8 +39,8 @@
 /* Turn on the clipboard for a console vim when photon is running */
 void qnx_clip_init()
 {
-    if( is_photon_available == TRUE && !gui.in_use)
-	clip_init( TRUE );
+    if (is_photon_available == TRUE && !gui.in_use)
+	clip_init(TRUE);
 }
 
 /*****************************************************************************/
@@ -48,32 +48,32 @@
 
 /* No support for owning the clipboard */
 int
-clip_mch_own_selection( VimClipboard *cbd )
+clip_mch_own_selection(VimClipboard *cbd)
 {
     return FALSE;
 }
 
 void
-clip_mch_lose_selection( VimClipboard *cbd )
+clip_mch_lose_selection(VimClipboard *cbd)
 {
 }
 
 void
-clip_mch_request_selection( VimClipboard *cbd )
+clip_mch_request_selection(VimClipboard *cbd)
 {
     int		    type = MLINE, clip_length = 0, is_type_set = FALSE;
     void	    *cbdata;
     PhClipHeader    *clip_header;
     char_u	    *clip_text = NULL;
 
-    cbdata = PhClipboardPasteStart( PhInputGroup( NULL ));
-    if( cbdata != NULL )
+    cbdata = PhClipboardPasteStart(PhInputGroup(NULL));
+    if (cbdata != NULL)
     {
 	/* Look for the vim specific clip first */
-	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_VIM );
-	if( clip_header != NULL && clip_header->data != NULL )
+	clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_VIM);
+	if (clip_header != NULL && clip_header->data != NULL)
 	{
-	    switch( *(char *) clip_header->data )
+	    switch(*(char *) clip_header->data)
 	    {
 		default: /* fallthrough to line type */
 		case 'L': type = MLINE; break;
@@ -86,27 +86,27 @@
 	}
 
 	/* Try for just normal text */
-	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_TEXT );
-	if( clip_header != NULL )
+	clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_TEXT);
+	if (clip_header != NULL)
 	{
 	    clip_text = clip_header->data;
 	    clip_length  = clip_header->length - 1;
 
-	    if( clip_text != NULL && is_type_set == FALSE )
+	    if (clip_text != NULL && is_type_set == FALSE)
 		type = MAUTO;
 	}
 
-	if( (clip_text != NULL) && (clip_length > 0) )
+	if ((clip_text != NULL) && (clip_length > 0))
 	{
-	    clip_yank_selection( type, clip_text, clip_length, cbd );
+	    clip_yank_selection(type, clip_text, clip_length, cbd);
 	}
 
-	PhClipboardPasteFinish( cbdata );
+	PhClipboardPasteFinish(cbdata);
     }
 }
 
 void
-clip_mch_set_selection( VimClipboard *cbd )
+clip_mch_set_selection(VimClipboard *cbd)
 {
     int type;
     long_u  len;
@@ -114,31 +114,31 @@
     PhClipHeader clip_header[2];
 
     /* Prevent recursion from clip_get_selection() */
-    if( cbd->owned == TRUE )
+    if (cbd->owned == TRUE)
 	return;
 
     cbd->owned = TRUE;
-    clip_get_selection( cbd );
+    clip_get_selection(cbd);
     cbd->owned = FALSE;
 
-    type = clip_convert_selection( &str, &len, cbd );
-    if( type >= 0 )
+    type = clip_convert_selection(&str, &len, cbd);
+    if (type >= 0)
     {
-	text_clip = lalloc( len + 1, TRUE ); /* Normal text */
+	text_clip = lalloc(len + 1, TRUE); /* Normal text */
 
-	if( text_clip && vim_clip )
+	if (text_clip && vim_clip)
 	{
-	    memset( clip_header, 0, sizeof( clip_header ) );
+	    memset(clip_header, 0, sizeof(clip_header));
 
-	    STRNCPY( clip_header[0].type, CLIP_TYPE_VIM, 8 );
-	    clip_header[0].length = sizeof( vim_clip );
+	    STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8);
+	    clip_header[0].length = sizeof(vim_clip);
 	    clip_header[0].data   = vim_clip;
 
-	    STRNCPY( clip_header[1].type, CLIP_TYPE_TEXT, 8 );
+	    STRNCPY(clip_header[1].type, CLIP_TYPE_TEXT, 8);
 	    clip_header[1].length = len + 1;
 	    clip_header[1].data   = text_clip;
 
-	    switch( type )
+	    switch(type)
 	    {
 		default: /* fallthrough to MLINE */
 		case MLINE:	*vim_clip = 'L'; break;
@@ -148,14 +148,14 @@
 #endif
 	    }
 
-	    vim_strncpy( text_clip, str, len );
+	    vim_strncpy(text_clip, str, len);
 
 	    vim_clip[ 1 ] = NUL;
 
-	    PhClipboardCopy( PhInputGroup( NULL ), 2, clip_header);
+	    PhClipboardCopy(PhInputGroup(NULL), 2, clip_header);
 	}
-	vim_free( text_clip );
+	vim_free(text_clip);
     }
-    vim_free( str );
+    vim_free(str);
 }
 #endif
diff --git a/src/version.c b/src/version.c
index 5bae7d8..2837018 100644
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    321,
+/**/
     320,
 /**/
     319,
