diff --git a/org.eclipse.stem/core/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/graphmap/GraphMapCanvas.java b/org.eclipse.stem/core/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/graphmap/GraphMapCanvas.java
index a1177f1..12f22e5 100644
--- a/org.eclipse.stem/core/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/graphmap/GraphMapCanvas.java
+++ b/org.eclipse.stem/core/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/graphmap/GraphMapCanvas.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2021
  * IBM Corporation, BfR, and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
@@ -16,13 +16,18 @@
 
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.beans.PropertyChangeEvent;
+
 import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.ConcurrentModificationException;
 import java.util.List;
-import java.util.Observable;
-import java.util.Observer;
+
+//import java.util.Observable;
+//import java.util.Observer;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.text.NumberFormatter;
@@ -33,7 +38,6 @@
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ISelectionProvider;
@@ -160,20 +164,28 @@
 	private Image canvasImage;
 	private volatile GraphMapView view;
 	private volatile GraphMapControl ctrl;
+	private static String mapPropertyName = "graphMapScaleFactor";
 
-	private Observable paneChangeSubject;
+	//private Observable paneChangeSubject;
+	
+	/*Changing paneChangeSubject from Observable to PropertyChangeSupport*/
+	private PropertyChangeSupport paneChangeSubject;
 
 	public GraphMapCanvas(Composite parent, int style, GraphMapView view) {
 		super(parent, SWT.DOUBLE_BUFFERED | SWT.NO_BACKGROUND);
 
 		this.ctrl = (GraphMapControl) parent;
-		this.paneChangeSubject = new Observable() {
-			@Override
-			public void notifyObservers(Object arg) {
-				super.setChanged();
-				super.notifyObservers(arg);
-			}
-		};
+		this.paneChangeSubject = new PropertyChangeSupport(this) {
+			
+		private static final long serialVersionUID = -55036425306354436L;
+
+		/*commenting this out as Observable is deprecated*/
+			/*
+			 * @Override public void notifyObservers(Object arg) { super. setChanged();
+			 * super.notifyObservers(arg); }
+			 */
+			};
+		 
 
 		drawPolygonBorders = INITIAL_DRAW_POLYGON_BORDERS;
 		useLogScaling = INITIAL_USE_LOG_SCALING;
@@ -199,8 +211,14 @@
 		stdColorProvider = new StandardColorProvider(this.getDisplay());
 		selectionChangedListeners = new CopyOnWriteArrayList<ISelectionChangedListener>();
 
-		Activator.getDefault().getPreferenceStore()
-				.addPropertyChangeListener(this);
+		  
+		
+	   Activator.getDefault().getPreferenceStore().addPropertyChangeListener(this);
+			 
+		 
+		
+		
+		
 		this.view = view;
 	}
 
@@ -250,9 +268,15 @@
 
 			double relTransX = cCX - translationX;
 			double relTransY = cCY - translationY;
-			// fire pane change event
-			this.paneChangeSubject.notifyObservers(new PaneChangeEvent(scaleX, // this.scaleFactor,
-					relTransX, relTransY));
+			double[] mapScale =  {scaleX,relTransX,relTransY};
+
+			// fire pane change event using notifyObservers
+			//this.paneChangeSubject.notifyObservers(new PaneChangeEvent(scaleX, relTransX, relTransY));
+			
+			PropertyChangeEvent evt = new PropertyChangeEvent (this, mapPropertyName, null, mapScale);
+			//fire pane change event using firePropertyChange in PropertyChangeSupport
+			this.paneChangeSubject.firePropertyChange(evt);
+			
 			for (StemPolygon stempoly : polygonsToRender) {
 				stempoly.computeTransformedPoints(translationX, translationY,
 						scaleX, scaleY);
@@ -531,7 +555,6 @@
 		transformationChanged = true;
 	}
 
