Hi, Pete: I have tried as you suggested but still no joy. No doubt I'm doing something really stupid so I'll post the code that I use. This is the code I use to get my list of BitmapImages: private void Window_Loaded(object sender, RoutedEventArgs e) { List images = GetProductImages(); lstProductImages.ItemsSource = images; } private List GetProductImages() { List images = new List(); using (SqlConnection cn = new SqlConnection(cnString)) { string sql = "SELECT Top 10 ProductImage From Products WHERE NOT (ProductImage IS NULL)"; SqlCommand cmd = new SqlCommand(sql); cmd.Connection = cn; cmd.Connection.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { byte[] productImage = null; productImage = (byte[])reader["ProductImage"]; using (MemoryStream ms = new MemoryStream(productImage)) { //ms.Seek(0, SeekOrigin.Begin); ms.Position = 0; BitmapImage bm = new BitmapImage(); bm.BeginInit(); //bm.CacheOption = BitmapCacheOption.OnLoad; bm.StreamSource = ms; bm.EndInit(); ms.Close(); images.Add(bm); } } cmd.Connection.Close(); } return images; } This is the XAML for the listbox: <Setter Property="ItemTemplate"> <Setter.Value> <DataTemplate> <Border BorderBrush="Black" BorderThickness="4" CornerRadius="5" Margin="6"> <!--<Image Source="{Binding Path=UriSource}" Stretch="Fill" Width="100" Height="120"/>--> <Image Source="{Binding Path=StreamSource}" Stretch="Fill" Width="100" Height="120"/> </Border> </DataTemplate> </Setter.Value> </Setter> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <WrapPanel /> </ItemsPanelTemplate> </Setter.Value> </Setter> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" /> Does anything obvious jump out at you? Karl: I've looked at both of those sites and played around with what they suggested to no avail. Thanks very much, dlarkin77