/* OK, now commit destination to socket.  */
        sk_setup_caps(sk, &rt->u.dst);
 
-       dp->dccps_gar =
-               dp->dccps_iss = secure_dccp_sequence_number(inet->saddr,
-                                                           inet->daddr,
-                                                           inet->sport,
-                                                           usin->sin_port);
-       dccp_update_gss(sk, dp->dccps_iss);
-
+       dp->dccps_iss = secure_dccp_sequence_number(inet->saddr, inet->daddr,
+                                                   inet->sport, inet->dport);
        inet->id = dp->dccps_iss ^ jiffies;
 
        err = dccp_connect(sk);
 
        dh->dccph_checksum = dccp_v6_csum_finish(skb, &np->saddr, &np->daddr);
 }
 
-static inline __u32 dccp_v6_init_sequence(const struct sk_buff *skb)
+static inline __u32 secure_dccpv6_sequence_number(__u32 *saddr, __u32 *daddr,
+                                                 __u16 sport, __u16 dport   )
 {
-       return secure_tcpv6_sequence_number(skb->nh.ipv6h->daddr.s6_addr32,
-                                           skb->nh.ipv6h->saddr.s6_addr32,
-                                           dccp_hdr(skb)->dccph_dport,
-                                           dccp_hdr(skb)->dccph_sport     );
+       return secure_tcpv6_sequence_number(saddr, daddr, sport, dport);
+}
+
+static inline __u32 dccp_v6_init_sequence(struct sk_buff *skb)
+{
+       return secure_dccpv6_sequence_number(skb->nh.ipv6h->daddr.s6_addr32,
+                                            skb->nh.ipv6h->saddr.s6_addr32,
+                                            dccp_hdr(skb)->dccph_dport,
+                                            dccp_hdr(skb)->dccph_sport     );
+
 }
 
 static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
        err = inet6_hash_connect(&dccp_death_row, sk);
        if (err)
                goto late_failure;
-       /* FIXME */
-#if 0
-       dp->dccps_gar = secure_dccp_v6_sequence_number(np->saddr.s6_addr32,
-                                                      np->daddr.s6_addr32,
-                                                      inet->sport,
-                                                      inet->dport);
-#endif
+
+       dp->dccps_iss = secure_dccpv6_sequence_number(np->saddr.s6_addr32,
+                                                     np->daddr.s6_addr32,
+                                                     inet->sport, inet->dport);
        err = dccp_connect(sk);
        if (err)
                goto late_failure;
 
        
        dccp_sync_mss(sk, dst_mtu(dst));
 
-       dccp_update_gss(sk, dp->dccps_iss);
        /*
         * SWL and AWL are initially adjusted so that they are not less than
         * the initial Sequence Numbers received and sent, respectively:
         * These adjustments MUST be applied only at the beginning of the
         * connection.
         */
+       dccp_update_gss(sk, dp->dccps_iss);
        dccp_set_seqno(&dp->dccps_awl, max48(dp->dccps_awl, dp->dccps_iss));
 
+       /* S.GAR - greatest valid acknowledgement number received on a non-Sync;
+        *         initialized to S.ISS (sec. 8.5)                            */
+       dp->dccps_gar = dp->dccps_iss;
+
        icsk->icsk_retransmits = 0;
        init_timer(&dp->dccps_xmit_timer);
        dp->dccps_xmit_timer.data = (unsigned long)sk;