-	@Override
 	public void propertyChange(PropertyChangeEvent event) {
 		if (!isDisposed()) {
 			redraw();
@@ -560,12 +583,12 @@
 		fireSelection(selection);
 	}
 
-	public void addPaneChangeListener(Observer listener) {
-		this.paneChangeSubject.addObserver(listener);
+	public void addPaneChangeListener(PropertyChangeListener listener) {
+		this.paneChangeSubject.addPropertyChangeListener(listener);
 	}
 
-	public void removePaneChangeListener(Observer listener) {
-		this.paneChangeSubject.deleteObserver(listener);
+	public void removePaneChangeListener(PropertyChangeListener listener) {
+		this.paneChangeSubject.removePropertyChangeListener(listener);
 	}
 
 	@Override
@@ -1401,4 +1424,13 @@
 		}
 	}
 
+	@Override
+	public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {
+		// TODO Auto-generated method stub
+		
+	}
+	 
+
+	
+
 }
diff --git a/org.eclipse.stem/core/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/graphmap/GraphMapControl.java b/org.eclipse.stem/core/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/graphmap/GraphMapControl.java
index 8289a4a..a152bbb 100644
--- a/org.eclipse.stem/core/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/graphmap/GraphMapControl.java
+++ b/org.eclipse.stem/core/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/graphmap/GraphMapControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,2021
  * IBM Corporation, BfR, and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
@@ -14,14 +14,16 @@
 
 package org.eclipse.stem.ui.views.graphmap;
 
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
 import java.util.ConcurrentModificationException;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Observable;
-import java.util.Observer;
+//import java.util.Observable;
+//import java.util.Observer;
 import java.util.Set;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -816,27 +818,51 @@
 
 	}
 
-	private class PaneChangeListener implements Observer {
+	private class PaneChangeListener implements PropertyChangeListener {
 		GraphMapControl thiss;
-
+		
 		public PaneChangeListener(GraphMapControl ctrl) {
 			this.thiss = ctrl;
 		}
 
-		@Override
-		public void update(Observable o, Object arg) {
-			PaneChangeEvent e = (PaneChangeEvent) arg;
-			int viewId = GraphMapRegistry.getInstance().getViewId(thiss.view);
-			GraphMapPreferences prefs = GraphMapPreferences.getInstance();
-			prefs.updatePreferenceState(viewId, thiss.getSimulation(),
-					PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_TRANS_X,
-					e.getTranformationX());
-			prefs.updatePreferenceState(viewId, thiss.getSimulation(),
-					PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_TRANS_Y,
-					e.getTranformationY());
-			prefs.updatePreferenceState(viewId, thiss.getSimulation(),
-					PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_SCALE_FACTOR,
-					e.getScaleFactor());
+		public void propertyChange(PropertyChangeEvent evt) {
+			
+			  double[] mapScale =  (double[]) evt.getNewValue();
+			  double scaleX = mapScale[0];
+			  double relTransX = mapScale[1];
+			  double relTransY = mapScale[2];
+			  int viewId = GraphMapRegistry.getInstance().getViewId(thiss.view); 
+			  GraphMapPreferences prefs = GraphMapPreferences.getInstance();
+			  prefs.updatePreferenceState(viewId, thiss.getSimulation(),
+			  PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_TRANS_X, relTransX);
+			  prefs.updatePreferenceState(viewId, thiss.getSimulation(),
+			  PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_TRANS_Y, relTransY);
+			  prefs.updatePreferenceState(viewId, thiss.getSimulation(),
+			  PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_SCALE_FACTOR,scaleX);
+			 
 		}
+
+		
+
+		// update method commented out since use of Observable has deprecated in Java 11
+		/*
+		 * @Override public void update(Observable o, Object arg) { PaneChangeEvent e =
+		 * (PaneChangeEvent) arg; int viewId =
+		 * GraphMapRegistry.getInstance().getViewId(thiss.view); GraphMapPreferences
+		 * prefs = GraphMapPreferences.getInstance();
+		 * prefs.updatePreferenceState(viewId, thiss.getSimulation(),
+		 * PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_TRANS_X, e.getTranformationX());
+		 * prefs.updatePreferenceState(viewId, thiss.getSimulation(),
+		 * PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_TRANS_Y, e.getTranformationY());
+		 * prefs.updatePreferenceState(viewId, thiss.getSimulation(),
+		 * PreferenceConstants.GRAPHMAP_PERSISTANT_VIEW_SCALE_FACTOR,
+		 * e.getScaleFactor()); }
+		 */
+		 
+
+		
+
+	    
+		
 	}
 }
