diff --git a/README.md b/README.md
index 4af2c69b0162ee122f87943c492376498f884a14..0fcbdf4b90fe6e95aab828ba8d974331eb0cc35b 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,36 @@
 # Unconditional Diffusion model
  
-This repo presents our paper implementation of the unconditional diffusion model ,with its popular optimizations, from *Denoising Diffusion Probabilistic Models* by Ho et al and *Improved Denoising Diffusion Probabilistic Models* by Nichol and Dhariwal. The pipeline contains training, sampling and evaluation functions meant to be run on the HPC.
+This repo presents our paper implementation of the unconditional diffusion model, with its popular optimizations, from [*Denoising Diffusion Probabilistic Models* ](https://proceedings.neurips.cc/paper/2020/hash/4c5bcfec8584af0d967f1ab10179ca4b-Abstract.html) by Ho et al and [*Improved Denoising Diffusion Probabilistic Models* ](https://proceedings.mlr.press/v139/nichol21a.html) by Nichol and Dhariwal. The pipeline contains training, sampling, and evaluation functions meant to be run on the HPC.
  
-We show correctness of our pipeline by training unconditional diffusion models on the landscapes (LHQ) and celebrity A (CelebAHQ) datasets, generating realistic images with a resolution of 128x128px.
+We show the correctness of our pipeline by training unconditional diffusion models on the landscapes (LHQ) and celebrity A (CelebAHQ) datasets, generating realistic images with a resolution of 128x128px.
 
 Diffusion models are a class of generative models that offer a unique approach to modeling complex data distributions by simulating a stochastic process, known as a diffusion process, that gradually transforms data from a simple initial distribution into a complex data distribution. More specifically, the simple distribution is given by Gaussian Noise which is iteratively denoised into coherent images through modeling the entire data distribution present in the training set.
 
 ## Sample Examples
 ### Unconditional Landscape Generation: 
+<table>
+  <tr>
+    <td><img src="imgs/landscapes/sample_0_0.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_26.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_1_13.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_5.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_1_2.png" alt="land"></td>
+  </tr>
+  <tr>
+    <td><img src="imgs/landscapes/sample_1_4.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_13.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_6.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_35.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_36.png" alt="land"></td>
+  </tr>
+  <tr>
+    <td><img src="imgs/landscapes/sample_0_9.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_11.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_1.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_15.png" alt="land"></td>
+    <td><img src="imgs/landscapes/sample_0_18.png" alt="land"></td>
+  </tr>
+</table>
 
 ### Unconditional Celebrity Face Generation:
 <table>
diff --git a/evaluation/evaluate.py b/evaluation/evaluate.py
index 54b2d6a457c030cd481d2d5137175d7ee9578670..862554d1fa189ca34014c1d4c41788e0de7b6777 100644
--- a/evaluation/evaluate.py
+++ b/evaluation/evaluate.py
@@ -10,6 +10,105 @@ from torchvision.models import resnet50
 from evaluation.helpers.kNN import *
 from evaluation.helpers.metrics import *
 
+def simple_evaluator(model, 
+                     device,
+                     dataloader,
+                     checkpoint,
+                     experiment_path,
+                     sample_idx=0,
+                     **args,
+                     ):
+  '''
+  Takes a trained diffusion model from 'checkpoint' and evaluates its performance on the test 
+  dataset 'dataloader' w.r.t. the three most important perfromance metrics; FID, IS, KID. We continue
+  the progress of our evaluation function for the LDM upscalaer and may update this function accordingly.
+    
+  checkpoint:      Name of the saved pth. file containing the trained weights and biases  
+  experiment_path: Path to the experiment folder where the evaluation results will be stored  
+  dataloader:      Loads the test dataset for evaluation
+  sample_idx:      Integer that denotes which sample directory sample_{sample_idx} from the checkpoint model shall be used for evaluation
+  '''
+
+  checkpoint_path = f'{experiment_path}trained_ddpm/{checkpoint}'
+  # create evaluation directory for the complete experiment (if first time sampling images)
+  output_dir = f'{experiment_path}evaluations/'
+  os.makedirs(output_dir, exist_ok=True)
+
+  # create evaluation directory for the current version of the trained model
+  model_name = os.path.basename(checkpoint_path)
+  epoch = re.findall(r'\d+', model_name)
+  if epoch:
+      e = int(epoch[0])
+  else:
+      raise ValueError(f"No digit found in the filename: {filename}")
+  model_dir = os.path.join(output_dir,f'epoch_{e}')
+  os.makedirs(model_dir, exist_ok=True)
+
+  # create the evaluation directory for this evaluation run for the current version of the model 
+  eval_dir_list = [d for d in os.listdir(model_dir) if os.path.isdir(os.path.join(model_dir, d))]
+  indx_list = [int(d.split('_')[1]) for d in eval_dir_list if d.startswith('evaluation_')]
+  j = max(indx_list, default=-1) + 1
+  eval_dir = os.path.join(model_dir, f'evaluation_{j}')
+  os.makedirs(eval_dir, exist_ok=True)
+  
+  # Compute Metrics   
+  eval_path = os.path.join(eval_dir, 'eval.txt')
+ 
+  # get sampled images
+  transform = transforms.Compose([transforms.ToTensor(), transforms.Lambda(lambda x: (x * 255).type(torch.uint8))])
+  sample_path =  os.path.join(f'{experiment_path}samples/',f'epoch_{e}',f'sample_{sample_idx}')
+  ignore_tensor = f'image_tensor{j}'
+  images = []
+  for samplename in os.listdir(sample_path):
+        if samplename == ignore_tensor:
+            continue
+        img = Image.open(os.path.join(sample_path, samplename))
+        img = transform(img)
+        images.append(img)
+  # split them into batches for GPU memory
+  generated = torch.stack(images).to(device)
+  generated_batches = torch.split(generated, dataloader.batch_size)
+  nr_generated_batches = len(generated_batches)
+  nr_real_batches = len(dataloader)
+
+  # Init FID, IS and KID scores
+  fid = FrechetInceptionDistance(normalize = False).to(device)
+  iscore = InceptionScore(normalize=False).to(device)
+  kid = KernelInceptionDistance(normalize=False, subset_size=32).to(device)
+
+  # Update scores for the full testing dataset w.r.t. the sampled batches
+  for idx,(data, _) in enumerate(dataloader):
+    data = data.to(device)
+    fid.update(data, real=True)
+    kid.update(data, real=True)
+    if idx < nr_generated_batches:
+        gen = generated_batches[idx].to(device)
+        fid.update(gen, real=False)
+        kid.update(gen, real=False)
+        iscore.update(gen)
+
+  # If there are sampled images left, add them too
+  for idx in range(nr_real_batches, nr_generated_batches):
+    gen = generated_batches[idx].to(device)
+    fid.update(gen, real=False)
+    kid.update(gen, real=False)
+    iscore.update(gen)
+ 
+  # compute total FID, IS and KID 
+  fid_score = fid.compute()
+  i_score = iscore.compute()
+  kid_score = kid.compute()
+
+   # store results in txt file
+  with open(str(eval_path), 'a') as txt:
+    result = f'FID_epoch_{e}_sample_{sample_idx}:'
+    txt.write(result + str(fid_score.item()) + '\n')
+    result = f'KID_epoch_{e}_sample_{sample_idx}:'
+    txt.write(result + str(kid_score) + '\n')
+    result =  f'IS_epoch_{e}_sample_{sample_idx}:'
+    txt.write(result + str(i_score) + '\n')
+
+
 
 def ddpm_evaluator(experiment_path, realpath, genpath, data='lhq', size=128, arch='clip', mode='kNN', k=3, sample=10, name_appendix='', fid='no'):
     
diff --git a/imgs/landscapes/sample_0_0.png b/imgs/landscapes/sample_0_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..42015d1832826cf9d908d969f717d66457df62c0
Binary files /dev/null and b/imgs/landscapes/sample_0_0.png differ
diff --git a/imgs/landscapes/sample_0_1.png b/imgs/landscapes/sample_0_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..706862db1692ff2e598e61427ce884b9b1320a79
Binary files /dev/null and b/imgs/landscapes/sample_0_1.png differ
diff --git a/imgs/landscapes/sample_0_11.png b/imgs/landscapes/sample_0_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..e5e10647f7e0143a92762537fb6acc8c4827a166
Binary files /dev/null and b/imgs/landscapes/sample_0_11.png differ
diff --git a/imgs/landscapes/sample_0_13.png b/imgs/landscapes/sample_0_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..04e25c91ebdc6f8dae1cb2a01eb0faf41f623a4b
Binary files /dev/null and b/imgs/landscapes/sample_0_13.png differ
diff --git a/imgs/landscapes/sample_0_15.png b/imgs/landscapes/sample_0_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ce1c04fb50aa90cf5ccb7c81cdb1d47c6497dd0
Binary files /dev/null and b/imgs/landscapes/sample_0_15.png differ
diff --git a/imgs/landscapes/sample_0_18.png b/imgs/landscapes/sample_0_18.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ee7d91d98288b511cec4296955b86b683bd838d
Binary files /dev/null and b/imgs/landscapes/sample_0_18.png differ
diff --git a/imgs/landscapes/sample_0_26.png b/imgs/landscapes/sample_0_26.png
new file mode 100644
index 0000000000000000000000000000000000000000..44b774e1c5e92166557e271614273118de0aca57
Binary files /dev/null and b/imgs/landscapes/sample_0_26.png differ
diff --git a/imgs/landscapes/sample_0_35.png b/imgs/landscapes/sample_0_35.png
new file mode 100644
index 0000000000000000000000000000000000000000..3f83e4bd63586fa6da71ff244bc6334a536a5607
Binary files /dev/null and b/imgs/landscapes/sample_0_35.png differ
diff --git a/imgs/landscapes/sample_0_36.png b/imgs/landscapes/sample_0_36.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb1ffa22f2416ab9372e1008665480f180a6da50
Binary files /dev/null and b/imgs/landscapes/sample_0_36.png differ
diff --git a/imgs/landscapes/sample_0_5.png b/imgs/landscapes/sample_0_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..ccf6edccef2d2db246c4c60ffba0fb3275f9ff87
Binary files /dev/null and b/imgs/landscapes/sample_0_5.png differ
diff --git a/imgs/landscapes/sample_0_6.png b/imgs/landscapes/sample_0_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..062c5d0365fd22604e84ef3ad060ee06e5b961f7
Binary files /dev/null and b/imgs/landscapes/sample_0_6.png differ
diff --git a/imgs/landscapes/sample_0_9.png b/imgs/landscapes/sample_0_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cd873852e8c9ab78645d3c2c8e98e84e04d9829
Binary files /dev/null and b/imgs/landscapes/sample_0_9.png differ
diff --git a/imgs/landscapes/sample_1_13.png b/imgs/landscapes/sample_1_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..d262ebfbe7e0219f0ef99cfceb1774811e40efe3
Binary files /dev/null and b/imgs/landscapes/sample_1_13.png differ
diff --git a/imgs/landscapes/sample_1_2.png b/imgs/landscapes/sample_1_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ae7c3629fdb644737f44bf619bdf49448784302
Binary files /dev/null and b/imgs/landscapes/sample_1_2.png differ
diff --git a/imgs/landscapes/sample_1_4.png b/imgs/landscapes/sample_1_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f714e2298444023f9b900e999db6b9860d49084
Binary files /dev/null and b/imgs/landscapes/sample_1_4.png differ