     static const unsigned int ALLELE_PER_INT = 32;
     static const unsigned int MAX_EVENTS = ((comp_cap_type::MAX_CONSTANT_MEMORY / sizeof( event_count_type )) >> 1);    // use half of the constant space for event counts
 
-    static const unsigned int STREAM_COUNT = 8;
-
-    typedef curandStateMtgp32_t state_type;
-    typedef mtgp32_kernel_params_t state_param_type;
+    typedef unsigned long long      seed_type;
+    typedef curandStateMtgp32_t     state_type;
+    typedef mtgp32_kernel_params_t  state_param_type;
 
     crossover( );
 

crossover< 3 >::~crossover() {
    cudaFree( dStates );
    cudaFree( dParams );

    for( unsigned int i = 0; i < STREAM_COUNT; ++i ) {
        cudaStreamSynchronize( streams[i] );

        cudaStreamDestroy( streams[i] );
    }
}

void crossover< 3 >::get_state( boost::property_tree::ptree & n ) {
    n.put( "crossover.version", 3 );
    n.put( "crossover.curand.state_type", clotho::cuda::curand_helper< typename crossover< 3 >::state_type >::StateName );
    
    boost::property_tree::ptree sds;
    clotho::utility::add_value_array( sds, m_seeds.begin(), m_seeds.end() );

    n.add_child( "crossover.curand.seed", sds  );

#ifdef USE_TEXTURE_MEMORY_FOR_ALLELE
    n.put( "crossover.use_texture_memory_for_allele", true );

protected:
    state_type * dStates;
    state_param_type * dParams;
    seed_type m_seed;
};

/**
